CSS规范中的"propagated to the viewport"是什么意思?

5
有些CSS规范章节提到了“传播到视口”;例如:计算高度

当“overflow”未被计算为“visible”但已传播到视口时,此部分也适用于正常流中的块级非替换元素。

什么样的属性可以传播?它是否与子元素从其父元素继承属性的规则相矛盾?
1个回答

8
正如引用所述,overflow property可以从body传播到html,也可以从html传播到视口:

用户代理必须将设置在根元素上的 'overflow' 属性应用于视口。当根元素是HTML“HTML”元素或XHTML“html”元素,并且该元素具有HTML“BODY”元素或XHTML“body”元素作为子元素时,如果根元素上的值为“visible”,则用户代理必须将第一个此类子元素上的 'overflow' 属性应用于视口。当视口使用“visible”值时,必须将其解释为“auto”。传播值的元素必须具有“visible”的“overflow”的使用值。

另一个可以以这种方式传播的属性是background
由于没有元素对应画布,为了允许对画布进行样式设置,CSS将根元素的背景(在HTML中是元素)传播到画布上,如下所述。

3.11.1. 画布背景和根元素

根元素的背景成为画布的背景,其背景绘制区域扩展到覆盖整个画布。但是,任何图像都被大小和位置相对于根元素进行定位,就好像它们只为该元素绘制一样。(换句话说,背景定位区域与根元素确定。)根元素不会再次绘制此背景,即其背景的使用值为透明。

3.11.2. 画布背景和HTML body元素

对于根元素为HTML HTML元素[HTML401]或XHTML html元素[XHTML11]的文档:如果根元素上的“background-image”的计算值为“none”,并且其“background-color”为“transparent”,则用户代理必须从该元素的第一个HTML BODY或XHTML body子元素中传播背景属性的计算值。该BODY元素的使用值的背景属性为其初始值,并且传播值被视为在根元素上指定的值。建议HTML文档的作者为BODY元素指定画布背景,而不是HTML元素。

这种传播行为是出于历史原因指定的(<body background="..." bgcolor="...">),同时也使作者能够样式化整个页面背景,通常情况下无法仅通过htmlbody元素完成,除非首先删除它们的默认边距并强制填充页面

对于不了解这种行为的作者,他们尝试将这两个属性应用于bodyhtml可能会被结果 惊讶, 特别是当将此行为与其他元素进行比较时。另一方面,作者也利用这种行为来创建有趣的解决浏览器错误的方法,可以追溯到15年前

这种行为不会与继承发生冲突,因为它是相反的方向。继承将属性值从父元素传递到子元素;而这种行为将属性值从子框传递到父框(分别从bodyhtml,然后到视口)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接