【问题标题】:Inline- and block-level boxes inside the block-container box块容器盒内的内联和块级盒
【发布时间】:2014-02-04 10:59:02
【问题描述】:

在 sec 9.2.1 的 CSS 规范中说:

除了表格框(在后面的章节中介绍)和 替换元素,块级盒子也是块容器盒子。一种 块容器盒子要么只包含块级盒子,要么 建立一个内联格式化上下文,因此只包含 内联级框。 考虑标记:

<div id="d">
    <div>Anonymous text</div>
    <span>Some text</span>
    <span>Another some text</span>
    <div>Another anonymous text</div>
</div>

和样式:

div#d{
    width: 300px;
    height: 300px;
    background: aqua;
}

在我的情况下,div#d 包含块级和内联级框。但在秒。 9.2.1.1

如果是块容器框(例如为上面的 DIV 生成的) 里面有一个块级的盒子(比如上面的P),那么我们强制 它内部只有块级框。

问:为什么我们可以在块级元素(例如div)中同时放入内联和块级元素,它们将显示为内联和块级元素,但在规范中说块容器框要么只包含块级框或建立内联格式化上下文,因此仅包含内联级框。

我很困惑。你能打消我的疑虑吗?

【问题讨论】:

  • 你的问题到底是什么?
  • @SalmanA 我正在更新我的问题。
  • 据我了解:规范说,如果一个盒子包含内联和块元素的混合,则内联元素被包装在一个匿名块中以满足“仅块或仅内联”条款。

标签: html css


【解决方案1】:

规范接着说:

break 之前和之后的 line box 都包含在匿名 block box 中,block-level box 成为这些匿名 box 的兄弟

因此内联元素被包裹在“匿名块”中(由浏览器中的 CSS 引擎生成,并且对您的 DOM 检查器不可见),它们是块级的,因此容器的所有子级都是块级的,而不是块元素和内联元素的混合。

【讨论】:

  • 但是为什么这个匿名块不以新行开头? jsFiddle.
  • 这将取决于样式——也许 div 是浮动的?如果第一个 div 是浮动的,它将与 span 并排放置。跨度本身都包含在 1 个匿名块中(如果我正确阅读了规范),因此它们一起内联运行没有问题。
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多