【问题标题】:Where to set font-family: body or html element?在哪里设置 font-family: body 或 html 元素?
【发布时间】:2017-03-21 11:23:06
【问题描述】:

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

html {
    font-family: sans-serif;
}

body {
    font-family: sans-serif;
}

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

【问题讨论】:

  • 我建议创建一个 css 类属性并将其应用到那里。使用<style> body{ font-family:'property' } </style>
  • font-family 是一个 CSS 属性,所以它既不属于 html 也不属于 body 标签。
  • 如果您使用rem 单位,请确保在html 元素上设置基本字体大小。 rem 单位基于根元素的字体大小,即html 元素。

标签: html css


【解决方案1】:

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

body {
   font-family: Arial !important;
}

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

您也可以使用* 选择器。

* {
    font-family: Arial !important;
}

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

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

【讨论】:

  • 您说将其设置在正文中,但您的示例将其设置为<html>
  • 为什么这是最佳实践?想扩展或添加来源?
  • 人们对通用选择器 (*) IMO 非常满意。这是一个低效的选择器,实际上选择了 Every。单身的。元素。 (级联的存在是为了避免这种事情。)用!important标记它是在罪恶上堆积。
【解决方案2】:

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

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

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

下一个问题:浏览器在哪里定义像font-family 这样的文本格式属性?我查看了Safari (WebKit)Mozilla FirefoxChrome 的用户代理样式表,并且还在没有覆盖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 Fonts Module Level 3 中的第一个代码示例是这样的:

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

另一个是here:

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

它解释了:

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

另一个指向body

最终成绩:

body:2
html:0.5

获胜者:body! :-D

【讨论】:

    【解决方案3】:

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

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

    这是一个演示。使用* selectorhtml and body

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 您对使用<body> 的解释毫无意义。 “它包含层次结构”甚至是什么意思? CSS-Tricks 文章值得一读。
      【解决方案5】:

      根据项目的不同,最好的地方是一个单独链接的样式页面,其中包含你所有的 CSS 代码。但从您的问题来看,您似乎想将其写入 HTML。

      如果您想在与 HTML 相同的文件中执行此操作,则内​​部样式表是第二个最佳选择,并将“样式”标签放在“头”标签中,并将 CSS 写入“样式标签”中.

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

      否则,您只需将其写入内联(在您尝试设置样式的元素的位置)。

      现在哪种方法最好取决于项目,但通常认为外部样式表是第一选择,因为它可以让其他人轻松了解哪些元素受哪些样式影响。如果它是一个没有太多 CSS 的小项目,那么“内部样式表是下一个最佳选择,这也是为了提高可读性并将您的 CSS 保持在一个位置。尽管可能,但实际上并不鼓励使用内联样式。

      【讨论】:

      • 感谢您的回答,我已经更新了我的问题,因为不清楚我在问什么。
      【解决方案6】:

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

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

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

      【讨论】:

        【解决方案7】:

        如果您尝试更改整个页面的字体系列,我将不得不同意 user7357089 和 nashcheez 的“最佳”方法是将其放置在 body 标记中。无论如何,所有可见的 HTML 都将包含在 body 标记中,没有必要将其添加到 HTML 中。

        【讨论】:

          【解决方案8】:

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

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

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

            • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
            【解决方案10】:

            要更改您网站的字体系列,您可以使用:

            *{
               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;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-08-11
              • 1970-01-01
              • 2011-06-01
              • 2014-04-02
              • 1970-01-01
              • 2011-03-12
              • 2016-10-12
              • 1970-01-01
              相关资源
              最近更新 更多