【发布时间】:2026-01-08 15:20:02
【问题描述】:
CSS 规范中有一些章节提到“传播到视口”;例如:calculating the height。
当“溢出”不计算为“可见”但已传播到视口时,本节也适用于正常流中的块级非替换元素。
什么样的属性可以传播?它是否与子元素从其父元素继承属性的规则相矛盾?
【问题讨论】:
标签: css specifications
CSS 规范中有一些章节提到“传播到视口”;例如:calculating the height。
当“溢出”不计算为“可见”但已传播到视口时,本节也适用于正常流中的块级非替换元素。
什么样的属性可以传播?它是否与子元素从其父元素继承属性的规则相矛盾?
【问题讨论】:
标签: css specifications
正如引用所述,overflow property 能够从 body 传播到 html,并从 html 传播到视口:
UA 必须将在根元素上设置的“溢出”属性应用于视口。当根元素是 HTML "HTML" 元素或 XHTML "html" 元素,并且该元素具有 HTML "BODY" 元素或 XHTML "body" 元素作为子元素时,用户代理必须改为应用 'overflow' 属性如果根元素上的值为“可见”,则从第一个此类子元素到视口。用于视口时的“可见”值必须解释为“自动”。从中传播值的元素必须具有用于 'visible' 的 'overflow' 的使用值。
可以通过这种方式传播的另一个属性是background:
由于没有元素对应于画布,为了允许画布的样式,CSS 会传播根元素的背景(或者,对于 HTML,
元素),如下所述。
3.11.1。画布背景和根元素
根元素的背景成为画布的背景,其背景绘制区域延伸到整个画布。但是,任何图像的大小和位置都相对于根元素,就好像它们是为该元素单独绘制的一样。 (也就是说,背景定位区域被确定为根元素。)根元素不再绘制这个背景,即其背景的使用值是透明的。
3.11.2。画布背景和 HTML 元素
对于根元素是 HTML
HTML元素 [HTML401] 或 XHTMLhtml元素 [XHTML11] 的文档:如果根元素上 'background-image' 的计算值为 'none' 并且其 ' background-color' 是 'transparent',用户代理必须改为从该元素的第一个 HTMLBODY或 XHTMLbody子元素传播背景属性的计算值。BODY元素的背景属性的使用值是它们的初始值,传播的值被视为在根元素上指定。建议 HTML 文档的作者为BODY元素而不是HTML元素指定画布背景。
这种传播行为是出于历史原因 (<body background="..." bgcolor="...">) 以及使作者能够设置整个页面背景的样式而指定的,这通常不能仅通过 html 或 body 元素完成,除非先删除它们默认边距和forcing them to fill the page。
不知道这种行为的作者试图将这两个属性应用于body 和html 可能是surprised 的results,尤其是在comparing the behavior with other elements 时。另一方面,作者也利用这种行为创建了interesting workarounds for browser bugs dating back over 15 years。
此行为与继承不冲突,因为它的工作方向相反。继承将属性值从父元素“传播”到子元素;此行为将属性值从子框传播到父框(body 到 html 和 html 分别到视口)。
【讨论】: