首页 > 编程笔记
HTML引用CSS的4种方法
本节主要介绍如何在 HTML 中使用 CSS,包括行内样式、内嵌式、链接式和导入样式等,最后探讨各种方式的优先级问题。
例如以下代码:
图 1 行内样式
可以看到 3 个 <p> 标记中都使用了 style 属性,并且设置了不同的 CSS 样式,各个样式之间互不影响,分别显示自己的样式效果。
第 1 个 <p> 标记设置了文字颜色为红色(color:#FF0000;),字号大小为 20px(font-size:20px;),并有下画线(text-decoration:underline;)。第 2 个 <p> 标记设置了文字颜色为黑色,字体为斜体。最后一个 <p> 标记设置文字颜色为紫色,字号为 25px,字体为粗体。
行内样式是最简单的 CSS 使用方法之一,但由于需要为每一个标记设置 style 属性,后期维护成本很高,而且网页容易过“胖”,因此不推荐使用。
例如下面这段代码:
图 2 内嵌式
但如果是一个网站,拥有很多页面,对于不同页面上的 <p> 标记都要采用同样的风格时,使用内嵌式的方法就比较麻烦,维护成本也高,因此内嵌式仅适用于对特殊的页面设置单独的样式风格。
同一个 CSS 文件可以链接到多个 HTML 文件中,甚至可以链接到整个网站的所有页面中,使网站整体风格统一、协调,并且后期维护的工作量也将大大减少。
下面来看一个链接式的实例。
1) 创建 HTML 文件,代码如下。
可以看到,所有的 CSS 代码从 HTML 文件中分离了出来,html 文件中的 <head> 标记之间加上了 <link href="03-10.css" type="text/css" rel="stylesheet"> 语句,将 CSS 文件链接到页面中,对其中的标记进行了样式控制,效果如下图所示。
链接式的最大优势在于 CSS 代码与 HTML 代码完全分离,并且同一个 CSS 文件可以被不同的 HTML 链接使用。因此在设计整个网站时,可以将所有页面都链接到同一个 CSS 文件,使用相同的样式风格。如果整个网站需要进行样式上的修改,只需要修改这一个 CSS 文件即可。
在 HTML 文件中导入样式表,常用的有以下几种 @import 语句,可以选择任意一种放在 <style> 标记之间。
图 4 导入样式
导入样式的最大用处在于可以让一个 HTML 文件导入很多样式表。
下面使用两个 @import 语句将两个 css 同时导入 HTML 文件中,具体代码如下:
如果在各种方法中设置的属性不一样,例如内嵌式设置字体为宋体,行内样式设置颜色为红色,那么显示结果会让二者同时生效,即显示宋体红色字。但当各种方法同时设置一个属性时,例如都设置字体的颜色,情况就会比较复杂。
下面举例说明:
1) 先创建两个 CSS 文件,其中第 1 个命名为“red.css”,其内容如下。
效果如下图所示。
图 5 文字显示为灰色
可以看到,结果是灰色,即以行内样式为准。接下来将行内样式代码删除,再次在浏览器中观察,可以看到结果是蓝色,即以内嵌式为准。接下来把内嵌式代码删除,仅保留导入命令,这时在浏览器中将看到红色的文字。
综上所述,行内样式、内嵌式和导入样式这 3 种方式的优先级关系是:
1) 第一种情况:
2) 第二种情况:
结合前面的结论,如果我们把导入样式和链接式统称为“外部样式”,那么优先级规则应该写为:
这个规则已经比较完善了,然而还没有结束。现在将 <head> 标记中的代码改为如下形式。
1、行内样式
行内样式是所有样式中最直接的一种,它直接对 HTML 标记使用 style 属性,然后将 CSS 代码写在其中。例如以下代码:
<html> <head> <title>页面标题</title> </head> <body> <p style="color:#FF0000; font-size:20px; text-decoration:underline;">正文内容1</p> <p style="color:#000000; font-style:italic;">正文内容2</p> <p style="color:#FF00FF; font-size:25px; font-weight:bold;">正文内容3</p> </body> </html>效果如下图所示:
图 1 行内样式
可以看到 3 个 <p> 标记中都使用了 style 属性,并且设置了不同的 CSS 样式,各个样式之间互不影响,分别显示自己的样式效果。
第 1 个 <p> 标记设置了文字颜色为红色(color:#FF0000;),字号大小为 20px(font-size:20px;),并有下画线(text-decoration:underline;)。第 2 个 <p> 标记设置了文字颜色为黑色,字体为斜体。最后一个 <p> 标记设置文字颜色为紫色,字号为 25px,字体为粗体。
行内样式是最简单的 CSS 使用方法之一,但由于需要为每一个标记设置 style 属性,后期维护成本很高,而且网页容易过“胖”,因此不推荐使用。
2、内嵌式
内嵌式就是将 CSS 写在 <head> 标记之间,并且用 <style> 标记进行声明。例如下面这段代码:
<html> <head> <title>页面标题</title> <style type="text/css"> p { color:#0000FF; text-decoration:underline; font-weight:bold; font-size:25px; } </style> </head> <body> <p>这是第1行正文内容……</p> <p>这是第2行正文内容……</p> <p>这是第3行正文内容……</p> </body> </html>可以看到,所有 CSS 的代码部分被集中在了同一个区域,方便后期维护,效果如下图所示。
图 2 内嵌式
但如果是一个网站,拥有很多页面,对于不同页面上的 <p> 标记都要采用同样的风格时,使用内嵌式的方法就比较麻烦,维护成本也高,因此内嵌式仅适用于对特殊的页面设置单独的样式风格。
3、链接式
链接式是使用频率最高、最实用的方法。它将 HTML 本身与 CSS 样式风格分离为两个或者多个文件,实现了页面框架 HTML 代码与美工 CSS 代码的完全分离,这使得前期制作和后期维护都十分方便,程序开发人员与设计师也可以很好地分工合作。同一个 CSS 文件可以链接到多个 HTML 文件中,甚至可以链接到整个网站的所有页面中,使网站整体风格统一、协调,并且后期维护的工作量也将大大减少。
下面来看一个链接式的实例。
1) 创建 HTML 文件,代码如下。
<html> <head> <title>页面标题</title> <link href="03-10.css" type="text/css" rel="stylesheet"> </head> <body> <h2>CSS标题</h2> <p>这是正文内容……</p> <h2>CSS标题</h2> <p>这是正文内容……</p> </body> </html>创建 css 文件,内容如下:
h2{ color:#0000FF; } p{ color:#FF0000; text-decoration:underline; font-weight:bold; font-size:15px; }保存文件时要确保两个文件在同一个文件夹中,否则 href 属性中需要带有正确的文件路径。
可以看到,所有的 CSS 代码从 HTML 文件中分离了出来,html 文件中的 <head> 标记之间加上了 <link href="03-10.css" type="text/css" rel="stylesheet"> 语句,将 CSS 文件链接到页面中,对其中的标记进行了样式控制,效果如下图所示。
链接式的最大优势在于 CSS 代码与 HTML 代码完全分离,并且同一个 CSS 文件可以被不同的 HTML 链接使用。因此在设计整个网站时,可以将所有页面都链接到同一个 CSS 文件,使用相同的样式风格。如果整个网站需要进行样式上的修改,只需要修改这一个 CSS 文件即可。
4、导入样式
导入样式与链接式的功能基本相同,只是在语法和运作方式上略有区别。导入的样式表在 HTML 文件初始化时会被导入 HTML 文件内,作为文件的一部分,类似内嵌式的效果。链接的样式表则是在 HTML 标记需要格式时才以链接的方式引入。在 HTML 文件中导入样式表,常用的有以下几种 @import 语句,可以选择任意一种放在 <style> 标记之间。
@import url(sheet1.css); @import url("sheet1.css"); @import url('sheet1.css'); @import sheet1.css; @import "sheet1.css"; @import 'sheet1.css';下面制作一个实例:
<html> <head> <title>页面标题</title> <style type="text/css"> @import url(03-10.css); </style> </head> <body> <h2>CSS标题</h2> <p>这是正文内容……</p> <h2>CSS标题</h2> <p>这是正文内容……</p> </body> </html>效果如下图所示。
图 4 导入样式
导入样式的最大用处在于可以让一个 HTML 文件导入很多样式表。
下面使用两个 @import 语句将两个 css 同时导入 HTML 文件中,具体代码如下:
<html> <head> <title>页面标题</title> <style> @import url(03-10.css); @import url(03-12.css); /* 同时导入两个CSS样式表 */ </style> </head> <body> <h2>CSS标题</h2> <p>这是正文内容……</p> <h2>CSS标题</h2> <p>这是正文内容……</p> <h3>新增加的标题</h3> <p>新增加的正文内容</p> </body> </html>
各种方式的优先级问题
前面的 4 个小节分别介绍了 CSS 控制页面的 4 种不同的方法,各种方法都有其自身的特点。这 4 种方法如果同时被运用到同一个 HTML 文件的同一个标记上,就会出现优先级的问题。如果在各种方法中设置的属性不一样,例如内嵌式设置字体为宋体,行内样式设置颜色为红色,那么显示结果会让二者同时生效,即显示宋体红色字。但当各种方法同时设置一个属性时,例如都设置字体的颜色,情况就会比较复杂。
下面举例说明:
1) 先创建两个 CSS 文件,其中第 1 个命名为“red.css”,其内容如下。
p{ color:red; }第 2 个命名为“green.css”,其内容如下。
p{ color:green; }这两个 CSS 文件分别将文本段落文字的颜色设置为红色和绿色。接着创建一个 HTML 文件,代码如下
<html> <head> <title>页面标题</title> <style type="text/css"> p { color:#blue; } @import url(red.css); </style> </head> <body> <p style="color:gray;">观察文字的颜色</p> </body> </html>从代码中可以看到,在内嵌式的样式规则中,p 段落文字的颜色设置为蓝色,而行内样式又将 p 段落文字的颜色设置为灰色。此外,通过导入样式的方式引入了 red.css,又将文字颜色设置为红色,那么这时这个段落的文字到底会显示成什么颜色呢?
效果如下图所示。
图 5 文字显示为灰色
可以看到,结果是灰色,即以行内样式为准。接下来将行内样式代码删除,再次在浏览器中观察,可以看到结果是蓝色,即以内嵌式为准。接下来把内嵌式代码删除,仅保留导入命令,这时在浏览器中将看到红色的文字。
综上所述,行内样式、内嵌式和导入样式这 3 种方式的优先级关系是:
行内样式 >内嵌式 >导入样式
接下来在代码中以链接式引入 CSS 文件,分别尝试以下两种情况。1) 第一种情况:
<head> <style type="text/css"> @import url(red.css); </style> <link href="green.css" type="text/css" rel="stylesheet"> </head>
2) 第二种情况:
<head> <link href="green.css" type="text/css" rel="stylesheet"> <style type="text/css"> @import url(red.css); </style> </head>这两种情况的区别在于哪种方式的样式表放在前面。经过尝试可以发现,哪种样式表放在后面就以哪种样式表为准。
结合前面的结论,如果我们把导入样式和链接式统称为“外部样式”,那么优先级规则应该写为:
- 行内样式 >内嵌式 >外部样式;
- 外部样式中,出现在后面的优先级高于出现在前面的。
这个规则已经比较完善了,然而还没有结束。现在将 <head> 标记中的代码改为如下形式。
<head> <style type="text/css"> p{ color:blue; } </style> <style type="text/css"> @import url(red.css); </style> </head>将导入样式的命令和内嵌式的样式放在两个 <style> 标记中,此时在浏览器中文字会显示为红色,这就说明此时将不再遵循内嵌式优先于导入样式的规则了。例如下面这段代码。
<head> <style type="text/css"> p{ color:blue; } </style> <link href="green.css" type="text/css" rel="stylesheet"> <style type="text/css"> @import url(red.css); </style> </head>由此可知,优先级最高的是最后面的导入样式,其次是链接式,最后才是内嵌式。因此,如果在 <head> 标记中存在多个 <style> 标记,那么这些 <style> 标记和链接式之间将由先后顺序决定优先级,而在同一个 <style> 标记内部才会遵循内嵌式优先于导入样式的规则。
说明,虽然各种 CSS 样式加入页面的方式有优先级之分,但在建设网站时最好只使用其中的 1~2 种,这样既有利于后期的维护和管理,也不会出现各种样式冲突的情况,便于设计者理顺设计的整体思路。