使用align-items: center代替align-self: center。
不需要改变弯曲方向或使用文本对齐。
下面是你的代码,只做了一个调整,就能让它全部工作:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
align-self属性适用于伸缩项。除非你的li不是一个伸缩项,因为它的父元素ul没有应用display: flex或display: inline-flex。
因此,ul不是一个伸缩容器,li不是一个伸缩项,align-self没有任何作用。
align-items属性类似于align-self,只不过它适用于伸缩容器。
因为li是一个伸缩容器,align-items可以用来垂直居中子元素。
* {
填充:0;
保证金:0;
}
Html, body {
高度:100%;
}
ul {
高度:100%;
}
李{
显示:flex;
justify-content:中心;
/* align-self:居中;* /
对齐项目:中心;
背景:银色;
宽度:100%;
高度:20%;
}
< ul >
<li>这是文本</li>
< / ul >
codepen演示
从技术上讲,这是align-items和align-self的工作方式…
align-items属性(在容器上)设置align-self(在项目上)的默认值。因此,align-items: center意味着所有的伸缩项目都将被设置为align-self: center。
但是您可以通过调整单个项上的align-self来覆盖这个默认值。
例如,您可能希望等高列,因此容器设置为align-items: stretch。但是,有一项必须固定在顶部,因此它被设置为align-self: flex-start。
例子
文本如何成为伸缩项?
有些人可能会想,一连串的文字是如何…
<li>This is the text</li>
是li的子元素。
原因是,没有被内联级元素显式包装的文本在算法上由内联框包装。这使得它成为一个匿名内联元素和父元素的子元素。
来自CSS规范:
9.2.2.1匿名内联
盒子
直接包含在块容器元素中的任何文本
必须作为匿名内联元素处理。
flexbox规范提供了类似的行为。
4. Flex项目
伸缩容器的每个流中的子元素都成为伸缩项,并且每个子元素
直接包含在伸缩件内的连续文本运行
容器包装在匿名伸缩项中。
因此,li中的文本是一个伸缩项。