在哪里设置字体系列:body或html元素



在哪里最好声明font-familyCSS属性?在htmlbody元素上?

html {
font-family: sans-serif;
}

body {
font-family: sans-serif;
}

我在网上搜索,但我找不到明确的答案。

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

但是什么是最佳实践,为什么?这有点难以回答,但我会试一试。让我们从语义开始...

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

下一个问题:浏览器在哪里定义文本格式属性,如font-family?我查看了Safari(WebKit),Mozilla Firefox和Chrome的用户代理样式表,并在没有覆盖CSS的页面上使用了Web Inspector,但是我在任何地方都找不到全局font-family声明。但这里有一些有趣的事情...在 Safari 中,全局文本color属性是在html元素上定义的。因此,如果这有什么可取之处,它建议 WebKit 浏览器确实在html元素上定义了全局字体属性。

这里有CSS重置也可以解决这个问题,比如Bootstrap的_reboot.scss文件:

// 2. Change the default font family in all browsers.
html {
font-family: sans-serif; // 2
…
}

不过,我们可以在body元素上覆盖它,而这正是 Bootstrap 稍后几行所做的:

body {
margin: 0; // 1
font-family: $font-family-base;
…
}

半分html

CSS规范(据我所知)并没有规定在哪里声明font-family(它适用于"所有元素"),但它确实给了我们一些提示。W3C 文档 CSS 字体模块级别 3 中的第一个代码示例如下:

body {
font-family: Helvetica;
font-weight: bold;
}

另一个在这里:

body {
font-family: "Gill Sans", sans-serif;
font-size: 12pt;
margin: 3em;
}

它解释说:

BODY 元素上的第一个声明将字体系列设置为 "Gill Sans"。如果该字体不可用,则用户代理(通常称为"浏览器")将使用无衬线字体系列,这是所有用户代理都知道的五个通用字体系列之一。BODY 的子元素将继承字体系列属性的值。

另一点要body.

最终得分:

body: 2html: 0.5

获胜者:body! :-D

最佳做法是在body中设置font-family

body {
font-family: Arial !important;
}

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

您也可以使用*选择器。

* {
font-family: Arial !important;
}

*-选择器意味着任何/所有元素,但在覆盖更具体的选择器时,显然将位于属性链的底部。

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

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

* {
font-family: 'Open Sans', Helvetica, sans-serif;
}

这是一个演示。使用 * 选择器与 html 和正文。

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

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

根据项目的不同,最好的位置是包含所有 css 代码的单独链接样式页面。但是从你的问题听起来好像你想把它写到你的HTML中。

如果你想在与HTML相同的文件中执行此操作,那么内部样式表是第二好的选择,并将"样式"标签放在"head"标签中,并在"样式标签"中编写CSS。

<head>
<style>
<!–– Insert CSS Code Here -->
</style>
</head>

否则,您只需内联编写它(在您尝试设置样式的元素点处)。

现在哪种方法最好取决于项目,但通常认为外部样式表是第一个选项,因为它使其他人可以轻松跟踪哪些元素受哪种样式的影响。如果它是一个没有太多CSS的小项目,那么"内部样式表是下一个最佳选择,同样是为了可读性并将CSS保存在一个地方。内联样式虽然可能,但并不真正鼓励。

我假设您将在网站上有一个字体系列,最好的方法是使用

*选择器中,这个选择所有元素,以便:

*{
font-family:"your-font-family";
}

如果您尝试更改整个页面的字体系列,我必须同意user7357089和nashcheez的观点,即"最佳"方法是将其放在正文标签中。无论如何,所有可见的 HTML 都将包含在 body 标签中,将其添加到 HTML 中是不必要的。

正如其他人所说,在body上指定font-family可能是有意义的。但是,由于将其应用于html元素并没有太多缺点,因此我认为值得一提的是:root伪类选择器,它选择页面的根(大多数情况下的html元素),在这种情况下可能更方便。

通常,:root选择器用于设置 CSS 自定义属性(变量)和字体大小,但我想说对其应用font-family是合理的。

:root {
/* ...custom properties, font-size, etc... */
font-family: sans-serif;
}

我知道大多数人在 body 元素上设置字体系列。但是由于没有对错(所有元素都是 html 和 body 元素的子元素),请选择一个并坚持下去。这适用于您所做的所有编程选择。这使得调试工作变得更加容易。

对于更改您网站的字体系列,您可以使用以下内容:

*{
font-family:"your-font-family";
}

或这个:

html, body, div, span, applet, object, iframe, table, caption, tbody, tfoot, thead, tr, th, td,
del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var,
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code,
dl, dt, dd, ol, ul, li, fieldset, form, label, legend {
font-family: iransans !important;
}

最新更新