CSS flex布局 flex-grow不为1 items始终均匀分配剩余空间问题

编程知识 更新时间:2023-04-06 07:48:49

问题记录:

html如下:

<div class="flex-container">
  <div class="box B">B</div>
  <div class="box D">D</div>
  <div class="box E">E</div>
</div>

css如下:

  1. 对父容器 flex-container 设置 display:flex
  2. 使用 .flex-container > div 选择器选择 .flex-container 下的第一层div子元素,设置flex-grow:1
  3. 使用 .B 类选择器 选择 元素B,设置flex-grow:3
.flex-container{
  display:flex;
  height:200px;
  width:500px;
  justify-content:center;
  align-items:center;
  background-color:yellow;
}

.flex-container > div{
  width: 60px;
  height: 60px;
  line-height: 60px;
  text-align: center;
  font-size: 2em;
  /* 这里为每一个flex item设置 flex-grow:1 */
  flex-grow:1;
}

.B {
  background-color: #50a18e; 
  /* 这里单独为B设置 flex-grow:3 */
  flex-grow:3;
}
.D { background-color: #f2916d; }
.E { background-color: #f26e50; }


每个flex item 均匀分配剩余空间,.B的flex-grow:3 不生效。


原因分析:

一开始考虑是因为 CSS 的选择器之间有优先级。

优先级关系:内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器

但是 .flex-container > div 不算一个标签选择器,因而在 菜鸟教程 找到了如下规则。

当一个标签同时被多个选择符选中,我们便需要确定这些选择符的优先级。我们有如下规则:

CSS 优先规则4:计算选择符中 ID 选择器的个数(a),计算选择符中类选择器、属性选择器以及伪类选择器的个数之和(b),计算选择符中标签选择器和伪元素选择器的个数之和(c)。按
a、b、c 的顺序依次比较大小,大的则优先级高,相等则比较下一个。若最后两个的选择符中 a、b、c 都相等,则按照"就近原则"来判断。

因此,.flex-container > div 选择器的 (a)id选择器个数=0,(b)类选择器、属性选择器、伪类选择器个数之和 = 1 (c)标签选择器和伪元素选择器个数之和 = 1。
.B类选择器的 (a)id选择器个数=0,(b)类选择器、属性选择器、伪类选择器个数之和 = 1 (c)标签选择器和伪元素选择器个数之和 = 0。

因而 .flex-container > div 选择器的优先级高于 .B 类选择器。
所以最后 flex items 的 flex-grow 都为1,因而出现了上图所示的平均分配父容器剩余空间。


解决方案:

  1. 不使用 .container > div 选择器,而另外使用一个类来设置flex items 的通用属性。
    <div class="box B">B</div>
  2. 使用 .container > div 选择器,而在.B的样式中,设置
    flex-grow:3 !important;
    经评论区提醒,可以使用 .container > .B {} 选择器。
  3. 同时还要注意父容器 flex-container 的宽度,如果没有剩余空间,那么将不会出现剩余空间分配给 flex items,如果剩余空间较小,效果也将不明显。

更多推荐

CSS flex布局 flex-grow不为1 items始终均匀分配剩余空间问题

本文发布于:2023-04-06 07:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/63e59f6c66cbd8f8590616fc5011bdb5.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不为   均匀   布局   剩余   分配

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 48738文章数
  • 14阅读数
  • 0评论数