【发布时间】:2015-04-18 06:44:54
【问题描述】:
我想了解当 CSS 为 display:block 的元素是 CSS 为 display:inline 的元素的 DOM 子元素时会发生什么(因此块元素是内联元素的子元素)。
CSS 2.1 规范的Anonymous block boxes 部分描述了这种情况:示例包括以下规则...
body { display: inline }
p { display: block }
...并且随附的文字说...
BODY 元素包含一个块 (C1) 匿名文本后跟一个 块级元素后跟 另一块匿名文本(C2)。 结果框将是 身体周围的匿名方块, 包含一个匿名块框 围绕 C1、P 块框和 C2 周围的另一个匿名方块。
如果你有一个display:inline 父元素,并且如果这个父元素有一个子元素是display:block,那么这个子元素的存在似乎使父元素几乎表现得像display:block , 并忽略它被定义为 display:inline 的事实(因为父级现在只包含匿名和非匿名块子级,即它不再包含任何内联子级)?
我的问题是,在这种情况下(有一个 display:block 孩子),那么定义父级 display:inline 而不是 display:block 之间有什么区别?
编辑:我更感兴趣的是理解 CSS 2.1 标准,而不是各种浏览器实现在实践中的行为方式和行为方式。
第二次编辑:
规范中有一个区别。在以下文档中,第二个“块”段落的边框围绕整个段落和页面的整个宽度;而第一个 'inline 段落的边框在段落内的每一行(即使有几行)周围,并且不超过每行的确切宽度(每行短于页面宽度)。
<html>
<head>
<style type="text/css">
p.one
{
border-style:solid;
border-width:1px;
display: inline;
}
p.two
{
border-style:solid;
border-width:1px;
}
</style>
</head>
<body>
<p class="one">Some text. <b>Note:</b> The "border-width"
property does not work if it is used alone. Use the
"border-style" property to set the borders first.</p>
<p class="two">Some text.</p>
</body>
</html>
如果我添加以下样式规则...
b
{
display: block;
}
...然后第一个内联段落中的“注意:”变成一个块,它分割段落(根据规范,段落的第一部分和最后一部分现在位于匿名块中)。但是,段落的第一部分和最后一部分的边框仍然是“内联”样式的边框:因此,与最初声明 p.one 的情况仍然不一样 display:block。
规范中有一段引述,它说,
在元素上设置的属性会导致 要生成的匿名块框 仍然适用于盒子和内容 那个元素。例如,如果一个 BODY 上已经设置了边框 上例中的元素, 边框将围绕 C1 绘制(打开 在行尾)和 C2(打开 在行首)。
“边框样式”属性是唯一可见差异的属性类型吗?
【问题讨论】:
-
re:第二次编辑:这是我在您编辑前 36 分钟写的。嗯...
-
相关(不太详细的问题):stackoverflow.com/questions/746531/…