在哪里设置字体系列,正文或html元素?

Fra*_*ood 8 html css

在做了一些研究和谷歌搜索后,我找不到一个明确的答案,所以我想在这里问.

哪里最好添加font-family?到html或body元素?

编辑 我的道歉,有些人认为我的意思是内联,这不是我的意思.

让我们这样做,这是最好/首选的方式:或

html{
    font-family: sans-serif;
}
Run Code Online (Sandbox Code Playgroud)

要么

body{
    font-family: sans-serif;
}
Run Code Online (Sandbox Code Playgroud)

问候,

Kal*_*Kal 26

简短的回答是,您可以使用其中任何一个。由于每个显示的元素都是该元素的后代body,并且该body元素本身是该元素的子元素html,因此继承该属性的所有元素font-family都会很乐意从其中一个元素采用它。(如果特定元素未继承它,您始终可以font-family使用值覆盖其属性inherit。)

\n

但什么是最佳实践,为什么?这个问题有点难回答,但我会尝试一下。让我们从语义开始\xe2\x80\xa6

\n

元素代表整个文档(包括不可见的元数据),而元素代表html文档的内容。由于是样式化内容的属性,因此将其应用到 似乎是合乎逻辑的。这是一分。bodyfont-familybodybody

\n

下一个问题:浏览器在哪里定义文本格式属性,例如font-family?我查看了Safari (WebKit)Mozilla FirefoxChrome的用户代理样式表,还在没有覆盖 CSS 的页面上使用了 Web Inspector,但我在任何地方都找不到全局声明font-family。但这里有一些有趣的东西\xe2\x80\xa6 在 Safari 中,全局文本color属性是在html元素上定义的。因此,如果这可以作为参考,那么它表明 WebKit 浏览器确实在html元素上定义了全局字体属性。

\n

CSS 重置也可以在这里解决这个问题,例如 Bootstrap_reboot.scss文件:

\n
// 2. Change the default font family in all browsers.\nhtml {\n   font-family: sans-serif; // 2\n   \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n

不过,我们可以在body元素上重写它,这正是 Bootstrap 在几行之后所做的事情:

\n
body {\n   margin: 0; // 1\n   font-family: $font-family-base;\n   \xe2\x80\xa6\n}\n
Run Code Online (Sandbox Code Playgroud)\n

半点到html

\n

CSS 规范(据我所知)并没有规定font-family声明的位置(它适用于“所有元素”),但它确实给了我们一些提示。W3C 文档CSS Fonts Module Level 3中的第一个代码示例是这样的:

\n
body {\n   font-family: Helvetica;\n   font-weight: bold;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

另一篇在这里

\n
body {\n   font-family: "Gill Sans", sans-serif;\n   font-size: 12pt;\n   margin: 3em;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它解释说:

\n
\n

BODY 元素上的第一个声明将字体系列设置为“Gill Sans”。如果该字体不可用,用户代理(通常称为“浏览器”)将使用sans-serif字体系列,它是所有用户代理都知道的五个通用字体系列之一。BODY 的子元素将继承font-family属性的值。

\n
\n

另一点是body

\n

最终成绩:

\n

body: 2
\n html: 0.5

\n

获胜者:body!:-D

\n


nas*_*eez 5

最佳做法是font-familybody.

body {
   font-family: Arial !important;
}
Run Code Online (Sandbox Code Playgroud)

!important这里很有用,因此如果您使用任何其他框架,font-family则不会被覆盖。

您也可以使用*选择器。

* {
    font-family: Arial !important;
}
Run Code Online (Sandbox Code Playgroud)

*-selector指任何/所有的元素,但显然是在产业链的底部,当谈到覆盖更具体的选择。

请注意,即使其他选择器已用于设置文本(例如, the或 a ),该!important标志也会将字体样式呈现​​为*绝对的。bodyp

  • 关于为什么这是最佳实践的任何理由?小心扩展或添加源? (9认同)
  • 在我看来,人们对通用选择器 (*) 太满意了。这是一个低效的选择器,它实际上选择了Every。单身的。元素。(级联的存在就是为了避免这种事情。)用“!important”来标记它就是罪上加罪。 (2认同)

小智 5

选择*器将为您提供更好的覆盖范围。例如,form元素(如input)不会从htmlbody标签继承字体样式。但如果您设置它,*那么您将确保您的字体样式传递到所有 HTML 元素。

* {
  font-family: 'Open Sans', Helvetica, sans-serif;
}
Run Code Online (Sandbox Code Playgroud)

这是一个演示。使用* 选择器html 和 body


san*_*san 0

向标签添加样式的最佳方法<body>。因为它包含层次结构,所以它必须包含所有全局样式。

参考: https: //css-tricks.com/html-vs-body-in-css/