html - Flex 元素不需要是 Flex 容器内的显式元素吗?

标签 html css flexbox vertical-alignment

<!-- HTML -->
  <body>
    <div class="header">
      My awesome website
    </div>
  </body>

/* CSS */
.header {
  height: 72px;
  background: darkmagenta;
  color: white;
  font-size: 32px; 
  font-weight: 900;
  padding-left: 16px;
  display: flex;
  align-items: center;
}

我正在尝试使用 Flexbox 模型在 div 内垂直对齐文本“我很棒的网站”。

我对flexbox的理解是,flex容器和flex元素需要分别是父元素和直接子元素。设置 display: flexheader div 转换为 Flex 容器,设置 align-items: center 将使 Flex 元素居中。

但是,我注意到“My Awesome website”不需要是 EXPLICIT 子元素,Flexbox 就可以将其视为 Flex 元素并向其应用 Flex 属性。

例如,我认为代码需要如下所示才能应用 Flex 属性:

<!-- HTML -->
  <body>
    <div class="header">
      <div>
        My awesome website
      </div>
    </div>
  </body>

Flex 容器和 Flex 元素并不总是需要是显式父元素和直接子元素吗?

最佳答案

来自the Specification :

Each in-flow child of a flex container becomes a flex item, and each contiguous sequence of child text runs is wrapped in an anonymous block container flex item.

浏览器将为文本创建一个“匿名 block 容器”,这个不可见 block 将成为 flex 元素。

但我强烈建议您手动将文本放入容器中,因为您永远不应该将文本容器设为 Flexbox 容器。

这是一个错误结果的示例:

.header {
  height: 72px;
  background: darkmagenta;
  color: white;
  font-size: 32px;
  padding-left: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 200px;
}
<div class="header">
    My   <strong>awesome</strong>   website
</div>

<div class="header">
    <div>My   <strong>awesome</strong>   website</div>
</div>

我写了一篇小文章来解释这个小怪癖:https://dev.to/afif/never-make-your-text-container-a-flexbox-container-m9p

关于html - Flex 元素不需要是 Flex 容器内的显式元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76665208/

相关文章:

css - 是什么让 StackOverflow 中的投票按钮位于不同的行上?

css - 为什么 justify-content : space-evenly not valid in Atom?

html - 如何将 "scoreBox"内的元素水平居中?

ios - iPad 应用程序中的 HTML5/CSS3(无 Javascript)

javascript - 内部 JS Angular Controller 没有被调用

html - Div 在父溢出隐藏内并排?

css - 我可以让 SVG 的 CSS Stroke 属性从 SVG 标记继承颜色吗?

javascript - 如何使用 jquery 和 css3 在移动设备上实现 *SMOOTH* 淡入淡出动画?

html - 响应问题 : Trying to center the main navigation links

CSS:响应式布局不像它(数学上)应该表现的那样