【问题标题】:What's the difference between flex-start and baseline?flex-start 和基线有什么区别?
【发布时间】:2016-04-08 23:51:31
【问题描述】:

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

以下代码 sn-p 为 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>

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    我想很快澄清一些事情。

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

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

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

    【讨论】:

    • 非常感谢您分享您的知识!
    • 我的荣幸。我的中间名也是 Ameer :)
    【解决方案2】:

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

    align-items: flex-start

    align-items: baseline

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

    baseline 值将沿其内容的基线对齐弹性项目。

    baseline

    大多数字母“坐”在其上,下行字母延伸到其下方。

    来源:Wikipedia.org

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

    但如果 flex 项目的内容大小不同,那么 baseline 会产生明显的差异。

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

    来自规范:

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

    baseline

    弹性项目参与基线对齐:行上所有参与的弹性项目都对齐,使得它们的基线对齐,并且其基线和其交叉起始边距边缘之间距离最大的项目与交叉起始边缘齐平放置线的开始边缘。

    .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

    【讨论】:

    • 这主要是一个不错的答案,或多或少地回答了这个问题。但是有一个主要缺陷:规范中提到的“基线”与排版无关。这是关于 flex 容器基线:drafts.csswg.org/css-flexbox-1/#flex-baselines。因此,如果内容是任何单个框中的多行文本,那么您在此处给出的示例将不起作用。看这个演示:jsbin.com/quyufix/edit?html,css,output
    • 我自己还没有完全理解。但是请看这个演示:jsbin.com/yoqupih/edit?html,css,output。它似乎是创建基线的第一行文本(或其他内联元素)。在该示例中,每个字母的第一个字母(因此,第一行)的大小不同,但“基线”始终位于该第一行下方,而与每个字母的文本大小无关。
    • 在您的第一个演示和第二个演示中,基线对齐似乎是每个框中的第一行文本。排版似乎很重要,但我同意你的观点,language in the spec 还远不清楚。 @LouisL。
    • 顺便说一句,这些年来我从your website 学到了很多东西。两年前,我还在my SO answer here 中引用了你。谢谢,继续努力! @LouisL。
    • 哈,很好,谢谢你的大喊!是的,你是对的,基线值部分是关于排版的,但我想说它更多的是关于 HTML 中的内联元素。这个演示有点证明:jsbin.com/yoqupih/edit?html,css,output。我已经为每个字符使用了 inline-block 元素,我什至在第二个字符中添加了顶部填充。所以基线仍然以同样的方式排列第一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2017-03-29
    • 2015-05-29
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多