默认、用户和作者样式表有啥区别?

Posted

技术标签:

【中文标题】默认、用户和作者样式表有啥区别?【英文标题】:What is the difference between default, user and author style sheets?默认、用户和作者样式表有什么区别? 【发布时间】:2013-08-17 14:57:03 【问题描述】:

在CSS中,defaultuserauthor样式表有什么区别?

【问题讨论】:

相关帖子 - What is user agent stylesheet 【参考方案1】:

默认样式表由浏览器供应商提供。

用户样式表由浏览器的用户提供。

作者样式表由网页作者提供。

【讨论】:

感谢您的快速回复。你能举一个用户样式表的例子吗? 用户样式表看起来就像任何其他样式表,所以一个示例不会有那么有用。 我在我的浏览器中使用了这个用户样式:“on ***.com, a[href*="w3schools.com"] background-color: salmon 作为用户,我如何提供用户样式表?【参考方案2】:

以下是我们用于样式化 html 网页的各种样式表的详细说明:

    默认(又名用户代理/浏览器)样式表:首先,默认样式表也称为浏览器样式表或用户代理样式表。这是浏览器按默认对其呈现的每个网页应用的样式表。因此,如果作为网页的作者,您不应用任何样式,即使那样它也不是没有样式的。它仍然应用浏览器中安装的默认样式表中的样式细节。我们可以假设它必须包含所有标准 HTML 标签的一些样式,例如<span><p><h1> 等。This SO 帖子提供了有关各种浏览器默认样式表的详细信息。

查看以下 HTML 页面。我创建了一个非常基本的 HTML 表格,完全没有样式:

<html>
  <head>    
  </head>

<body>

 <table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>

</body>
</html>

但您仍然可以看到表格的标题以粗体显示。这来自浏览器的默认样式表。

    用户样式表:现在第二级是用户样式表。浏览器为您提供扩展浏览器默认样式表的选项。例如在 Internet Explorer 中,您可以转到 Tool > Internet Options > General Tab > Accessibility button > Accessibility Window > User style sheet section > “使用我的样式表格式化文档”复选框。

因此,对于同一个 html 标记,如果我在自己的样式表中提供不同的样式(在本例中为“D:\myuserstylesheet.css”),那么它将开始覆盖它。

myuserstylesheet.css 看起来像这样:

`td

    color: green;
`

现在,如果我在 Internet Explorer 浏览器设置中进行这些更改后加载包含简单表格的同一网页,则用户样式表中的样式开始覆盖浏览器样式表,如下所示:

Google Chrome 浏览器几年前就停止支持用户样式表。更多详情请见here。

    作者样式表:然后是作者样式表,这是您在网站中定义为网站的创建者/作者的内容。这有三种口味: In-line :在标签内部定义,例如&lt;div style="width:20px;height:20px;background-color:#ffcc00;"&gt;&lt;/div&gt; Internal/Embedded :在 html 页面的 &lt;head&gt; 标签内的 &lt;style&gt; 标签中定义的 CSS 样式。 外部:在单独的物理文件(例如 abc.css)中定义的 CSS 样式,使用 &lt;head&gt; 标签内的链接标签应用于 html 网页:&lt;link rel="stylesheet" type="text/css" href="abc.css"&gt;

推论 1:可以使用上述任何类型的样式表来设置 HTML 元素样式(例如字体、颜色)的值。让我们考虑一个td 标签来进行讨论。它的样式有一个名为color 的属性。所以这样的事情是可能的:

默认/浏览器样式表说:

td

    color: black;

用户样式表说:

td

    color: green;

作者样式表说

td

    color: blue;

这会导致冲突或冲突。浏览器会混淆是否以黑色、绿色或蓝色显示 td 元素。为了解决这个冲突,所有浏览器都遵循预定义的优先级/优先级顺序(从高到低),如下所示:

    作者样式表 用户样式表 用户代理(浏览器)样式表

因此,由于作者样式表具有最高优先级,td 将显示为蓝色。

对此有一个警告。对于!important 样式,此优先顺序正好相反,即

    用户代理(浏览器)样式表 用户样式表 作者样式表

现在让我们以同样的例子来理解它:

默认/浏览器样式表说:

td

    color: black !important;

用户样式表说:

td

    color: green !important;

作者样式表说

td

    color: blue !important;

在这种情况下,由于优先级顺序正好相反,所以td 标记将显示为黑色。

注意!important 规则样式的优先级总是高于普通样式。

推论 2

关于作者样式表还有一件事需要了解。作者样式表根据它们在网站源代码中的位置分为三种类型:

    内联:看看下面的元素:

&lt;td style="color:orange"&gt;&lt;/td&gt;

这表示这个特定的td 标签应该是橙色的。

    内部:head标签中的style标签表示此网页上的每个td标签都应显示为红色

<html>
  <head>  
  <style>
td 
  color: red;


</style>
  </head>

<body>

 <table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td> 
    <td>94</td>
  </tr>
</table>

</body>
</html>
    外部:它是一个单独的物理 CSS 文件,扩展名为 .css。它存在于您的网站源代码中,并由网站的任何 HTML 页面使用link 标签引用,如下所示:

//mystyle.css
td 
      color: yellow;
    
<html>
      <head>  
      <link rel="stylesheet" href="mystyle.css">
      </head>

    <body>

     <table>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th> 
        <th>Age</th>
      </tr>
      <tr>
        <td>Jill</td>
        <td>Smith</td> 
        <td>50</td>
      </tr>
      <tr>
        <td>Eve</td>
        <td>Jackson</td> 
        <td>94</td>
      </tr>
    </table>

    </body>
    </html>

所以这里外部样式表mystyle.css 已在网页中使用link 标记进行引用。样式表说网页上的每个td 标签都应该显示为黄色。

这也会导致冲突或冲突。浏览器会混淆是否将td 元素显示为橙色、红色或黄色。

为解决此冲突,所有浏览器都遵循基于冲突解决规则的预定义优先级/优先级顺序(从最高到最低)。每当不同类型的作者样式表之间存在相同特异性的冲突时,它们与 HTML 元素(文本顺序)的接近程度在决定优先级/优先级时很重要,如下所示:

    内嵌(最接近 HTML 标记。实际上它在 HTML 标记内部) 内部/嵌入(距离 HTML 标签相对较远) 外部(距离 HTML 标记最远,因为它实际位于 HTML 网页之外。)

注意:您可以在 CSS here 中阅读有关特异性计算的更多信息。

【讨论】:

答案中最好的。非常简洁,唯一没有留下任何问题的。各位,花点时间通读一遍。 哇,精彩的解释!非常感谢:) 我能找到的最佳解释。非常感谢! 非常全面的解释。非常感谢!【参考方案3】:

2.1 Spec 给出了很好的解释:

    作者:作者根据文档语言的约定为源文档指定样式表。例如,在 HTML 中,样式表可能包含在文档中或外部链接。 用户:用户可能能够为特定文档指定样式信息。例如,用户可以指定一个包含样式表的文件,或者用户代理可以提供一个接口来生成用户样式表(或表现得好像它确实如此)。 用户代理:符合标准的用户代理必须应用默认样式表(或表现得像他们那样)。用户代理的默认样式表应该以满足文档语言的一般呈现期望的方式呈现文档语言的元素(例如,对于可视浏览器,HTML 中的 EM 元素使用斜体字体呈现)。有关 HTML 文档的推荐默认样式表,请参阅 HTML 示例样式表。

【讨论】:

以上是关于默认、用户和作者样式表有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

html/css层叠

两个表并排和连接表有啥区别?

关联表和常规表有啥区别?

Netezza 中的表和外部表有啥区别?

导入表、导入地址表、导入名称表有啥区别?

Oracle中的临时表与全局临时表有啥区别?