我在flexbox列中遇到了问题,flex'd元素的子元素对height的百分比没有响应.我只在Chrome中判断过这个问题,据我所知,这是Chrome唯一的问题.以下是我的例子:

HTML

<div class='flexbox'>
  <div class='flex'>
    <div class='flex-child'></div>
  </div>
  <div class='static'></div>
</div>

CSS

.flexbox{
  position:absolute;
  background:black;
  width:100%;
  height:100%;

  display: flex;
  flex-direction:column;
}

.flex{
  background:blue;
  flex:1;
}

.flex-child{
  background:red;
  height:100%;
  width:100%;
  display:block;
}

.static{
  background:green;
  width:100%;
  height:5rem;
}

Here's the CodePen.

我想要它,让红色的.flex-child填满蓝色的.flex.为什么height:100%不起作用?

推荐答案

TL;DR:设置.flexdisplay:flex,go 掉.flex-child上的height:100%.You can see the modified CodePen here.

Why it works:

我从this similar question中学到,根据flexbox规范,align-self:stretch值(flex’d元素的默认值)只会更改元素交叉大小属性的used value(在本例中为height).然而,百分比是根据父对象的交叉大小属性的specified value计算的,而不是它的使用值.如果你打开你的判断器,在"Styles"下看到height:100%,在"Computed"下看到height:1200px,那么这分别显示了specifiedused个值.

在这方面,Chrome似乎符合T恤的规格.这意味着在.flex-child上设置height:100%意味着.flex中指定heightheight:100%%.由于我们没有在.flex上指定height,这意味着我们将获得默认heightheight:100%%,即auto.看到布局引擎为什么变得混乱了吗?

.flex设置为display:flex并从.flex-child中移除height:100%(这样它就不会一直try 将auto设置为.flex%)将使.flex-child填满所有.flex

When this won't work:

如果你只想填满.flex个中的一部分,这是行不通的,例如.try 将.flex-child设置为height:90%,因为调整子对象意味着它将填满所有可用空间.我以为你可以用绝对定位破解它,但这似乎也行不通.您可以通过将第二个子级添加到.flex(我们将其称为.spacer),并将.spacer设置为flex:1,将.flex-child设置为flex:9(确保在.flex上也设置flex-direction:column)来破解此问题.黑客攻击,但我唯一能修好它的方法.Here's the CodePen.

不过,希望我们不必一直依赖于此,他们只需更改规格,就可以更好地按照预期行事.

Css相关问答推荐

视频覆盖不适用于reactjs样式的组件

如何以Angular 调整下拉控件的高度

在GRID-TEMPLATE-ROWS中设置最大行数:Repeat()

为什么 :focus 会覆盖 :focus-visible ?

具有水平和垂直滚动的表格上的活动 scss 类

是否有一个 CSS 可以根据字符的高度 for each 字符呈现可变高度?

为什么左浮动上的清除:左也会影响右浮动,以及如何避免它

努力将 CSS 样式应用于 Elm 应用程序

:required 或 [required] CSS Select 器

当计算的宽度不准确时,如何在 cypress 中测试元素的宽度?

Flexbox 子高度它的内容

基于内容显示(show)/隐藏(hide)同级div

bootstrap 模式对话框中的谷歌 map 自动完成结果

ID 在整个页面中必须是唯一的吗?

如何让 Firefox 在文件更改时自动刷新?

CSS设置宽度以填充剩余区域的百分比

有没有办法让字段集的宽度与它们中的控件一样宽?

Select 器.class.class和.class.class有什么区别?

React - 防止父子事件触发

bootstrap 关闭响应菜单点击