我想使用 flexbox 垂直对齐 <li>
中的一些内容,但没有取得很大的成功。
我在网上查过,许多教程实际上使用了一个包装 div,它从父级的 flex 设置中获取 align-items:center
,但我想知道是否可以删除这个附加元素?
我选择在这种情况下使用 flexbox,因为列表项高度将是动态的 %
。
* {
padding: 0;
margin: 0;
}
html,
body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
align-self: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
原文由 styler 发布,翻译遵循 CC BY-SA 4.0 许可协议
而不是使用
align-self: center
使用align-items: center
。无需更改
flex-direction
或使用text-align
。这是您的代码,只需进行一次调整即可使其全部正常工作:
align-self
属性适用于 _弹性项目_。 Except yourli
is not a flex item because its parent – theul
– does not havedisplay: flex
ordisplay: inline-flex
applied.因此,
ul
不是弹性容器,li
不是弹性项目,align-self
没有效果。align-items
属性类似于align-self
,除了它适用于 _弹性容器_。由于
li
是一个弹性容器,align-items
可用于垂直居中子元素。代码笔演示
从技术上讲,这里是
align-items
和align-self
的工作原理……align-items
属性(在容器上)设置默认值align-self
(在项目上)。因此,align-items: center
意味着所有弹性项目将被设置为align-self: center
。但是您可以通过调整单个项目的
align-self
来覆盖此默认值。例如,您可能需要等高列,因此容器设置为
align-items: stretch
。但是,必须将一项固定到顶部,因此将其设置为align-self: flex-start
。例子
文本如何成为弹性项目?
有些人可能想知道一段文字如何……
是
li
的子元素。原因是未被行内级元素显式包装的文本通过算法被行内框包装。这使它成为 匿名内联元素 和父元素的子元素。
从 CSS 规范:
flexbox 规范提供了类似的行为。
因此,
li
中的文本是一个弹性项目。