第3章 使用CSS3样式表 学习目标 了解CSS样式表的概念及功能 掌握CSS样式的声明方法 掌握CSS样式的应用方法 理解和掌握CSS的高级语法 熟练使用CSS3的常用属性 通过相关的范例及综合案例深入了解并掌握CSS3在网页样式定义及站点外观统一方面的应用 CSS是Cascading Style Sheets(层叠样式表)的缩写,一般简称为“样式表”,它是由W3C组织制定的一种非常实用的网页元素定义规则。在标准网页设计中,CSS负责网页内容(HTML)的表现。样式就是格式,例如网页中文字的大小、颜色,图片的大小、插入位置等; 层叠是指多个样式可以同时应用到同一个页面或网页中的同一个元素,如果这些样式发生了冲突,则依据层次的先后来处理网页中内容的形式。 1997年,W3C在公布HTML 4.0的同时公布了有关样式表的第一个标准——CSS 1.0,CSS1.0较为全面地规定了文档的显示样式,其大致可分为选择器、样式属性、伪类/对象几个部分。1998年W3C发布了CSS的第二个版本,它包含了CSS 1.0的所有功能,并扩充和改进了很多更加强大的属性。 早在2001年5月,W3C就着手开始准备开发CSS第三版规范。CSS3语言的开发是朝着模块化发展的,把CSS分解为一些小的模块,更多新的模块也被加入进来。现在,W3C的CSS3规范仍在开发,它的新技术将简化网站的开发流程,也会带来更好的用户体验。 CSS的目的就是把结构和样式相分离,网页的结构用HTML的标签定义,网页的外观样式用CSS定义。CSS功能强大,样式设定功能比HTML多,几乎可以定义所有的网页元素。在将样式的定义全部交给CSS后,通过简单地更改CSS文件就可以轻松改变一个或多个网页的整体表现形式,从而减少网页设计人员的工作量。 CSS是一种表现语言,是对网页结构语言HTML的有效补充。网页编辑的一般步骤是: 首先利用HTML定义网页结构和各页面元素的使用,其次使用CSS定义网页的外观并应用到具体的某些页面或某些元素中。 在本章的学习中首先熟悉CSS的定义和使用方法,其次了解一些常用的CSS属性,以及部分最新的CSS3相关属性,同时应用所学的知识对案例网站中的相关页面进行CSS样式的设置。 3.1初识CSS样式表 本节首先通过一个简单的案例实践来快速了解CSS样式表的定义和使用,然后介绍CSS的基本语法和几种创建方法,最后介绍除标签选择器以外的几种常见的CSS选择器,包括组合选择器、后代选择器、类选择器和id选择器。 第 3 章 使用CSS3样式表 网页设计与Web前端开发案例教程——HTML5、CSS3、JavaScript 3.1.1第一个CSS案例 下面通过一个简单的案例实践来快速了解CSS样式表的定义和使用。 【例31】编写一个简单的用CSS控制网页内容外观的例子,其中加粗的部分为CSS代码。在浏览器中的效果如图31所示。 视频讲解
海洋污染即污染物进入海洋,超过海洋的自净能力。
海洋污染物绝大部分于陆地上的生产过程。海岸活动,例如倾倒废物和港口工程建设等,也向沿岸海域排入污染物。污染物进入海洋,污染海洋环境,危害海洋生物,甚至危及人类的健康。
图31第一个CSS控制网页外观的例子 在本书的2.1.4节曾经提过,标签中的bgcolor属性和text属性属于被使用了多年但不被推荐使用的属性,这里使用CSS样式定义实现了同样的功能。另外,在段落样式的定义中,除了文本缩进以外,还增加了对文字大小的定义。 由图31可以看到,在部分添加简单的CSS样式后,页面中所有由定义的段落文本首行全部向右缩进了两个字符的空格。如果使用HTML的方法,则只能在每个段落的前面增加两个空格字符。如果下次希望每个段落缩进一个字符,只需对此样式表进行修改就可以了。 如果希望段落以外的其他元素(例如标题3)设置首行缩进,只需要复制上面的CSS定义,并把p改为h3即可。 3.1.2CSS基本语法 由上一节的案例可以看到,CSS的样式定义都是由一些最基本的语句构成的。它的基本语句的结构格式为: 选择器{属性: 属性值;} 选择器(selector)通常是需要定义的HTML元素或标签; 属性(property)是希望改变的元素属性,并且每个属性都有一个值。属性和值被用冒号分开,并由大括号包围,这样就组成了一个完整的样式声明(declaration)。例如: p {text-indent: 2em;} 上面这行代码的作用是将p元素内的文字缩进两个字符。在上述例子中,p是选择器,而包括在花括号内的部分是声明。声明依次由属性和值两个部分构成,这里textindent为属性,2em为属性值。属性值的数值和单位之间不能有空格。 CSS样式的定义还需要符合以下几点语法要求。 (1) 如果值为若干单词,则要给值加引号。例如: p {font-family: "sans serif";} (2) 如果要定义不止一个声明,则要用分号将每个声明分开。其格式为: 选择器{属性: 属性值; 属性: 属性值;… } 例如上一节中
选择器的定义,简写的形式如下: body {color: #000000; background-color: #FFFFFF;} 3.1.3CSS的创建 要想在浏览器中显示出所定义的CSS样式效果,需要让浏览器识别并调用。当浏览器读取样式表时,要依照文本格式来读。将CSS样式应用到HTML页面中可以有3种方法,即内部样式表、外部样式表和内联样式表。 1. 内部样式表 内部样式表是把样式表放到页面的…内,这些定义的样式就应用到页面中了。样式表是用 … 其中,用来说明所要定义的样式; type属性指定样式表属于CSS文本类型。 注意: 有些低版本的浏览器不识别中为依据CSS样式声明的语法定义一个以上的选择器样式。 /*…*/为CSS的注释符号,主要用于注释CSS的设置值。注释内容不会显示或被引用在网页上。 例如在3.1.1节中案例页面的部分所添加的就是内部样式表。 内部样式表可用于一个文档具有独一无二的样式的时候。如果多个文档使用同一个样式表,那么外部样式表会更适用。 2. 链入外部样式表 链入外部样式表是把样式表保存为一个样式表文件(.css),然后在页面中用标签链接到这个样式表文件,这个标签必须放到页面的…内。其格式为: … … 标签表示浏览器从“样式表文件名.css”文件中读出定义的样式表。rel="stylesheet"是指在页面中使用外部样式表。type="text/css"是指文件的类型是样式表文本(该属性可以省略)。href属性用于定义.css文件的URL。 样式表文件可以用任何文本编辑器(例如记事本)打开并编辑,一般样式表文件的扩展名为.css。内容是定义的样式表,不包含HTML标签。样式表文件的格式为: @charset 'utf-8'; 选择器1{属性:属性值; 属性:属性值; … } /*注释内容*/ 选择器2{属性:属性值; 属性:属性值; … } … 选择器n{属性:属性值; 属性:属性值; … } 其中,第1行通常用@charset 'utf8'来声明此CSS文件使用utf8编码。 视频讲解 【例32】将例31改为链入CSS外部样式表控制网页内容的外观,其中包括一个HTML文件ch0302.html及一个放在HTML案例所在文件夹下CSS文件夹中的CSS文件ch0302.css。在浏览器中的效果不变。 (1) ch0302.html文件,只需修改ch0301加粗部分的代码如下: (2) CSS文件夹中的ch0302.css文件。 @charset 'utf-8'; body { color:blue;/*定义网页文字颜色*/ background-color:#EEE; /*定义网页背景颜色*/ } p { text-indent:2em; /*文本向右缩进两个字符*/ font-size:14px; /*定义段落文字大小*/ } 一个外部样式表文件可以应用于多个页面。当这个样式表文件被改变时,所有相关的页面样式都会随之改变。这在制作大量相同样式页面的网站时非常有用,不仅减少了重复的工作量,而且有利于以后的修改、编辑,在浏览时也减少了重复下载代码。另外,浏览器显示时会保存外部样式表文件到缓冲区中,从而加快了显示网页的速度。 3. 导入外部样式表 导入外部样式表是指在内部样式表的里导入一个外部样式表,在导入时使用@import。其格式为: … “外部样式表文件名”指出要导入的样式表文件,其扩展名为.css,注意使用正确的格式及外部样式表路径。导入外部样式表和链入外部样式表在功能上基本没有区别,但由于它是在网页加载完以后再加载样式,可能会因此导致不能及时显示网页的样式。一般较小的CSS文件用导入的方法,而较大的CSS文件用链入的方法。 视频讲解 【例33】将例31改为导入CSS外部样式表控制网页内容的外观,其中包括一个HTML文件ch0303.html及一个放在HTML案例所在文件夹下CSS文件夹中的CSS文件ch0303.css。在浏览器中的效果不变。 (1) ch0303.html文件中的CSS样式(其中加粗部分为导入外部CSS文件的代码)。 (2) CSS文件夹中的ch0303.css文件。 @charset 'utf-8'; body { color:blue; /*定义网页文字颜色*/ background-color:#EEE; /*定义网页背景颜色*/ } 这里ch0303.css中的样式仅定义了body元素的样式。 注意其他的CSS规则应该仍然包括在style元素中,但所有的@import声明必须放在样式表的开始部分。导入样式表的优先级低于后面定义的其他样式表的声明。 4. 内联样式表 内联样式表(或行内样式表)是混合在HTML标签里使用的,用这种方法可以很简单地对某个元素单独定义样式。内联样式表的使用是直接在HTML标签里加入style参数,而style参数的内容就是CSS的属性和值。其格式为: <标签 style="属性:属性值; 属性:属性值 … "> style参数后面的引号里的内容相当于样式表大括号里的内容。 例如,可以将某页面标签中的HTML代码: 用内联样式表的方法改为: 可以看到,除了要按照特有的格式定义内联样式表以外,为同一标签(例如)定义同一功能的CSS属性名和HTML属性名并不总是相同,而且用CSS样式可以定义更多的样式属性。 如果用内联样式表的方法来定义例31中head部分的CSS样式,就会比较麻烦,需要在所有用定义的段落(如“海洋污染即污染物进入海洋,超过海洋的自净能力。”)进行重定义。例如:
海洋污染即污染物进入海洋,超过海洋的自净能力。
海洋污染物绝大部分于陆地上的生产过程。海岸活动,例如倾倒废物和港口工程建设等,也向沿岸海域排入污染物。污染物进入海洋,污染海洋环境,危害海洋生物,甚至危及人类的健康。
… 因为和需要展示的内容混合在一起,内联样式表会失去一些其他样式表的优点,所以这种方法应该尽量少用,一般仅用在对页面内某个标签的具体微调上。 3.1.4组合选择器 可以把相同属性和值的选择器组合起来书写,用逗号将选择器分开,这样可以减少样式的重复定义。其格式为: 选择器1, 选择器2, …, 选择器n{属性: 属性值; 属性: 属性值;… } 例如,下面CSS声明中所有段落和列表项的首行文本都向右缩进两个字符,并且大小都是14px。 p,li { text-indent:2em; font-size:14px;} 3.1.5后代选择器 后代选择器(descendant selector)可以选择作为某元素后代的元素,它允许根据文档的上下文关系来确定某个标签的样式。通过合理地使用后代选择器,可以使HTML代码变得更加整洁。后代选择器的样式定义格式为: 选择器1 选择器2 … 选择器n{属性: 属性值; 属性: 属性值;… } 这里大括号中所定义的样式只能应用于各选择器从左到右依次向后包含的情况,因此后代选择器有时又被称为包含选择器。 例如表格内链接的文字大小为12px,而表格外链接的文字仍为默认大小,可以这样定义一个后代选择器: table a { font-size: 12px } 3.1.6类选择器的创建和引用 在用CSS进行网站设计时,大家可能会遇到一种情况: 相同的标签可能需要在不同的地方设置成不同的显示效果。一种解决办法是采用3.1.3节所介绍的内联样式表,逐一进行属性设置,但如果此类标签在页面中应用得比较多,在设置时就会显得比较烦琐,修改时也不够方便,较好的解决办法就是采用类选择器。 类选择器,顾名思义是样式的分类选择器,它可以根据不同的风格需要对某一类型的标签设置几种不同的CSS属性,也可以将整个风格分成几个类,而不是只针对某一种类型的标签。 1. 类选择器的创建 类选择器可在内部样式表和外部样式表中创建,但不能在内联样式表中创建。用类选择器能够把相同的元素分类定义为不同的样式,在定义类选择器时,在自定类的名称前面加一个点号。类选择器的创建方法有两种,一种是可以定义针对某种HTML元素的类选择器样式,其格式为: 元素名.类选择器名{属性:属性值; 属性:属性值 … } 在这种方式中,可以对某一类型的HTML标签创建类选择器,例如: p{font-family:'宋体'; font-size:10pt; color:red} p.left{text-align:left} p.right{text-align:right} p.center{text-align:center} 在上面的例子中,所有段落标签的字体都为宋体,大小为10pt,颜色为红色,由于排版的需要又分成了3个类选择器,分别具有不同的排版属性。层叠样式表之所以为层叠,其意义也在于此。 类选择器还有一种用法,即在选择器中省略HTML标签名,这样可以把几个不同的元素定义成相同的样式。其格式为: .类选择器名{属性:属性值; 属性:属性值 … } 或 *.类选择器名{属性:属性值; 属性:属性值 … } 例如下面规定了3个类选择器,几乎所有的HTML标签都可以引用它们。 .isleft{font-family:'宋体'; font-size:10pt; color: red; text-align:left} .isright{ font-family:'宋体'; font-size:10pt; color: red; text-align:right} .iscenter{ font-family:'宋体'; font-size:10pt; color: red; text-align:center} 2. 类选择器的引用 类选择器的引用很简单,只需在标签后面设置class属性值为类选择器名即可,引用格式如下: <标签 class="类选择器名"> 例如在一个段落标签中引用之前第一种方式创建的类选择器:应用了类选择器设置左对齐的段落
红色左对齐的段落
红色右对齐的段落
3.1.7id选择器的创建和引用 通过设置HTML标签中的class属性可以对相应的元素进行分类,而id属性则可以对某个单一元素进行识别。因此,当某种样式说明仅对应于一个独特的元素时,可以通过创建和引用id选择器来实现。 1. id选择器的创建 CSS的id选择器就是元素的id标识,它可以为标有特定id的HTML元素指定特定的样式。定义id选择器要在id名称前加上一个“#”号。和类选择器相同,定义id选择器的属性也有两种方法,一种是定义针对某种HTML元素的id选择器样式,其格式为: 元素名#id选择器名{属性:属性值; 属性:属性值 … } 这里的“id选择器名”就是元素的id标识,由网页设计者定义。id选择器的样式可应用于用id属性定义的HTML标签样式。 例如下面这个例子,id属性只匹配id="green"的段落元素: p#green {color:green;} 更常见的id选择器定义方法为在选择器中省略HTML标签名,其格式为: #id选择器名{属性:属性值; 属性:属性值 … } 这里的“id选择器名”就是元素的id标识,由网页设计者定义。id选择器的样式可应用于用id属性定义的HTML标签样式。 例如下面的两个id选择器,第一个定义元素的颜色为红色,第二个定义元素的颜色为绿色。几乎所有的HTML元素都可以应用这两个id,但id属性只能在每个HTML文档中出现一次。 #red {color:red;} #green {color:green;} 2. id选择器的引用 id选择器的引用和类选择器类似,只要把class换成id即可。其引用格式如下: <标签 id="id选择器名"> 例如前面用第二种方式创建的id选择器分别被一个标签和
应用了id选择器设置红色的段落
段落一
段落二
图314空块元素的外边距合并效果 这里段落一与段落二之间的距离为中间空的div盒子上边距与下边距中的较大者“50px”。 2. 块级父元素与其第一个/最后一个子元素的外 边距合并 在块级父元素中不存在bordertop、paddingtop、inline content、清除浮动这4个属性,那么这个块级元素和其第一个子元素的上边距就会挨到一起,即发生上外边距合并现象。换句话说,就是这个父元素的外边距将直接变成这个父元素和其第一个子元素的margintop的较大者。 与之类似,若块级父元素的marginbottom与它的最后一个子元素的marginbottom之间没有父元素的borderbottom、paddingbottom、inline content、height、minheight、maxheight分隔,就会发生下外边距合并现象。 【例317】编写一个父元素与子元素上外边距合并的例子,样式和盒子的定义如下,页面效果如图315所示。 图315父元素与子元素的 上外边距合并 .wrapper { width: 100px; height: 100px; margin-top: 20px; background: red; } .div1 { width: 50px; height: 50px; margin-top: 30px; margin-left: 20px; background: yellow; }页面列表可分为:
有序列表的序号类型有:
定义列表不仅仅是一列项目,而是项目及其注释的组合。比如,下面是用定义列表的形式对HTML的3种列表进行说明:
段落
第三个行内元素 第四个行内元素第五个行内元素第一个行内块元素
第二个行内块元素
第三个行内块元素
第四个行内块元素
第五个行内块元素
第六个行内块元素
第八个行内块元素
标签里面不能套包括其自身在内的任何块级元素; 设定本段文字字体为华文楷体,如不能显示该字体则用第二候选字体楷体_GB2312,否则用第三候选字体宋体,依次类推。 CSS样式表定义斜体文字大小是所在对象的1.5倍,本段应用样式类s1,文字大小为20px,则其中的斜体字大小是30px。 溢出文本省略示例;溢出文本省略示例;溢出文本省略示例;溢出文本省略 溢出文本省略示例;溢出文本省略示例;溢出文本省略示例;溢出文本省略 原创作品 - 影视 - Motion Graphic 2小时前上传
1284
人气/11
评论/47
推荐
原创作品 - 影视 - Motion Graphic 3小时前上传
1569
人气/50
评论/125
推荐
这真是一个好消息! 这是div后的第一个段落 这是div后的第二个段落 这是div中的第一个段落 这是div中的第二个段落 这是div中的第三个段落 这是div中的第四个段落 div前的段落 div中的段落 段落1 段落2 段落3 <p lang="en">Hello!</p> <p lang="en-us">Hi!</p> <p lang="us-en">Hi!</p> <p lang="zh">Hao!</p> <p title="student hello">Hello students!
You can use the :first-letter pseudo-element to add a special effect to the first letter of a text! You can use the :first-line pseudo-element to add a special effect to the first line of a text! 、、标签都继承了body样式中的字体属性。对于不能直接继承的属性,例如margin、border等,或者单独赋值,或者用inherit属性值来继承,标签的红色也是通过inherit属性值来继承。
首先在body部分输入以下HTML结构代码:
div中的一个段落
段落中的span元素
段落中的a标签
多元素组合选择器所影响最内层的文字
这是一个圆角边框 左上角的水平半径为2em,垂直半径为0.5em;
4个角的水平半径均为50px,垂直半径均为5px 简单阴影效果 添加不透明度的阴影效果 模糊阴影效果 多重阴影效果 文字发光效果 凹凸纹理效果1 凹凸纹理效果2 文字描边效果 注意,第2个标题被隐藏了,但仍然占用空间。 B.
C. p {fontweight:bold}D. p {textsize:bold}
17. 以下不是CSS文字设置的长度单位的是()。
A. emB. pxC. inD. kk
18. 下列选项中,()可以显示没有下画线的超链接。
A. a {textdecoration:none}B. a {textdecoration:no underline}
C. a {underline:none}D. a {decoration:no underline}
19. 下列选项中,()可以产生带有方形的项目符号的列表。
A. listtype: squareB. liststyletype: square
C. type: squareD. type: 2
20. 下列元素中,默认属于块元素的是()。
A. formB. imgC. spanD. strong
21. 下列元素中,默认属于行内元素的是()。
A. olB. h1C. emD. li
22. 下列关于块元素和行内元素的说法中不正确的是()。
A. 块元素默认独占一行显示
B. 块元素的宽度、高度等属性有效
C. 行内元素的宽度、高度等属性有效
D. 设置display属性可以转换块和行内元素
23. 下列优先级描述正确的是()。
A. id>标签>类B. 类>标签>id
C. id>类>标签D. 标签>类>id
24. 若要把(1)变成(2)的效果,在CSS样式中应该设置()。
(1)
(2)
A. lineheightB. marginC. paddingD. border
25. 在下列圆角边框中,与“borderradius:10px 30px 70px”相对应的是()。
A. B.
C. D.
三、 判断题
1. CSS文件导入必须在
图333背景图素材
图334使用精灵图技术实现的布局效果
这里前4个li列表项对应的类都设置了backgroundposition属性,而第5个li列表项由于其中的小图标位于背景图的左上角,相当于其backgroundposition属性取默认值0 0,所以可以不用设置backgroundposition属性。
注意: 在查看图片大小时,默认的照片查看器可能会按比例适应缩放图片,这时需要查看原始的图片大小,以便于准确计算背景定位所需要的水平和垂直方向的偏移值。
3.5.2字体属性
设置字体属性是样式表的最常见用途之一。CSS字体属性允许设置字体系列(fontfamily)和字体加粗(fontweight),还可以设置字体的大小、字体风格(例如斜体)和字体变形(例如小型大写字母)等,如表33所示。
表33CSS字体属性
属性属 性 含 义属性值
fontfamily使用什么字体<字体名称>|<字体系列>
fontsize定义字体的大小<绝对大小>|<相对大小>|<长度>
fontstyle字体是否用斜体normal | italic | blique
fontweight定义字体的粗细normal | bold | bolder | lighter
fontvariant字体是否用小体大写normal | smallcaps
lineheight设置文本所在行的行高normal | <数值> | <长度值> | <百分比>
font定义各种字体属性<以上各种字体属性的属性值>
1. 字体系列(fontfamily)
语法: fontfamily: <字体名称> | <字体系列>
说明: 该属性用于设置字体名称或字体系列。如果指定多个字体名称,则按显示的优先顺序排列,以逗号隔开,形成字体系列。如果字体名称包含空格,则应该用引号括起,单引号或双引号都可以接受。但是,如果把一个fontfamily属性放在HTML的style属性中,则需要使用该属性本身未使用的那种引号。
初始值: 由浏览器决定。
示例:
div.a { font-family: Courier, "Courier New", monospace }
div.b { font-family: 华文楷体, 楷体_GB2312 }
标签)、nowrap(文本不会换行,文本会在同一行上继续,直到遇到
标签为止)、prewrap(保留空白符序列,但是正常地进行换行)、preline(合并空白符序列,但是保留换行符)、inherit(从父元素继承whitespace属性的值)。
初始值: normal
示例:
p {white-space: nowrap}/*禁止段落中的文本换行*/
10. 溢出文本省略(textoverflow)
语法: textoverflow: clip|ellipsis|
4. 案例改编及拓展
仿照以上案例,自行编写及拓展类似的网页效果,例如不同的图文排列效果等。
3.6高级选择器
CSS3增加了更多的CSS选择器,可以实现更简单、更强大的功能,例如nthchild()等。允许用户在标签中指定特定的HTML元素而不必使用多余的class、id或JavaScript。如果要实现一个干净的、轻量级的标签并使结构和表现更好地分离,高级选择器是非常有用的。它们可以减少在标签中的class和id的数量,并让设计师更方便地维护样式表。
3.6.1子元素选择器
在CSS3中,“>”表示子元素选择器(child selector)。与后代选择器相比,子元素选择器(child selector)只能选择作为某元素的子元素的元素,而不会影响其他的后代元素。
例如,以下代码设置作为h3元素的子元素的strong元素为红色:
h3 > strong {color:red;}
当把这个CSS样式应用到下面的网页内容时,第一个h3下面的两个strong元素由于都是h3的子元素,显示为红色; 但是第二个h3中的strong元素是em的子元素,而不是h3的子元素,所以不受影响,如图338所示。
动画便利店X果壳网《西门子洗碗机》 by
动画便利店X视知《到底工资怎么发》 by
This is very very important.
This is really very important.
用户可以根据需要使用多个子元素选择器来逐级指定某个特定的元素,例如:
div > p > span{font-size:30px;}
这个CSS样式可以设置下面代码中的“好”字为30px大小,如图339所示。
图343CSS属性选择器示例
注释: 只有在规定了!DOCTYPE时,IE7和IE8才支持属性选择器。在IE6及更低的版本中不支持属性选择器。
3.6.5伪类选择器
CSS伪类是添加到选择器的关键字,可以指定要选择的元素的特殊状态。伪类名称由一个冒号开头,具体语法如下:
选择器:伪类名 {属性: 属性值; 属性:属性值 …}
例如,下面的:hover伪类可用于在用户将鼠标悬停在div按钮上时改变按钮的颜色。
div:hover {
background-color: #F89B4D;
}
1. 锚伪类
在HTML中,只有一个元素可以成为超链接,即a(锚)元素。锚伪类是这样一种机制,浏览器可以通过它向用户指示正在查看的文档中超链接的状态。
浏览器通常采用一种不同于其余文本的颜色来显示文档中的链接。用户没有访问过的链接使用一种颜色,用户访问过的链接使用另一种颜色。设计者无法知道用户是否已经访问过链接,只有浏览器才知道此信息,但是设计者可以在样式表中设置颜色以指示链接的状态。在支持CSS的浏览器中,链接的不同状态都可以用不同的方式显示,这些状态包括未被访问状态、已被访问状态、鼠标悬停状态和活动状态,相应的锚伪类有以下4种。
a:link: 超链接的正常状态(未被访问前)。
a:visited: 访问过的超链接状态。
a:hover: 光标移到超链接上时的状态。
a:active: 选中超链接时的状态(在鼠标单击与释放之间)。
锚伪类的应用格式为:
a: 锚伪类名 {属性:属性值; 属性:属性值 … }
类选择器也可以和锚伪类一起使用,其格式为:
a.类名: 锚伪类名 {属性:属性值; 属性:属性值 … }
或
.类名: 锚伪类名 {属性:属性值; 属性:属性值 … }
示例: 首先在某网站本地根目录下的CSS文件夹中为大多数页面建立一个公共的样式表文件global.css,并在文件中添加如下的锚伪类定义。其中,当前链接没有下画线,只有当光标经过时才出现下画线,并将文字的颜色改为红色; 而当链接被激活时文字加粗显示,被访问过后显示为灰色,并且都没有下画线。
a:link {
color: #000;
text-decoration: none;
}
a:visited{
color: #666;
text-decoration: none;
}
a:hover {
color: #FF0000;
text-decoration: underline;
}
a:active {
font-weight:bold;
text-decoration: none;
}
接下来将global.css应用到index.html,在index.html的head部分添加如下代码:
用户可以通过测试index.html中各个链接的效果来观察相应的锚伪类样式设置效果,并进行相应的修改和调整。
注意: 在CSS定义中,a:hover必须被置于a:link和a:visited之后才是有效的,而a:active必须被置于a:hover之后才是有效的。对于这样的顺序要求,有人总结了容易记忆的口诀,也就是“LoVe HAte”(爱恨)。
2. 通用伪类
在锚伪类的4个伪类名中,:link和:visited为标签所特有的,分别表示超链接被单击前后的两种状态; 而:active和:hover可以适用于所有的标签元素,分别表示元素被激活(按住不放)时和鼠标滑过(悬浮)时的两种状态。例如,div:active表示div元素被激活时的状态。此外,focus伪类表示元素在获取键盘输入焦点时的状态。常见的通用伪类如表37所示。
表37常见的通用伪类
属性选择器描述举例
:active向被激活的元素添加样式div:active{color:red;}会把所有被激活的div元素中的文字设置为红色
:focus向拥有键盘输入焦点的元素添加样式input:focus{backgroundcolor:yellow;}会把所有获得焦点的input元素的背景设置为黄色
:hover当鼠标滑过(悬浮)在元素上方时向元素添加样式div:hover{fontweight:bold;}会把所有鼠标滑过时的div元素中的文字加粗
结合之前学过的其他选择器,还可以对伪类进一步扩展,例如:
div : hover{}/*定义div元素在鼠标滑过时的样式*/
div p : hover a{} /*定义div元素的后代元素p在鼠标滑过时其后代元素a的样式*/
div + p : hover a{} /*定义div元素的相邻元素p在鼠标滑过时其后代元素a的样式*/
3.6.6伪元素选择器
伪元素允许用户对元素内容的一部分设置样式。引入伪元素能完成用其他方式无法实现的设计。伪元素由两个冒号开头,具体语法为:
选择器::伪元素名 {属性: 属性值; 属性:属性值 …}
类选择器也可以和伪元素一起使用,其格式为:
选择器.类名::伪元素 {属性:属性值; 属性:属性值 … }
说明: 对伪元素使用两个冒号(::)是CSS3规定的新格式,目的是为了区别伪类和伪元素(CSS2中并没有区别)。当然,考虑到兼容性, CSS2中已存在的伪元素仍然可以使用一个冒号的语法,但是CSS3中新增的伪元素必须使用两个冒号。
1. 首字母和首行伪元素
最常用的两个伪元素是首字母和首行。它们允许分别对单词的首字母和段落的首行强行施加样式,而不考虑其他任何样式。一种常见的用法是增加首字母的大小或使首行采用大写字母。除此之外,还可以设置颜色、背景、文本修饰和大小写转换等属性。
首字母和首行伪元素的写法如下。
::firstletter: 用于向某个选择器中文本的首字母添加特殊的样式,例如p::firstletter。
::firstline: 用于向某个选择器中文字的首行添加特殊样式,例如p::firstline。
【例329】首字母和首行伪元素应用示例。
新建一个HTML文档,首先在body部分输入以下代码:
可以应用[lang|=en]样式:
无法应用[lang|=en]样式:
可以应用[title^=hello]样式:
<h4 title="hello world">Hello world</h4>
无法应用[title^=hello]样式:
、
div中的标题3元素
同时应用3种选择器所定义样式的h3标题文字
其次在head部分建立如下CSS样式代码:
可以看到,最后h3标题文字显示为被!important声明的HTML标签选择器样式中所定义的红色。如果去掉!important,则依照优先级别最高的id选择器中后面定义的为黑色文字。
网页制作者应该小心地使用!important规则,因为它们会超越用户任何的!important规则。例如,一个用户由于视觉关系,会要求大字体或指定的颜色,而且这样的用户有可能声明确定的样式规则为!important,因为这些样式对于用户阅读网页是极为重要的。任何的!important规则都会超越一般的规则,所以建议网页制作者使用一般的规则,以确保有特殊样式需要的用户能阅读网页。
2. 多元素组合选择器的优先级
在使用多元素组合的选择器时,优先级的判断会比单一的基本选择器复杂一些,可通过以下几条规则进行判断:
(1) 首要的原则是控制对象的精准度,越精准控制相应元素的选择器优先级越高。
(2) 当控制的精准度相同时,如果id选择器的个数不相等,则id个数越多的优先级越高。
(3) 当精准度和id数都相同时,class个数越多的优先级越高。
(4) 当前3个条件都相同时,tagName(标签名)个数越多的优先级越高。
(5) 对于同优先级的样式冲突,后定义的样式覆盖前面定义的样式。
例如,在控制对象的精度相同的情况下,#wrap ul li .list{}和.wrap ul li #list{}的优先级一样。
【例333】多元素组合选择器示例,span中的文字样式可用多元素选择器来定义。
首先在body部分输入以下代码:
右上角的水平半径为1em,垂直半径为3em;
右下角的水平半径为4em,垂直半径为0.5em;
左下角的水平半径为1em,垂直半径为3em;
圆角半径为正方形元素大小的一半(50%),显示为圆形:
圆角半径为长方形元素大小的一半(50%),显示为椭圆形:
图351定义不同种类的圆角边框
3.8.2方框阴影属性
boxshadow(方框阴影属性)用于向方框添加一个或多个阴影。该属性是由逗号分隔的阴影列表,每个阴影由2~4个长度值、可选的颜色值以及可选的inset关键词来规定,省略长度的值是0。单个阴影列表的语法如下:
box-shadow:
这是一个可见标题
这是一个隐藏标题
,有序列表的标签是
,定义列表的标签是
。()
四、 简答题
1. 把样式表加入到网页中有哪几种方式?请指出它们分别是什么。
2. 在什么情况下用id定义CSS样式,在什么情况下用class?
3. 简述块元素和行内元素的特征。
4. 简述相邻块元素的外边距合并的特点。
5. 在CSS布局中,如何实现页面中或某一父元素中盒模型的水平居中?
6. 在用不同的选择器定义相同的元素时,id选择器、类选择器和HTML标签选择器的优先级别应如何排列?如果想超越这3者之间的关系,可以用什么方法来提升样式表的优先权?
7. 简述CSS的书写顺序。
五、 实践题
利用本章所学的知识,为第2章习题中所制作的个人站点应用CSS改善网站外观。
操作要求:
(1) 建立1~2个外部CSS样式表文件,以统一网站的外观风格,包括文本风格、链接风格、背景等;
(2) 为两个以上的页面建立内部样式表;
(3) 参考网络资料,为相关页面建立CSS的导航菜单。