gpt4 book ai didi

html - 应该在 html 元素还是 body 元素上设置全局 css 样式?

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:04 24 4
gpt4 key购买 nike

有时我看到人们将全局 css 样式应用于 html,有时我看到他们将它们应用于 body,同时使用原始 css 和 javascript。

两者有什么区别吗?制作全局css样式的标准是什么?在它们之间进行选择时有什么我应该知道的吗?

最佳答案

我假设这里的“全局页面样式”是指字体、颜色和背景等内容。

就我个人而言,我主要将全局页面样式应用到 body 和简单的元素选择器(ph1、h2、h3.. .输入img 等)。这些元素与向用户呈现 HTML 页面的内容更密切相关。

我的理由很简单:表示属性 bgcolorbackgroundtexttopmarginleftmargin 和其他元素被赋予了 body 元素,而不是 html 元素。这些属性现在转换为 their respective CSS rules with extremely low precedence in the cascade :

The UA may choose to honor presentational attributes in an HTML source document. If so, these attributes are translated to the corresponding CSS rules with specificity equal to 0, and are treated as if they were inserted at the start of the author style sheet.

我所知道的大多数(如果不是全部)实现都会根据它们的 HTML 等效项将它们转换为 body 上的 CSS 规则。其他如linkalinkvlink会变成a:linka:activea:visited 规则。

当然,应该注意的是,CSS 本身本身并没有任何语义,因为它本身就是一种样式语言,完全独立于 HTML 的内容结构文档。虽然introduction to CSS2.1涵盖了 HTML 文档样式的基础知识,请注意该部分称自己为非规范性(或信息性);这意味着它没有为 CSS 实现者设置任何必须遵循的硬性规定。相反,它只是为读者提供信息。

也就是说,某些样式可以应用于 html 以修改视口(viewport)​​行为。例如,要隐藏页面滚动条,请使用:

html {
overflow: hidden;
}

您还可以将规则应用于 htmlbody 以获得有趣的效果;有关详细信息和示例,请参阅以下问题:

请注意,html 不是视口(viewport);视口(viewport)建立了一个初始包含 block ,html 位于其中。初始包含 block 不能作为 CSS 的目标,因为在 HTML 中,根元素是 html

另请注意,从技术上讲,将属性应用于默认继承的 htmlbody 之间没有区别,例如 font-familycolor

最后但并非最不重要的一点,这是一个优秀的 article详细说明了 htmlbody 在 CSS 方面的区别。总结(引自其第一部分):

  • The html and body elements are distinct block-level entities, in a parent/child relationship.
  • The html element's height and width are controlled by the browser window.
  • It is the html element which has (by default) overflow:auto, causing scrollbars to appear when needed.
  • The body element is (by default) position:static, which means that positioned children of it are positioned relative to the html element's coordinate system.
  • In almost all modern browsers, the built-in offset from the edge of the page is applied through a margin on the body element, not padding on the html element.

作为根元素,html 与浏览器视口(viewport)的关联比 body 更紧密(这就是为什么它说 htmloverflow: auto 用于滚动条)。但是请注意,滚动条不一定由 html 元素本身生成。默认情况下,生成这些滚动条的是视口(viewport)overflow 的值只是在 bodyhtml 和视口(viewport)之间传输(或传播),具体取决于您设置的值。所有这些的细节都包含在 CSS2.1 规范中,says :

UAs must apply the 'overflow' property set on the root element to the viewport. When the root element is an HTML "HTML" element or an XHTML "html" element, and that element has an HTML "BODY" element or an XHTML "body" element as a child, user agents must instead apply the 'overflow' property from the first such child element to the viewport, if the value on the root element is 'visible'. The 'visible' value when used for the viewport must be interpreted as 'auto'. The element from which the value is propagated must have a used value for 'overflow' of 'visible'.

最后一个要点可能源于上述 body 元素的 topmarginleftmargin 属性。

关于html - 应该在 html 元素还是 body 元素上设置全局 css 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6740393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com