垂直对齐一个“挂掉”与其同伴水平对齐的div的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垂直对齐一个“挂掉”与其同伴水平对齐的div的元素相关的知识,希望对你有一定的参考价值。

我不知道如何简洁地描述我想用文字实现的内容,所以这是一张ASCII图片:

   (+1)  | Enter your phone number |
         | Enter your name         |

我有两个<input>s,一个用于电话号码,一个用于姓名。这些应该水平对齐(在相同的“列”中)。

我还有一个<span>(国家代码,另一条数据必须与电话号码一起输入)。这应该“挂掉”输入到左侧的电话号码。

我想垂直居中国家/地区代码,使其显示在电话号码输入的中间。

看起来CSS Grid可以实现这一点。我想知道:有没有一个不涉及CSS Grid的解决方案?

这是我到目前为止的一个片段。我正在使用“大小为零的位置:相对元素及其内容在一个位置:绝对子”技术从流中排除“国家代码”元素,因此它不会破坏水平对齐。

如您所见,它不会垂直居中国家/地区代码。

input {
  height: 2rem;
}

.container {
  margin-left: auto;
  margin-right: auto;
  text-align: center;
}

.phone-number-input-container {
  display: inline-flex;
  align-items: center;
}

.name-input-container {
  margin-top: 1rem;
}

.country-code-container {
  position: relative;
  width: 0;
  height: 0;
}

.country-code {
  position: absolute;
  right: 1rem;
}
<html>
  <body>
    <div class='container'>
      <div class='phone-number-input-container'>
        <span class='country-code-container'>
          <b class='country-code'>+1</b>
        </span>
        <input class='input' placeholder="Phone number"></input>
      </div>

      <div class='name-input-container '>
        <input class='input' placeholder="Name"></input>
      </div>
    </div>
  </body>
</html>
答案

你差不多好了,只需在上面的容器上使用position:absolute,只调整左边的值,因为flexbox已经垂直居中(所以不需要设置top

input {
  height: 2rem;
}

.container {
  margin-left: auto;
  margin-right: auto;
  text-align: center;
}

.phone-number-input-container {
  display: inline-flex;
  align-items: center;
  position:relative;
}

.name-input-container {
  margin-top: 1rem;
}

.country-code-container {
  position: absolute;
  left:-2rem;
}
<html>
  <body>
    <div class='container'>
      <div class='phone-number-input-container'>
        <span class='country-code-container'>
          <b class='country-code'>+1</b>
        </span>
        <input class='input' placeholder="Phone number">
      </div>

      <div class='name-input-container '>
        <input class='input' placeholder="Name">
      </div>
    </div>
  </body>
</html>
另一答案

为什么不用flexbox?网格可能有点过于强壮

.wrapper {
  display:flex
}
input {
  width:300px
}
<div class="wrapper">
  <div class="country-code">
    (+1)
  </div>
  <div class="right">
  <div class="phone">
   <input type="phone" placeholder="Enter your phone numner">
  </div>
  <div class="name">
    <input type="text" placeholder="Enter your name">
    </div>  
  </div>
  
</div>

以上是关于垂直对齐一个“挂掉”与其同伴水平对齐的div的元素的主要内容,如果未能解决你的问题,请参考以下文章

将元素水平和垂直对齐到页面的中心[重复]

div的水平和垂直对齐

CSS中的垂直对齐?

使用CSS垂直和水平对齐(中间和中心)[重复]

在 DIV 中垂直和水平对齐

水平和垂直对齐 Div [重复]