html - 为什么 flexbox 会用特定值改变我的 div 的宽度

标签 html css flexbox

<分区>

我尝试使用 flex 布局来制作登录内容,它就像一个图标和一个输入排成一行。我用图标和输入的 width:100% 设置了 width:20pxheight:20px。我认为它将输入覆盖除特定值之外的所有剩余宽度。结果是图标的大小改变了。

随着对flex的进一步了解,我知道了另一种实现方式,比如flex:1 with input or setting min-width/height 图标,但我只想知道为什么 width:100% 会影响同级图标的大小。

.parent {
  width: 72%;
  height: 100px;
  border: 1px solid lightblue;
  display: flex;
  align-items: center;
}

.icon {
  width: 20px;
  height: 20px;
  border: 2px solid green;
  display: block;
}

.login {
  width: 100%;
}

.login::placeholder {
  width: 91px;
}
<div class="parent">
  <div class="icon"></div>
  <input class="login" placeholder="place input your invite code" />
</div>

此时.icon的大小变成了23.33*24widthheight都变了.

最佳答案

这是由于 box-sizing 。你的widthheight修改实际上不是来自 flexbox,而是由于来自 width: 72% 的计算与边界相结合。请注意,如果您带走 border: 2px solid green.icon , .icon height会返回指定的20px .

如果你想阻止这些调整,你可以设置box-sizing: border-box , 这将使 .icon20px width 包括所有边框和填充计算:

* {
  box-sizing: border: box;
}

我建议将此应用到具有全局选择器 *所有 元素, 实际上通常推荐设置它,因为它使元素大小计算更容易处理,而且事实上大多数框架默认包含此声明。

* {
  box-sizing: border-box;
}

.parent {
  width: 72%;
  height: 100px;
  border: 1px solid lightblue;
  display: flex;
  align-items: center;
}

.icon {
  width: 20px;
  height: 20px;
  border: 2px solid green;
  display: block;
}

.login {
  width: 100%;
}

.login::placeholder {
  width: 91px;
}
<div class="parent">
  <div class="icon"></div>
  <input class="login" placeholder="place input your invite code" />
</div>

关于html - 为什么 flexbox 会用特定值改变我的 div 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56437008/

相关文章:

javascript - 数据绑定(bind)不适用于 div 的条件显示

javascript - 从 hlink 加载时页面未加载?

javascript - 即使设置了宽度,TouchableOpacity 也会占用所有可用空间

html - 如何在 flex div 中使 float 工作

javascript - 如何创建带背景重复的梯形div

html - 嗨,我有 2 个关于 css 的问题

html - 如何居中图像

javascript - 有人可以帮我更改 Chrome 版 Google 词典扩展程序的不透明度吗?

html - flex 盒订单 : I want box to open under a element which is not a sibling

html - 将 HTML table 元素放置在 img 元素之上