flex-start和baseline之间有什么区别?

时间:2016-01-05 08:09:37

标签: html css html5 css3 flexbox

使用flex align- *属性时,flex-startbaseline之间有什么区别?

以下代码段为align-self: flex-startalign-self: baseline提供相同的输出。

align-self: flex-startalign-self: baseline在哪些情况下会有不同的行为?

.flex-container {
  color: white;
  display: -webkit-flex;
  display: flex;
  width: 350px;
  height: 200px;
  background-color: yellow;
}
.flex-item {
  background-color: green;
  width: 50px;
  min-height: 100px;
  margin: 10px;
}
.item1 {
  -webkit-align-self: flex-start;
  align-self: flex-start;
}
.item2 {
  -webkit-align-self: flex-end;
  align-self: flex-end;
}
.item3 {
  -webkit-align-self: center;
  align-self: center;
}
.item4 {
  -webkit-align-self: baseline;
  align-self: baseline;
}
.item5 {
  -webkit-align-self: stretch;
  align-self: stretch;
}
<div class="flex-container">
  <div class="flex-item item1">flex-start</div>
  <div class="flex-item item4">baseline</div>
  <div class="flex-item item2">flex-end</div>
  <div class="flex-item item3">center</div>
  <div class="flex-item item5">stretch</div>
</div>

2 个答案:

答案 0 :(得分:58)

请参阅以下两张图片。除align-items规则外,两者的代码相同。

align-items: flex-start

enter image description here

align-items: baseline

enter image description here

使用align-itemsalign-self时,flex-start值会在弹性容器的cross-axis的起始边缘对齐弹性项目。

baseline值会将Flex项目与其内容的基线对齐。

  

baseline

     

大多数字母“坐”的线和下方延伸的线。

     

enter image description here

     

来源:Wikipedia.org

在许多情况下,当项目中的字体大小相同(如问题中)或内容相同时,flex-startbaseline将无法区分。

但如果内容大小因弹性项目而异,那么baseline会产生明显的差异。

就基线对齐的位置而言,这取决于行中最高的项目。

来自规范:

  

8.3. Cross-axis Alignment: the align-items and align-self properties

     

baseline

     

Flex项目参与基线对齐:线上所有参与的弹性项目都对齐,使其基线对齐,并且其基线与其交叉开始边缘边缘之间距离最大的项目与十字架齐平开始边缘。

.flex-container {
  color: white;
  display: flex;
  height: 300px;
  background-color: yellow;
  justify-content: space-between;
  align-items: baseline;
}
.flex-item {
  background-color: green;
  width: 110px;
  min-height: 100px;
  margin: 10px;
  box-sizing: border-box;
  padding: 5px;
  text-align: center;
}
.item1 {  font-size: 2em;  }
.item2 {  font-size: 7em;  }
.item3 {  font-size: .5em; }
.item4 {  font-size: 3em;  }
.item5 {  font-size: 10em; }

/*
.item1 {  align-self: flex-start; }
.item2 {  align-self: flex-end; }
.item3 {  align-self: center; }
.item4 {  align-self: baseline; }
.item5 {  align-self: stretch; }
*/

#dashed-line {
  border: 1px dashed red;
  position: absolute;
  width: 100%;
  top: 170px;
}
<div class="flex-container">
  <div class="flex-item item1">A</div>
  <div class="flex-item item2">B</div>
  <div class="flex-item item3">C</div>
  <div class="flex-item item4">D</div>
  <div class="flex-item item5">E</div>
</div>

<div id="dashed-line"></div>

jsFiddle version

答案 1 :(得分:2)

baseline

baseline

我想很快澄清一下。

就基线对齐发生的位置而言,由 该行中最高的项目。

不确定在这里我是否完全同意并表示尊重。如您所见,基线会导致这些项目坚持到具有最大文本大小(字体大小)的项目,而不是 最大的项目。实际上,在这种情况下,具有最大文本的项目恰好是集合中较小的元素之一。

在您的示例中,E是最大的元素,而E也具有最大的字体大小。我希望这可以帮助其他人真正磨练一些非常脆的设计。 干杯!