我想了解当 CSS 为的元素是 CSS 为display:block
的元素的 DOM 子元素时会发生什么display:inline
(因此块元素是内联元素的子元素)。
CSS 2.1 规范的匿名块框部分描述了这种情况:示例包括以下规则...
body { display: inline }
p { display: block }
...并且随附的文字说...
BODY 元素包含一个匿名文本块 (C1),后跟一个块级元素,然后是另一个匿名文本块 (C2)。生成的盒子将是 BODY 周围的匿名块盒子,包含 C1 周围的匿名块盒子、P 块盒子和 C2 周围的另一个匿名块盒子。
如果您有一个display:inline
父元素,并且如果该父元素有一个子元素,那么该子元素display:block
的存在似乎使父元素几乎表现得像display:block
,并忽略它被定义为的事实display:inline
(因为父元素现在只包含匿名和非匿名块子,即它不再包含任何内联子)?
我的问题是,在这种情况下(有孩子的地方),那么定义父母而不是display:block
之间有什么区别?display:inline
display:block
编辑:我更感兴趣的是理解 CSS 2.1 标准,而不是各种浏览器实现在实践中的行为方式和行为方式。
第二次编辑:
规范中指出了一个差异。在以下文档中,第二个“块”段落的边框围绕整个段落和页面的整个宽度;而第一个'内联段落的边框在段落内的每一行(即使有几行)周围,并且不超过每行的确切宽度(每行短于页面宽度)。
<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(在行首打开)绘制。
“边框样式”属性是唯一可见差异的属性类型吗?