【问题标题】:Equal height flex items in flex columns弹性列中的等高弹性项目
【发布时间】:2015-12-28 20:14:20
【问题描述】:

我正在尝试使列中的列表项在其列表中具有相同的高度。

这是我所拥有的:

<ol>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
</ol>

ol {
   min-height: 100%;
   display: flex;
   flex-direction: column;
}

ol li { 
   flex: 1;
}

我已尝试:我已尝试按照本教程进行操作:https://css-tricks.com/boxes-fill-height-dont-squish/ 无济于事。我认为问题与 必须设置 height: 100% 到每个父元素一直到 html 有关。可以吗?

我的列表嵌套很深,设置所有这些高度会破坏布局。我宁愿只使用流体高度。

我也尝试过:仅使用 div 而不是列表来完成此操作。尽管如此,还是没有运气。

有什么线索吗?

【问题讨论】:

  • 您是否逐字使用了 csstricks 网站上的代码?您需要一些供应商前缀才能使其在任何地方都能正常工作。抱歉,如果您没有将它们简洁地包括在内!

标签: html css flexbox


【解决方案1】:

由于您在弹性容器上使用百分比高度...

ol { min-height: 100%; }

...您还需要define a height for the parent and root elements

HTML(无变化)

<ol>
    <li>List item 1</li>
    <li>List item 2</li>
    <li>List item 3</li>
</ol>

CSS

html, body { height: 90%; } /* NEW; needed for child percentage heights to work; 
                              set at 90% just for demo purposes */
ol {
   min-height: 100%;
   display: flex;
   flex-direction: column;
}

ol li { 
   flex: 1;
}

演示:http://jsfiddle.net/kzL4305k/1/

我认为麻烦在于必须将height: 100% 设置为每个 单个父元素一直到 html。可以这样吗?

是的,没错。如果使用百分比高度,则需要为每个父元素指定高度,一直到根元素 (html)。我在这里解释了原因:

我的列表嵌套得很深,设置所有这些高度打破了 布局。我宁愿只使用流体高度。

如果不使用百分比,则无需设置父元素的高度。尝试在弹性容器上以像素为单位使用min-height,然后让flex-grow: 1 处理弹性项目的高度问题。

【讨论】:

  • 100vh怎么样?
  • @deltab, vh 绝对是一个选项,如果您希望元素的高度相对于视口。
  • 谢谢@Michael_B - 这是一个很好的分解和澄清。我选择在列表的父级上设置像素高度,因为对于我的项目,它会影响更少的事情并减少我的头痛。 :)
【解决方案2】:

只需添加以下css

ol {  
     display: -webkit-box; 
     display: -webkit-flex;
     display: -ms-flexbox;
     display: flex;
     -webkit-box-align: stretch;
     -webkit-align-items: stretch;
     -ms-flex-align: stretch;
     align-items: stretch;
     -webkit-flex-wrap: wrap;
     -ms-flex-wrap: wrap;
     flex-wrap: wrap;
}
ol li {
     background: gold;
     padding: 5px 5px;
     margin: 5px 5px;
     width: 25% 
}

【讨论】:

  • 感谢您的回答,您能解释一下背后的原因吗?
【解决方案3】:

这是将弹性项目设置为相等高度的最简单方法。

display: flex;
justify-content: center;
align-items: stretch;

【讨论】:

  • 请填写您的答案。另外:align-items: stretch 是默认值,justify-content: center 不应影响项目大小。请详细说明?
猜你喜欢
  • 2016-08-11
  • 2018-06-26
  • 2016-07-04
  • 2016-08-27
  • 2021-07-19
  • 2019-03-25
  • 2017-06-21
相关资源
最近更新 更多