【问题标题】:What's the meaning of "propagated to the viewport" in the CSS spec?CSS规范中“传播到视口”的含义是什么?
【发布时间】:2026-01-08 15:20:02
【问题描述】:

CSS 规范中有一些章节提到“传播到视口”;例如:calculating the height

当“溢出”不计算为“可见”但已传播到视口时,本节也适用于正常流中的块级非替换元素。

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

【问题讨论】:

    标签: css specifications


    【解决方案1】:

    正如引用所述,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] 或 XHTML html 元素 [XHTML11] 的文档:如果根元素上 'background-image' 的计算值为 'none' 并且其 ' background-color' 是 'transparent',用户代理必须改为从该元素的第一个 HTML BODY 或 XHTML body 子元素传播背景属性的计算值。 BODY 元素的背景属性的使用值是它们的初始值,传播的值被视为在根元素上指定。建议 HTML 文档的作者为 BODY 元素而不是 HTML 元素指定画布背景。

    这种传播行为是出于历史原因 (<body background="..." bgcolor="...">) 以及使作者能够设置整个页面背景的样式而指定的,这通常不能仅通过 htmlbody 元素完成,除非先删除它们默认边距和forcing them to fill the page

    不知道这种行为的作者试图将这两个属性应用于bodyhtml 可能是surprisedresults,尤其是在comparing the behavior with other elements 时。另一方面,作者也利用这种行为创建了interesting workarounds for browser bugs dating back over 15 years

    此行为与继承不冲突,因为它的工作方向相反。继承将属性值从父元素“传播”到子元素;此行为将属性值从子框传播到父框(bodyhtmlhtml 分别到视口)。

    【讨论】:

      最近更新 更多