6.5 盒子的生成

块级元素生成块级盒子,行内级元素生成行内级盒子,display: none的元素不生成盒子。文本可能生成匿名盒子。

(1)生成匿名的块盒子。

<body>
    <div>
        小步教程
        <div>xiaobuteach.com</div>
        小步教程2
    </div>
</body>

开发者工具查看“小步教程”文本盒子的display值为block。能够选中它并查看样式,说明它是一个盒子,一个匿名盒子。

img

外部div包含三个子元素:两处文本,一处div元素,两处文本没有标签直接标记。这不是标准树状结构,浏览器解析时为文本生成匿名盒子。示意解析结果如下。

<body>
    <div>
        <匿名div>小步教程</匿名div>
        <div>xiaobuteach.com</div>
        <匿名div>小步教程2</匿名div>
    </div>
</body>

(2)生成匿名的行内盒子。

<body>
    <div>
        小步教程
        <span>xiaobuteach.com</span>
        小步教程2
    </div>
</body>

开发者工具查看“小步教程”文本盒子的display值为inline。能够选中它并查看样式,说明它是一个盒子,一个匿名盒子。

img

外部div包含三个子元素:两处文本,一处span元素,两处文本没有标签直接标记。这不是标准树状结构,浏览器解析时为文本生成匿名盒子。示意解析结果如下。

<body>
    <div>
        <匿名span>小步教程</匿名span>
        <span>xiaobuteach.com</div>
        <匿名span>小步教程2</匿名span>
    </div>
</body>

(3)匿名盒子的基本概念

匿名盒子是为保证HTML代码的完整树状结构生成的盒子,无法直接设置它的样式,它继承祖先元素的样式,通常它们的编码不存在直接标签进行标记。::before、::after、 ::marker 等元素虽然也没有直接标签,但能够通过选择器直接设置样式,不属于匿名盒子。

(4)一个块容器(例如div)内部,要么全部是块级元素(例如div),要么全部是行内级元素(例如span) 。

代码示例如下

    <div>
        小步教程
        <span>xiaobuteach.com</span>
        小步教程2
        <div>小步教程3</div>
    </div>

浏览器示意解析结果如下

    <div>
        <匿名div>
	        <匿名span>小步教程</匿名span>
	        <span>xiaobuteach.com</span>
	        <匿名span>小步教程2</匿名span>
        </匿名div>
        <div>小步教程3</div>
    </div>