图解CSS3核心技术与案例实战.pdf
http://www.100md.com
2020年1月21日
![]() |
| 第1页 |
![]() |
| 第7页 |
![]() |
| 第20页 |
![]() |
| 第28页 |
![]() |
| 第45页 |
![]() |
| 第1111页 |
参见附件(27722KB,1171页)。
图解CSS3核心技术与案例实战,这本书是资深前端工程师廖伟华所写的教程书,是由作者历时2年精心写作的,采用图文相结合形式,为读者更加容易理解CSS3!

图解CSS3内容提要
本书是CSS3领域的标准性著作,由资深Web前端工程师根据CSS3的全新技术标准撰写。内容极为全面、丰富和翔实,由浅入深地讲解了CSS3新特性的语法、功能和使用技巧,涵盖选择器、边框、背景、文本、颜色、UI、动画、新型盒模型、媒体查询、响应式设计等各种模块;写作方式创新,有趣且易懂,用图解的方式来描述CSS3的每一个特性甚至每一个步骤都配有实战效果图;包含大量案例,实战性强,每个特性都有作者从实践中精心归纳和挑选出来的案例辅助讲解,同时还包含一个综合性的大案例。无论你是完全没有经验的准前端工程师,还是已经有一定经验的前端工程师,如果你想系统学习CSS3,那么本书将会是你的合适选择;如果你是一位成熟的前端开发工程师,但时常为如何合理地使用某些特性而费时去查阅相关资料。
图解CSS3作者学习
廖伟华(网名:大漠),资深Web前端工程师,W3cplus创始人,目前就职于Ctrip UED。中国Drupal社区核心成员之一。对HTML5、CSS3、XHTML和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内zui早研究和使用CSS3技术的一批人。现在还关注Web产品策划、交互设计、SEO以及移动端开发。2012年4月刊的《程序员》杂志上发表文章“Twitter Bootstrap:前端框架利器”。
图解CSS3目录预览
第1章揭开 CSS3的面纱
第2章 CSS3选择器
第3章 CSS3边框
第4章 CSS3背景
第5章 CSS3文本
第6章 CSS3颜色特性
第7章 CSS3盒模型
第8章 CSS3伸缩布局盒模型
第9章 CSS3多列布局
第10章 CSS3渐变
第11章 CSS3变形
第12章 CSS3过渡
第13章 CSS3动画
第14章 媒体特性与Responsive设计
第15章 嵌入Web字体
作者为什么要写这本书
CSS3是在CSS2.1基础上扩展而来,事实上,它还没有完全成熟。有些专家会告诉你,CSS3现在还用不上,甚至几年之后都不会有成熟的规范发布。
目前为止CSS3还没有一套成熟的规范,其中的模块也在不断更新,特别是浏览器对CSS3特性的支持也在不断变化,同时没有足够的时间去学习和研究W3C官方文档和规范,致使我们学习CSS3变得更为复杂。
为什么会选择这个时候编写这样一本图书呢?原因很简单。对于希望Web应用开发者而言,CSS3可以说是众望所归,这也是技术变更的硬性需求。在实际Web应用中新标准的采纳程度正在以令人目眩的速度不断地变更着,众多浏览器厂商也在不断加快对CSS3新特性的支持。在编写这本图书的过程中,我也被迫不断更新书中的浏览器支持表格。
面对自己正在使用的浏览器,大多数用户并不真正了解其具备的功能有多强大。当然,他们在浏览器自动更新后可能会发现一些细微的界面变化。但他们可能不知道,新版的浏览器对哪些CSS3特性有所支持。
本书的目标是帮助开发者更好地掌握CSS3的特性,并且将新技术运用到实际的开发当中,提高自己开发Web程序的水平。
图解CSS3核心技术与案例实战截图


Web开发技术丛书
图解CSS3:核心技术与案例实战
大漠 著
ISBN:978-7-111-46920-9
本书纸版由机械工业出版社于2014年出版,电子版由华章分社(北京华
章图文信息有限公司)全球范围内制作与发行。
版权所有,侵权必究
客服热线:+ 86-10-68995265
客服信箱:service@bbbvip.com
官方网址:www.hzmedia.com.cn
新浪微博 @研发书局
腾讯微博 @yanfabook目录
前言
第1章 揭开CSS3的面纱
1.1 什么是CSS3
1.1.1 CSS3的新特性
1.1.2 CSS3的发展状况
1.1.3 现在能使用CSS3吗
1.1.4 使用CSS3有什么好处
1.2 浏览器对CSS3的支持状况
1.2.1 经典回顾:图说浏览器大战
1.2.2 浏览器的市场份额
1.2.3 主流浏览器对CSS3支持状况
1.3 渐进增强
1.3.1 渐进增强与优雅降级
1.3.2 渐进增强的优点
1.4 CSS3的现状及未来
1.4.1 谁在使用CSS3
1.4.2 CSS3的未来
1.5 本章小结
第2章 CSS3选择器2.1 认识CSS选择器
2.1.1 CSS3选择器的优势
2.1.2 CSS3选择器分类
2.2 基本选择器
2.2.1 基本选择器语法
2.2.2 浏览器兼容性
2.2.3 实战体验:使用基本选择器
2.2.4 通配选择器
2.2.5 元素选择器
2.2.6 ID选择器
2.2.7 类选择器
2.2.8 群组选择器
2.3 层次选择器
2.3.1 层次选择器语法
2.3.2 浏览器兼容性
2.3.3 实战体验:使用层次选择器选择元素
2.3.4 后代选择器
2.3.5 子选择器
2.3.6 相邻兄弟选择器
2.3.7 通用兄弟选择器
2.4 动态伪类选择器2.4.1 动态伪类选择器语法
2.4.2 浏览器兼容性
2.4.3 实战体验:美化按钮
2.5 目标伪类选择器
2.5.1 目标伪类选择器语法
2.5.2 浏览器兼容性
2.5.3 实战体验:制作手风琴效果
2.6 语言伪类选择器
2.6.1 语言伪类选择器语法
2.6.2 浏览器兼容性
2.6.3 实战体验:定制不同语言版本引文风格
2.7 UI元素状态伪类选择器
2.7.1 UI元素状态伪类选择器语法
2.7.2 浏览器兼容性
2.7.3 实战体验:Bootstrap的表单元素UI状态
2.8 结构伪类选择器
2.8.1 重温HTML的DOM树
2.8.2 结构伪类选择器语法
2.8.3 浏览器兼容性
2.8.4 结构伪类选择器中的n是什么
2.8.5 结构伪类选择器的使用方法详解2.8.6 实战体验:CSS3美化表格
2.9 否定伪类选择器
2.9.1 否定伪类选择器语法
2.9.2 浏览器兼容性
2.9.3 实战体验:改变图片效果
2.10 伪元素
2.10.1 伪元素::first-letter
2.10.2 伪元素::first-line
2.10.3 伪元素::before和::after
2.10.4 伪元素::selection
2.11 属性选择器
2.11.1 属性选择器语法
2.11.2 浏览器兼容性
2.11.3 属性选择器的使用方法详解
2.11.4 实战体验:创建个性化链接样式
2.12 本章小结
第3章 CSS3边框
3.1 CSS3边框简介
3.1.1 边框的基本属性
3.1.2 边框的类型
3.1.3 谁在使用CSS3边框3.2 CSS3边框颜色属性
3.2.1 border-color属性的语法及参数
3.2.2 浏览器兼容性
3.2.3 border-color属性的优势
3.2.4 实战体验:立体渐变边框效果
3.3 CSS3图片边框属性
3.3.1 border-image属性的语法及参数
3.3.2 border-image属性使用方法
3.3.3 浏览器兼容性
3.3.4 border-image属性的优势
3.3.5 实战体验:按钮圆角阴影效果
3.4 CSS3圆角边框属性
3.4.1 border-radius属性的语法及参数
3.4.2 border-radius属性使用方法
3.4.3 浏览器兼容性
3.4.4 border-radius属性的优势
3.4.5 实战体验:制作特殊图形
3.5 CSS3盒子阴影属性
3.5.1 box-shadow属性的语法及参数
3.5.2 box-shadow属性使用方法
3.5.3 浏览器兼容性3.5.4 box-shadow属性的优势
3.5.5 实战体验:制作3D搜索表单
3.6 本章小结
第4章 CSS3背景
4.1 CSS3背景属性简介
4.1.1 背景的基本属性
4.1.2 与背景相关的新增属性
4.2 CSS3背景原点属性
4.2.1 background-origin属性的语法及参数
4.2.2 background-origin属性使用方法
4.2.3 浏览器兼容性
4.3 CSS3背景裁切属性
4.3.1 background-clip属性的语法及参数
4.3.2 background-clip属性使用方法
4.3.3 浏览器兼容性
4.4 CSS3背景尺寸属性
4.4.1 background-size属性的语法及参数
4.4.2 background-size属性使用方法
4.4.3 浏览器兼容性
4.4.4 实战体验:制作全屏背景
4.5 内联元素背景图像平铺循环方式4.6 CSS3多背景属性
4.6.1 CSS3多背景语法及参数
4.6.2 CSS3多背景的优势
4.6.3 浏览器兼容性
4.6.4 实战体验:制作花边框
4.7 本章小结
第5章 CSS3文本
5.1 CSS3文本简介
5.2 CSS3文本阴影属性
5.2.1 text-shadow属性的语法及参数
5.2.2 浏览器兼容性
5.2.3 实战体验:制作立体文本
5.3 CSS3溢出文本属性
5.3.1 text-overflow属性的语法及参数
5.3.2 浏览器兼容性
5.3.3 text-overflow属性使用方法
5.3.4 实战体验:制作固定区域的博客列表
5.4 CSS3文本换行
5.4.1 word-wrap属性
5.4.2 word-break属性
5.4.3 white-space属性5.4.4 文本换行技巧
5.4.5 文本换行技术对比
5.5 本章小结
第6章 CSS3颜色特性
6.1 网页中的色彩特性
6.1.1 网页色彩的表现原理
6.1.2 Web页面的安全色
6.1.3 色彩模式
6.2 CSS3透明属性
6.2.1 opacity属性的语法及参数
6.2.2 opacity浏览器兼容性
6.2.3 实战体验:制作透明过渡色块
6.3 CSS3颜色模式
6.3.1 RGBA颜色模式
6.3.2 HSL颜色模式
6.3.3 HSLA颜色模式
6.3.4 RGBA和HSLA颜色模式之间的选择
6.3.5 RGBAHSLA的IE兼容方案
6.3.6 RGBAHSLA滤镜格式
6.4 本章小结
第7章 CSS3盒模型7.1 CSS盒模型简介
7.1.1 什么是盒模型
7.1.2 重置盒模型解析模式
7.2 CSS3盒模型属性
7.2.1 box-sizing属性的语法及参数
7.2.2 浏览器兼容性
7.2.3 实战体验:box-sizing拯救了布局
7.3 CSS3内容溢出属性
7.3.1 overflow-x和overflow-y属性的语法及参数
7.3.2 浏览器兼容性
7.4 CSS3自由缩放属性
7.4.1 resize属性的语法及参数
7.4.2 浏览器兼容性
7.4.3 实战体验:修改文本域随意调整大小的功能
7.5 CSS3外轮廓属性
7.5.1 outline属性的语法及参数
7.5.2 浏览器兼容性
7.5.3 outline和border的对比
7.5.4 实战体验:模仿边框效果
7.6 本章小结
第8章 CSS3伸缩布局盒模型8.1 Flexbox模型基础知识
8.1.1 CSS中的布局模式
8.1.2 Flexbox模型的功能
8.1.3 Flexbox模型中的术语
8.1.4 Flexbox模型规范状态
8.1.5 Flexbox模型浏览器兼容性
8.1.6 Flexbox模型语法变更
8.2 旧版本Flexbox模型的基本使用
8.2.1 伸缩容器设置display
8.2.2 伸缩流方向box-orient
8.2.3 布局顺序box-direction
8.2.4 伸缩换行box-lines
8.2.5 主轴对齐box-pack
8.2.6 侧轴对齐box-align
8.2.7 伸缩性box-flex
8.2.8 显示顺序box-ordinal-group
8.2.9 实战体验:box制作自适应的三列等高布局
8.3 混合版本Flexbox模型的基本使用
8.3.1 伸缩容器设置display
8.3.2 伸缩流方向flex-direction
8.3.3 伸缩换行flex-wrap8.3.4 伸缩流方向与换行flex-flow
8.3.5 主轴对齐flex-pack
8.3.6 侧轴对齐flex-align
8.3.7 堆栈伸缩行flex-line-pack
8.3.8 伸缩性flex
8.3.9 显示顺序flex-order
8.4 新版本Flexbox模型的基本使用
8.4.1 伸缩容器display
8.4.2 伸缩流方向flex-direction
8.4.3 伸缩换行flex-wrap
8.4.4 伸缩流方向与换行flex-flow
8.4.5 主轴对齐justify-content
8.4.6 侧轴对齐align-items和align-self
8.4.7 堆栈伸缩行align-content
8.4.8 伸缩性flex
8.4.9 显示顺序order
8.5 综合案例:跨浏览器的三列布局
8.6 本章小结
第9章 CSS3多列布局
9.1 CSS3多列布局简介
9.1.1 浏览器兼容性9.1.2 CSS3多列布局的属性
9.2 CSS3多列布局基本属性
9.2.1 columns属性的语法及参数
9.2.2 浏览器兼容性
9.2.3 实战体验:Web页面的多列布局
9.3 CSS3多列布局列宽属性
9.3.1 column-width属性的语法及参数
9.3.2 实战体验:浏览器根据窗口宽度变化调整列数
9.4 CSS3多列布局列数属性
9.4.1 column-count属性的语法及参数
9.4.2 实战体验:显示固定列数
9.5 CSS3多列布局列间距属性
9.5.1 column-gap属性的语法及参数
9.5.2 实战体验:设置列间距
9.6 CSS3多列布局列边框样式属性
9.6.1 column-rule属性的语法及参数
9.6.2 实战体验:设置列边框
9.7 CSS3多列布局跨列属性
9.7.1 column-span属性的语法及参数
9.7.2 实战体验:文章标题跨列显示
9.8 CSS3多列布局列高度属性9.9 本章小结
第10章 CSS3渐变
10.1 CSS3渐变简介
10.1.1 什么是色标
10.1.2 浏览器兼容性
10.2 CSS3线性渐变
10.2.1 CSS3线性渐变语法与参数
10.2.2 CSS3线性渐变的基本用法
10.2.3 自定义CSS3线性渐变
10.2.4 实战体验:CSS3制作渐变按钮
10.3 CSS3径向渐变
10.3.1 CSS3径向渐变语法
10.3.2 CSS3径向渐变的属性参数
10.3.3 CSS3径向渐变的基本用法
10.3.4 实战体验:CSS3径向渐变制作圆形图标按钮
10.4 CSS3重复渐变
10.4.1 CSS3重复线性渐变
10.4.2 CSS3重复径向渐变
10.4.3 实战体验:制作记事本纸张效果
10.5 综合案例:CSS3渐变制作纹理背景
10.6 本章小结第11章 CSS3变形
11.1 CSS3变形简介
11.1.1 CSS变形属性及函数
11.1.2 浏览器兼容性
11.2 CSS变形属性详解
11.2.1 transform属性
11.2.2 transform-origin属性
11.2.3 transform-style属性
11.2.4 perspective属性
11.2.5 perspective-origin属性
11.2.6 backface-visibility属性
11.3 CSS3 2D变形
11.3.1 2D位移
11.3.2 2D缩放
11.3.3 2D旋转
11.3.4 2D倾斜
11.3.5 2D矩阵
11.4 CSS3 3D变形
11.4.1 3D位移
11.4.2 3D缩放
11.4.3 3D旋转11.4.4 3D矩阵
11.5 多重变形
11.5.1 2D多重变形制作立方体
11.5.2 3D多重变形制作立方体
11.6 综合案例:3D变形制作产品信息展示
11.7 本章小结
第12章 CSS3过渡
12.1 CSS3过渡简介
12.1.1 如何创建简单的过渡
12.1.2 浏览器兼容性
12.1.3 CSS3过渡属性
12.2 CSS3过渡子属性详解
12.2.1 指定过渡属性transition-property
12.2.2 指定过渡所需时间transition-duration
12.2.3 指定过渡函数transition-timing-function
12.2.4 指定过渡延迟时间transition-delay
12.2.5 多个CSS3过渡效果
12.3 CSS3触发过渡
12.3.1 伪元素触发
12.3.2 媒体查询触发
12.3.3 JavaScript触发12.4 CSS3过渡技巧
12.4.1 一个完整的过渡
12.4.2 可过渡的属性
12.4.3 优先的过渡属性
12.4.4 过渡的开始和结束为auto
12.4.5 隐式过渡
12.4.6 开关状态的不同过渡方式
12.4.7 几乎无限延迟的过渡
12.4.8 通过硬件加速过渡更加流畅
12.4.9 过渡和伪元素
12.5 综合案例:纯CSS3制作CSS Dock导航效果
12.6 本章小结
第13章 CSS3动画
13.1 CSS3动画简介
13.1.1 浏览器兼容性
13.1.2 CSS3动画属性
13.2 关键帧
13.2.1 @keyframes的作用
13.2.2 @keyframes的语法
13.2.3 浏览器兼容性
13.3 CSS中为元素应用动画13.3.1 使用@keyframes声明动画
13.3.2 调用@keyframes声明的动画
13.4 CSS3动画子属性详解
13.4.1 调用动画animation-name
13.4.2 设置动画播放时间animation-duration
13.4.3 设置动画播放方式animation-timing-function
13.4.4 设置动画开始播放的时间animation-delay
13.4.5 设置动画播放次数animation-iteration-count
13.4.6 设置动画播放方向animation-direction
13.4.7 设置动画的播放状态animation-play-state
13.4.8 设置动画时间外属性animation-fill-mode
13.5 综合案例:全屏Slidershow效果
13.6 本章小结
第14章 媒体特性与Responsive设计
14.1 媒体类型
14.1.1 Media Type设备类型
14.1.2 媒体类型引用方法
14.2 媒体特性
14.2.1 Media Query和CSS属性集合
14.2.2 常用Media Query设备特性
14.2.3 浏览器兼容性14.2.4 Media Query使用方法
14.3 Responsive布局概念
14.3.1 Responsive设计特点
14.3.2 Responsive中的术语
14.3.3 Responsive布局技巧
14.3.4 meta标签
14.4 本章小结
第15章 嵌入Web字体
15.1 @font-face模块介绍
15.1.1 浏览器兼容性
15.1.2 @font-face语法
15.1.3 使用字体图标的优势
15.2 实现@font-face
15.2.1 使用@font-face自定义字体
15.2.2 声明字体来源
15.2.3 创建各种字体
15.2.4 调用字体
15.3 综合案例:将图标转换成Web字体
15.3.1 创建一个图标字体
15.3.2 准备插图
15.3.3 导入到IcoMoon15.3.4 从IcoMoon中导出字体
15.3.5 下载字体文件
15.3.6 调用字体
15.4 本章小结前言
为什么要写这本书
CSS3是在CSS2.1基础上扩展而来,事实上,它还没有完全成熟。
有些专家会告诉你,CSS3现在还用不上,甚至几年之后都不会有成熟
的规范发布。
目前为止CSS3还没有一套成熟的规范,其中的模块也在不断更
新,特别是浏览器对CSS3特性的支持也在不断变化,同时没有足够的
时间去学习和研究W3C官方文档和规范,致使我们学习CSS3变得更为
复杂。
为什么会选择这个时候编写这样一本图书呢?原因很简单。对于希
望Web应用开发者而言,CSS3可以说是众望所归,这也是技术变更的硬
性需求。在实际Web应用中新标准的采纳程度正在以令人目眩的速度不
断地变更着,众多浏览器厂商也在不断加快对CSS3新特性的支持。在
编写这本图书的过程中,我也被迫不断更新书中的浏览器支持表格。
面对自己正在使用的浏览器,大多数用户并不真正了解其具备的功
能有多强大。当然,他们在浏览器自动更新后可能会发现一些细微的界
面变化。但他们可能不知道,新版的浏览器对哪些CSS3特性有所支持。
本书的目标是帮助开发者更好地掌握CSS3的特性,并且将新技术
运用到实际的开发当中,提高自己开发Web程序的水平。
本书面向的读者
·有一定CSS3开发经验的前端工程师。
本书能帮助你系统掌握CSS3的各项知识,提升技术水平和业务能
力。
·从事CSS3开发的前端工程师。
由于CSS3涵盖的新特性非常多,在开发过程中将本书作为速查手
册,提高开发效率。
·前端开发爱好者。
如果还不是一名前端工程师,但是对前端开发非常感兴趣,本书也
能让你对最新的CSS标准和规范有一个系统和全面的认识,为学习前端
知识打下基础。
本书的特色本书最大的特色就是将CSS3特性按模块功能分类,通过理论、图
解、实战的方式向大家阐释CSS3每个特性功能。
·内容全面、丰富、翔实。
由浅到深地讲解了CSS3新特性的语法、特性以及使用技巧。本书
涵盖了CSS3众多功能模块,如CSS3选择器特性、边框模块、文本模
块、颜色模块、UI界面模块、CSS3动画模块、CSS新型盒模型以及CSS
媒体查询、响应式设计等。
·图解方式,直观易懂。
图解的方式是本写的最大特色之一,在描述每一个CSS3特性过程
都配了生动的实战效果,甚至每一步骤都配有相应的效果图。就算是你
对文字理解或者代码理解有所误差,实战效果图能辅助你更好地理解
CSS3每个特性。
·案例丰富,实战性强。
每个CSS3特性都配有实战体验,部分案例来自于实际开发之中。
同时在每个知识点之后,还提供了综合案例。通过实践加强动手能力,更好地掌握CSS3中的每个知识点。
动手实践才是掌握一门新技术最有效的途径。如果能在阅读本书的
过程中逐一亲手实现这些案例,那么在以后的实际开发中自然就会具有相当强的动手能力了。
本书的内容
本书包括15章,通过实例来演示CSS3模块的新特性。
第1章简单介绍什么是CSS3,CSS3的好处是什么,浏览器对CSS3
的支持状况,以及CSS3带来什么新特性,并且引入渐进增强式的概
念。通过对本章的学习,大家可以在一定的程度上知道一些CSS3的故
事。
第2章介绍CSS3选择器。选择器是CSS中的核心部分之一,本章先
阐述CSS2的选择器,再引入CSS3新增的选择器。深入介绍了CSS3新增
选择器的功能及其实用性,还有各浏览器的兼容性。
第3章详细介绍CSS3在边框方面新增的功能特性,比如边框色、图
片边框、边框圆角等,并与CSS2进行了对比。
第4章介绍CSS3背景功能,着重阐述了多背景、背景尺寸、背景原
点方面的使用,以让大家掌握如何使用CSS3背景功能的新特性。
第5章介绍CSS3文本功能。以前大家在网页制作时,只是设置文本
的颜色、字体、字号等。通过对CSS3文本功能的学习,大家还可以运
用文本阴影、文本溢出、文本换行等功能。第6章介绍CSS3颜色特性。大家以前只有在设计软件中使用的颜色
值现在都可以运用,如RGBA、HSL、HSLA、透明度等。
第7章介绍CSS3基础盒模型与用户界面。盒模型是CSS的重中之
重,CSS2盒模型功能只能实现一些基本功能,对于一些特殊的功能需
要借助JavaScript来实现。而在CSS3中这一点将得到很大的改善,可以
通过CSS3来直接实现一些特殊的功能。
第8章介绍CSS3的弹性盒模型,给大家引入一种全新的布局概念,为大家的页面布局带来革命性的变化。
第9章介绍CSS3多列布局。布局在Web中随处可见,多列布局在
CSS2中都是依靠float或者inline-block来实现的,而这两个属性带来的局
限性也是相当大的。CSS3多列布局将会弥补这些不足之处。
第10章介绍CSS3渐变功能。渐变效果在Web中也是一种常见的效
果,以前靠设计师制作图片来完成,不仅增加了设计师的工作量,在页
面中的效果也带来过多的局限制,扩展性也相当差。CSS3渐变不再需
要使用图片来代替这些特殊的效果。
第11章介绍CSS3变形功能。这是一个全新的功能,在CSS2中要实
现需要借助JavaScript。CSS3的变形功能可以直接使用样式实现如旋
转、移位、扭曲、缩放等效果。第12章介绍CSS3过渡功能。大家在Web制作中,使过渡效果不再生
硬,变得细腻、流畅。
第13章介绍CSS3动画功能。
第14章介绍Media Query与Responsive布局。随着移动设备和宽屏浏
览器的普及,单一的设计不能满足Web页面的设计需求,此时CSS3的
Media Query新特性中出现了一个新的布局概念——Responsive。本章中
大家将体会到Media Query与Responsive布局的强大功能。
第15章介绍嵌入Web字体。浏览器仅限于用户在其系统上安装的字
体呈现文本。CSS3使用@font-face改变了这一格局。网站不再受限于少
量字体,如Arial、Verdana、Times和Georgia等。
如何阅读本书
本书结构不是按层进式安排的,章节之间是按CSS3的模块分类,读者阅读本书时无须按照先后顺序进行,可以挑选自己喜欢的章节阅
读。但如果按章节的编排顺序逐章阅读,会更系统、更全面地学习
CSS3,从中获得最大受益。
阅读本书的案例时,尽量不要照抄书中的代码 ,在理解案例的设
计思路基础上,自己动手开发相似功能的应用,并创造出满足自己需求
的功能,举一反三。本书中使用的约定
本书案例已在主流浏览器上进行过测试了。分别是:Firefox 12.0、Google Chrome 19.0.1084.52、Safari 5.17、Opera 11.64、IE 9。
同时在一些广泛使用的旧版本浏览器(如IE 8)上也做了测试。很
多情况下,CSS3的效果也能体现在较低版本上,页面能保持正常阅
读,而且效果也不会太差。对于每一个CSS3特性,将尽可能地为低版
本浏览器寻求变通的备用方案,使之能兼容那些不被原生支持的浏览
器。
针对每个浏览器版本,我们会标注相对应的属性在哪个版本号中开
始支持。一些CSS3特性需要添加相应浏览器的渲染引擎的前缀才会生
效,我们将会在后面的章节中依次介绍各浏览器的渲染引擎的前缀名
称,以及CSS3特性在对应浏览器下的写法。
在阅读本书时有些约定,有必要在这里先说明。
·W3C表示万维网联盟(World Wide Web Consortium),是制定
Web官方标准和规范(如CSS3)的组织。
·初始值(即默认值)是用户不显式声明时元素所具有的属性值。
需特别指明的是,属性是元素的本质,而不是用户自定义的属性。·IE 8及以下版本代表IE 8、IE 7和IE 6。
·Webkit引擎内核的浏览器是指Safari(包括移动版本和桌面版
本)、Google Chrome和其他近期使用版本的Webkit页面渲染引擎的浏
览器,其私有属性的前缀是-webkit-。
·Gecko引擎内核的浏览器是指Mozilla,常指的是Firefox浏览器,其
私有属性的前端缀是-moz-。
·Presto引擎内核的浏览器是指Opera,其私有属性的前缀是-o-。
·KHTML引擎内核的浏览器是指Konqueror,其私有属性的前缀是-
khtml-。
·Trident引擎内核的浏览器是指Internet Explorer,其私有属性的前缀
是-ms-。
·在没有特别声明的情况下,本书所指的浏览器仅适用于Windows系
统,不适用于Mac系统和移动端。
·偶尔会碰到“所有浏览器”这个说法,此时仅代表目前所有广泛使
用的浏览器,而并非字面意义所涵盖的那些可能仅占零星市场份额的不
知名的浏览器。
·“HTML”指HTML和XHTML这两种语言。·“CSS”指CSS2.1规范,除非特别声明。
·本书所有案例代码都是以HTML 5的DTD编写。但这仅仅表示使用
短小精悍的HTML 5文档声明,还有更简洁的meta字
符编码、style和script标签。没有使用任何HTML 5的新标签,比如
section、header、nav和article,所以页面可以在IE 8及以下版本正常运
行,可以在自己的页面里将其更换为喜欢的标签。所有示例也同样兼容
HTML 4.01和XHTML 1.0。
·为了方便阅读,本书中的部分案例代码仅提供了CSS样式代码和局
部HTML代码,所有CSS实例代码必须置于一个外部样式文件或HTML
文档的标签内。
·由于CSS3技术还在不断的完善与更新中,建议根据本书提供的参
考地址,获取有关CSS3最新信息与更新。
勘误和支持
由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或
者不准确的地方,恳请读者批评指正。为此,我特意创建了一个在线支
持站点http:www.w3cplus.combook-comment.html。大家可以将书中的
错误发布在页面的评论中,遇到任何问题,可以留言或者发送邮件到
w3cplus@hotmail.com,我将尽量提供最满意的答案。大家还可以关注微信公众账号ednote进入“第三极社区”微社区与广大读者和本书作者互
动。书中的全部源文件可以从华章网站(http:www.hzbook.com)下
载,我也会将相应的功能及时更正。期待能够得到你们真挚反馈。
致谢
首先要感谢好友林小志,是他让我鼓起勇气开始写这本书,也是他
一直督促我的进度,并一直鼓励我坚持到最后。同时感谢
W3CPlus(http:www.w3cplus.com)社区的所有同学们一直以来对我的
默默支持。
感谢机械工业出版社的编辑杨福川给我这样一个机会,在一年多的
时间中始终支持我的写作,你的鼓励和帮助引导我能顺利完成全部书
稿。同时也要感谢白宇编辑辛苦的付出,帮助我修改书中不足。
感谢我的爸爸、妈妈将我培养成人,并时时刻刻为我灌输着信心和
力量!也要感谢我的弟弟,引导我进入这个行业,让我有机会从事喜欢
的工作。感谢太太罗群英和儿子一直以来对我的支持,让我有一个安心
写作的环境,并给我足够的信心去完成这本拙作。
谨以此书献给我最亲爱的家人、朋友以及众多热爱W3CPlus社区的
朋友们!第1章 揭开CSS3的面纱
如果关注前端方面的技术,那么对CSS一定不会陌生,你肯定听说
过CSS3。在使用CSS3之前,应该对这个新一代样式表语言的来龙去脉
有个基本了解。
在本章中,你将知道CSS3与CSS2.1的区别,以及当前市面上主流
浏览器、移动端浏览器对CSS3支持的情况。对于尚不完全支持CSS3的
浏览器,将会为大家引入一个渐进增强的概念,用一些CSS方法来模拟
CSS3的实现方法。最后给大家简单介绍一些CSS3引入的新特性及其未
来的前景。1.1 什么是CSS3
CSS3并不是一门新的语言。如果接触过CSS就知道,CSS是创建网
页的另一个独立但并非不重要的一部分。CSS是种层叠样式表,是一种
样式语言,用来告诉浏览器如何渲染你的Web页面。
CSS3是CSS规范的最新版本,在CSS2.1的基础上增加了很多强大的
新功能,以帮助开发人员解决一些问题,并且不再需要非语义标签、复
杂的JavaScript脚本以及图片,例如圆角功能、多背景、透明度、阴影等
功能等。CSS2.1是单一的规范,而CSS3被划分成几个模块组,每个模
块组都有自己的规范。这样的好处是整个CSS3的规范发布不会因为部
分难缠的部分而影响其他模块的推进
[1]。
现在先来看看CSS3激动人心的新特性。
[1] 更详细的信息可参见http:www.w3.orgStyleCSScurrent-
work.en.html,其中介绍了CSS3具体划分为多少个模块组、CSS3所有模
块组目前所处的状态,以及将在什么时候发布。1.1.1 CSS3的新特性
CSS3规范并不是独立的,它重复了CSS的部分内容,但在其基础上
进行了很多的增补与修改。CSS3与之前的几个版本相比,其变化是革
命性的,虽然它的部分属性还不能够被浏览器完美的支持,但却让我们
看到网页样式发展的前景,让我们更具有方向感、使命感。
CSS3新特性非常多,这里挑选一些被浏览器支持较为完美、更具
实用性的新特性。
1.强大的CSS3选择器
使用过jQuery的人都知道,jQuery的选择器功能强大,使用方便,CSS3选择器和jQuery选择器非常类似。允许设计师通过选择器直接指定
需要的HTML元素,而不需要在HTML中添加不必要的类名、ID等。使
用CSS3选择器,能在Web的制作中更完美地做到结构与表现分离,设计
师能轻松地设计出简洁、轻量级的Web页面,并且能更好地维护和修改
样式。
2.抛弃图片的视觉效果
Web中最常见的效果包括圆角、阴影、渐变背景、半透明、图片边框等。而这样的视觉效果在CSS中都是依赖于设计师制作图片或者
JavaScript脚本来实现的。CSS3的一些新特性可以用来创建一些特殊的
视觉效果,后面的章节将为大家展现这些新特性是如何实现这些视觉效
果。
3.背景的变革
如果说CSS中的背景给你带来太多的限制,那么CSS3将带来革命性
的变化。CSS3不再局限于背景色、背景图像的运用,新特性中添加了
多个新的属性值,例如background-origin、background-clip、background-
size,此外,还可以在一个元素上设置多个背景图片。这样,如果要设
计比较复杂的Web页面效果,就不再需要使用一些多余标签来辅助实现
了。举个例子,要实现CSS中的滑动门效果,在CSS中基本上要添加2~
3个额外的标签来辅助实现,那么CSS3中的这些新特性能够在一个标签
中完成同等的效果。
4.盒模型变化
盒模型在CSS中是重中之重,CSS中的盒模型只能实现一些基本的
功能,对于一些特殊的功能需要基于JavaScript来实现。而在CSS3中这
一点得到了很大的改善,设计师可以直接通过CSS3来实现。例如,CSS3中的弹性盒子,这个属性将给大家引入一种全新的布局概念,能
轻而易举实现各种布局,特别是在移动端的布局,它的功能更是强大。大家将在第7章、第8章见识它的神功。
5.阴影效果
阴影主要为分两种:文本阴影(text-shadow)和盒子阴影(box-
shadow)。文本阴影在CSS中已经存在,但没有得到广泛的运用。CSS3
延续了这个特性,并进行了新的定义,该属性提供了一种新的跨浏览器
方案,使文本看起来更醒目。盒子阴影的实现在CSS中就有点苦不堪
言,为了实现这样的效果,需要新增标签、图片,而且效果还不一定完
美。CSS3的box-shadow将打破这种局面,可以轻易地为任何元素添加盒
子阴影。
6.多列布局与弹性盒模型布局
CSS3引入了几个新的模块用于更方便地创建多列布局。
“多列布局”(Multi-column Layout)模块描述了如何像报纸、杂志
那样,把一个简单的区块拆分成多列,第9章为大家介绍这个模块的运
用。“弹性盒模型布局”(Flexible Box Layout)模块能让区块在水平、垂
直方向对齐,能让区块自适应屏幕大小,相对于CSS的浮动布局、inline-block布局、绝对定位布局来说,它显得更加方便与灵活。缺点
是,这两个模块在一些浏览器中还不被支持,但随着技术的发展革新,这一刻终将到来。7.Web字体和Web Font图标
浏览器对Web字体有诸多限制,Web Font图标对于设计师来说更奢
侈。CSS3重新引入@font-face,对于设计师来说无疑是件好事。@font-
face是链接服务器上字体的一种方式,这些嵌入的字体能变成浏览器的
安全字体,不再担心用户没有这些字体而无法正常显示的问题,从此告
别用图片代替特殊字体的设计时代。
8.颜色与透明度
CSS3颜色模块的引入,实现了制作Web效果时不再局限于RGB和
十六进制两种模式。CSS3增加了HSL、HSLA、RGBA几种新的颜色模
式。在Web设计中,能轻松实现某个颜色变得再亮一点或者再暗一点。
其中HSLA和RGBA还增加了透明通道,能轻松地改变任何一个元素的
透明度。另外,还可以使用opacity属性来制作元素的透明度。从此制作
透明度不再依赖图片或者JavaScript脚本了。
9.圆角与边框的新法
圆角是CSS3中使用最多的一个属性,原因很简单:圆角比直线性
更美观,而且不会与设计产生任何冲突。与CSS制作圆角不同之处是,CSS3无须添加任何标签元素与图片,也不需借用任何JavaScript脚本,一个属性就能搞定。对于边框,在CSS中仅局限与边框的线型、粗细、颜色的设置,如果需要特殊的边框效果,只能使用背景图片来模仿。
CSS3的border-image属性使元素边框的样式变得丰富起来,还可以使用
该属性实现类似background的效果,对边框进行扭曲、拉伸和平铺等。
10.盒容器的变形
在CSS时代,让某个元素变形是一个可望而不可及的想法,为了实
现这样的效果,需要写大量的JavaScript代码。CSS3引进了一个变形属
性,可以在2D或者3D空间里操作盒容器的位置和形状,例如旋转、扭
曲、缩放或者移位。我们把这些效果称为“变形”,大家将在第11章体验
这些新特性。
11.CSS3过渡与动画交互效果
CSS3的“过渡”(transition)特性能在Web制作中实现一些简单的动
画效果,让某些效果变得更具流线性、平滑性。而CSS3“动
画”(animation)特性能够实现更复杂的样式变化,以及一些交互效
果,而不需要使用任何Flash或JavaScript脚本代码。
12.媒体特性与Responsive布局
CSS3的媒体特性可以实现一种响应式(Responsive)布局,使布局
可以根据用户的显示终端或设备特征选择对应的样式文件,从而在不同的显示分辨率或设备下具有不同的布局渲染效果,特别是在移动端上的
实现更是一种理想的做法。1.1.2 CSS3的发展状况
通过对CSS3新特性的简单介绍,大家可能要问,这些超炫的特性
什么时候才能成为标准并最终发布呢?其实CSS3的每一个模块都有它
自己的更新(进度表)时间,如图1-1所示
[1]
,大家可以从这个图上看
到CSS3的当前发展的详细进度。图1-1 CSS3所有模块发展进度图1-1 (续)
Web开发者希望在CSS3标准规范发布之前就能使用这些新特性,而
它们的使用还受限于不同的浏览器,只有浏览器完全支持了,才能完全
使用这些新特性。目前,CSS3还不是最终的标准,有很多浏览器支持不够完美,那
么现在可以使用CSS3吗?
[1] http:www.w3.orgStyleCSScurrent-work.en.html上的截图。还可以到
地址http:meiert.comenindicescssproperties(CSS各属性查询表)查看
各个CSS属性属于哪个CSS版本,以及各个属性对应的默认值,以便更
清楚地知道哪些属性是在CSS基础上添加的。1.1.3 现在能使用CSS3吗
从图1-1中可以看出,CSS3还在不断完善中,很多功能还处于草稿
阶段,但部分模块进入了“候选推荐”状态,这说明在Web设计中完全可
以使用这些模块。即使有一些模块还处于“工作草案状态”,也可以尝试
着使用,只有不断将新的CSS技术运用到实际工作中,才能发现应用这
些新技术所面临的真正挑战,以便W3C更好地完善它们,从而更好地、有效地促使它们成为真正的标准。
你应该了解哪些可用,哪些还不能使用。换句话说,在实际工作开
发中可以先运用相对稳定的CSS3特性,并确保不会对尚不支持这些特
性的浏览器造成影响。做到明智的使用,而不是盲目地滥用CSS3新特
性。1.1.4 使用CSS3有什么好处
与CSS相比,使用CSS3有什么好处呢?最明显的就是CSS3能让页
面看起来非常炫、非常酷,使网站设计锦上添花,但它的好处远远不止
这些。在大多数情况下,使用CSS3不仅有利于开发与维护,还能提高
网站的性能。与此同时,还能增加网站的可访问性、可用性,使网站能
适配更多的设备,甚至还可以优化网站SEO,提高网站的搜索排名结
果。下面介绍CSS3特有的好处。
1.减少开发与维护成本
为什么说CSS3能减少开发与维护的成本呢?先来看一个实例。一
个圆角效果,在CSS中需要添加额外的HTML标签,使用一个或者更多
图片来完成,而使用CSS3只需要一个标签、一个border-radius属性就能
完成。这样,CSS3技术能把你从绘图、切图和优化图片的工作中解救
出来。
如果后续需要调整这个圆角的弧度或者圆角的颜色,使用CSS,要
从头绘图、切图才能完成,而使用CSS3几秒就完成这些工作。
CSS3还能使你远离一大堆的JavaScript脚本代码或者Flash,你不再
需要花大把时间去写脚本或者寻找合适的脚本插件并修改以适配你的网站特效。
最后,有些CSS3技术还能帮你对页面进行“减肥”,让结构更加“苗
条”。你不用为了达到一个效果而嵌套很多DIV和类名,这样能有效地
提高工作效率、减少开发时间、降低开发成本。例如,制作一个重叠的
背景效果,在CSS中需要添加DIV标签和类名,在不同的DIV中放一张
背景图,现在可以使用CSS3的多背景和背景尺寸等新特性,在一个DIV
标签中完成这些工作。
2.提高页面性能
很多CSS3技术通过提供相同的视觉效果而成为图片的“替代品”,换
句话说,在进行Web开发时,减少多余的标签嵌套,以及图片的使用数
量,意味着用户要下载的内容将会更少,页面加载也会更快。另外,更
少的图片、脚本和Flash文件让Web站点减少HTTP请求数,这是提升页
面加载速度的最佳方法之一。而使用CSS3制作图形化网站无需任何图
片,极大地减少HTTP的请求数量,并且提升页面的加载速度。当然,这取决于采用CSS3特性来代替什么技术,同样还要看如何使用CSS3特
性。例如CSS3的动画效果,能够减少对JavaScript和Flash文件的HTTP请
求,但可能要求浏览器执行很多的工作来完成这个动画效果的渲染,这
有可能导致浏览器响应缓慢,致使用户流失。因此,在使用一些复杂的
特效时,大家需要考虑清楚。不过这样的现象毕竟为数不多。其实很多CSS3技术能够在任何情况下都大幅提高页面的性能。就这一条足以让
我们使用CSS3。1.2 浏览器对CSS3的支持状况
CSS3给我们带来众多全新的设计体验,但有一个问题值得考虑
——浏览器对CSS3特性的支持情况如何?因为页面最终离不开浏览器
来渲染,并不是所有浏览器都完全支持CSS3的特性。有时候花时间写
的效果只能在特定的浏览器下有效,意味着只有部分用户能欣赏到,这
样的工作变得没有什么意义。例如,使用CSS3制作背景仅在WebKit内
核的浏览器下有效果。
想知道用户能够体验到哪些CSS3的新特性,必须了解当前浏览器
对CSS3特性的支持程度如何。1.2.1 经典回顾:图说浏览器大战
“浏览器大战”一词在20世纪末产生,网景(Netscape)与微软展开
了第一次互联网大战,结果是网景以失败告终,微软荣登冠军宝座。
2004年11月Firefox 1.0诞生,浏览器开始了历史上的第二次大战,IE的地位受到了以Firefox为首的其他浏览器的挑战。2008年12月Google
Chrome的诞生,向市场投放了一颗重磅炸弹。此时的IE也开始了版本的
升级,虽然IE将版本更新到了IE 8,但面对Firefox和Google Chrome两个
强劲的对手,其更新的步伐依然显得太慢,在2010年IE的市场份额跌至
50%。而后,Chrome不断更新,其市场份额快速上升。2012年5月,终
于夺得浏览器的霸主之位。
这不是浏览器大战的结束,仅仅是IE时代在落幕而已。随着移动设
备的风靡,移动版本Safari的市场份额在一年的时间里迅速增长。也
许,第三次浏览器大战的战场并不在桌面领域,而是在移动领域。
市面上浏览器品种繁多,从而引发浏览器的市场大战,这场战争持
续了近二十年,但从未有结束战争的趋势。浏览器之争提示了Web浏览
器的影响,比如Chrome和Firefox对浏览器霸主IE发起的挑战,随着移动
终端的出现,另一个强有力的竞争者——移动Safari网络浏览器也加入
这场无休止的浏览器之战。下面一起来看看monetate.com
[1]
绘制的浏览器战争图,如图1-2所示。图1-2 浏览器之争
[1] 详情见http:monetate.cominfographicbrowser-wars-the-end-or-just-
thebeginning。1.2.2 浏览器的市场份额
图1-2所示只是主流浏览器的市场之争,国内还有许多国产的浏览
器,例如QQ浏览器、奇虎360浏览器、移动端的UC浏览器等。用户在
使用什么样的浏览器,这个使用率始终无法准确地掌握,因为这个概率
始终都在变化,下面详细看看国内和全球浏览器的市场份额。
1.浏览器国内市场份额
首先关注国内浏览器的市场份额,一起来看百度统计的浏览器市场
份额图,如图1-3所示。图1-3 国内浏览器市场份额
国内浏览器市场位列三甲的分别是IE 6.0、奇虎360和IE 7.0,三个
版本的浏览器流量份额占据总市场份额的61.1%左右,但IE 6~8在国内
依然处于绝对领先态势,但相比两年前,IE浏览器在国内也步入下滑的
态势,这给前端开发人员带来一丝的希望。更值得庆幸的是,360浏览
器在5月发起了狙击IE 6浏览器的活动,并开始在最新版本的360安全浏
览器中内置了IE 8内核,这无疑给国内的前端工程师带来了一丝清凉。2.浏览器全球市场份额
2012年5月可以说是浏览器厂商激烈竞争的一个月,一度报出
Google Chrome浏览器全球份额首次超越IE浏览器,夺得浏览器全球霸
主之位。全球浏览器市场份额发生了哪些变化呢?首先看StatCounter的
统计数据
[1]
,如图1-4所示。
图1-4中数据显示,在2012年5月,IE浏览器已失去了浏览器的霸主
之位,被Chrome取代,Firefox也在市场上位居第三。如果将其他版本的
Firefox、Chrome、Safari和Opera加在一起计算,IE所占的市场份额确实
已少于这些符合标准的现代浏览器。通常,我在自己站点上发布一个新
的CSS3技巧时,很多朋友会问:“它在IE浏览器上能运行吗?效果又是
什么样?”根据图1-4的显示结构,是不是应该换一种思维,是不是询
问“这个效果在Firefox上看起来怎么样”更有意义呢?
那么是不是可以忽略IE呢?其实不然,IE虽然在全球市场份额不再
是霸主,但在国内它依然是主流,特别是IE 6依然占有半壁江山,这也
致使我们不能不考虑使用IE的用户群。图1-4 主流浏览器市场份额(2012年1月~2012年6月)
制作一个网站,其内容应该在任何浏览器上都是可用的,不应该忽
略或抛弃某些用户。虽然制作一个令人满意的Web页面不是一件难事,但是为了一个渐渐消失的用户群体花费大量的时间与成本确实不是一个
明智之举。
正如前面所讲,CSS3对网站意义何在,应该是由用户群体来确
定,而不是由浏览器的市场份额所决定。换而言之,除非网站统计结果
与这个结果有很大的出入,否则就不应该继续认为非IE用户仅仅是个不
需要特别关注的边缘化群体。在非IE浏览器与IE浏览器上花费的时间同
样重要。而CSS3能很容易地让网站在非IE浏览器下更棒,而且少数情
况之下这些CSS3属性也适合IE浏览器。[1] 想了解其他来源的统计结果,可以访问维基百科的“Usage share of
web browsers”页面
(http:en.wikipedia.orgwikiUsage_share_of_web_browsers)。1.2.3 主流浏览器对CSS3支持状况
幸运的是,CSS3特性大部分都已经有了很好的浏览器支持度(后
面在讲每个CSS3特性之时,会列出各浏览器对其支持情况)。各大主
流浏览器对CSS3的支持越来越完善,曾经让多少前端开发人员心碎的
IE也开始挺进CSS3标准行列。当然,即使CSS3标准制定完成,现代浏
览器要普及到大部分用户也是一个相当漫长的过程。如果现在就要使用
CSS3来美化你的站点,有必要对各大主流浏览器对其新技术的支持情
况有一个全面的了解。
本节分别在Mac和Windows两个平台介绍Chrome、Firefox、Safari、Opera和IE五大主流浏览器对CSS3新特性和CSS3选择器的支持情况。
1.主流浏览器对CSS3属性的支持状况
图1-5所示是findmebyIP
[1]
为五大主流浏览器对CSS3属性支持状况
的统计图。
从图中可以看出,CSS3中的Overflow Scrolling属性还没有浏览器支
持,其他属性在Mac系统下,Chrome、Safari都支持,其次支持较好的
是Firefox和Opera。而在Windows系统下,WebKit内核浏览器表现的非
常优秀,其次是Firefox和Opera。同时IE也迎头追赶,在IE 9中支持部分CSS3特性。据说,IE 10将会更完美地支持CSS3。图1-5 主流浏览器对CSS3属性支持状况
2.主浏览浏览器对CSS3选择器的支持状况图1-6所示是findmebyIP
[1]
为五大主流浏览器对CSS3选择器的支持
状况统计图。值得高兴的是,图中除了IE 6~8有“×”之外,其他浏览器
都是“√”,全部支持CSS3选择器。
从图1-5和图1-6中可以清楚地知道,无论是在Mac系统下还是在
Windows系统下,Google Chrome和Safari对CSS3特性的支持度是最好
的,而IE系列是最差的,特别是IE 6~8。原因很简单,IE 6~8发布于
CSS3完善之前。
差别各异的浏览器致使页面在不同的浏览器之中渲染并不一致。特
别是在当今这个信息发达的时代,设备、屏幕、浏览器的形态越来越丰
富,人们的习惯设置也不尽相同,因此想再创造一个在任何地方都表现
一致的页面就更加的不可能。只要你关注如何提供实用、易用、好用的
页面,这点表面上的差异就显得不重要。而这种想法就是接下来要介绍
的“渐进增强”。图1-6 主流浏览器对CSS3选择器的支持状况
[1] 详情见http:fmbip.comlitmus。
[2] 详情见http:fmbip.comlitmus。1.3 渐进增强
第一次听到“渐进增强”(Progressive Enhancement)一词是在前端
重构交流会上。渐进增强并不是一种技术,而是一种开发的方式,更是
一种Web设计理念。首先思考一个问题:“网站是否需要在每个浏览器
中看起来都一样?”带着这个问题来看渐进增强。1.3.1 渐进增强与优雅降级
正如前面所言,渐进增强是一种开发方式,更是一种设计理念。在
编写Web页面时,首先保证最核心的功能实现,让任何低端的浏览器都
能看到站点内容,然后考虑使用高级但非必要的CSS和JavaScript等增强
功能,为当前和未来的浏览器提供更好的支持,给用户带来更好的体
验。
在设计的时候,先考虑低端设备用户能否看到所有内容,然后在此
基础之上为高端用户进行设计。不仅为高端设备用户提供一个完美的应
用,也要为不同性能级别设备的用户设计不同级别的不那么完美的应
用。这称为“优雅降级”。
目前而言,虽对“渐进增强”有所了解的人很多,但是要说普及或深
入还远远没到时候。在大家平时的设计思维中有一种极强的固定思维,也就是想让网站在各个浏览器下表现一致。这种出发点本身并没有什么
问题,但是这样会让领先的浏览器的优势无法充分显示出来。
因此,从今天开始要改变制作Web站点的思维,让网站能优雅降
级,目标应该是——向尽可能多的用户提供尽可能优质的用户体验。这
跟用户访问网站使用方式无关,无论通过iPhone、高端的桌面系统、Kindle,还是阅读器,用户都能得到尽可能独特且完美的体验。1.3.2 渐进增强的优点
“向尽可能多的用户提供尽可能优质的用户体验”这一目标听起来相
当不错。有的人制作Web站点时报怨,IE怎样才具有CSS3的效果。诚
然,我们不使用渐进增强也可以实现,如为一些旧浏览器提供一套兼容
方案,确保页面与现代浏览器保持一致。简单来说就是在支持CSS3的
浏览器中使用CSS3特性,在不支持的浏览器中另写一套样式来模拟
CSS3效果,实现让网站在所有浏览器都一样。
可以说,通过这种方法只是让低版本的浏览器渲染页面更好看一
点,并没有得到实质性的提高。
因此,如果网站始终无法做到一模一样,为什么不使用CSS3技术
使它在现代浏览器上看起来更靓丽呢?当然,某些CSS3特性在不支持
的浏览器中是“无法模拟”的,但使用渐进增强,就无须为了让网站适合
所有人而放弃这些技术。
CSS的渐进增强有别于CSS的hack。hack是浏览器厂商的一种手
法,用来增强自己的竞争,而渐进增强起到锦上添花之效。所以前者应
该尽量避免使用,而后者应该适当使用。
就样式而言,渐进增强的对象是一些现代浏览器,渐进增强的一些属性主要是CSS3的一些特性,或是IE低级版本不支持的一些属性,或
是其他一些特殊情况。淘宝网上的一个例子如图1-7所示。
这里采用了CSS3的旋转特性transform,鼠标移上去时,三角会实现
旋转的动画效果,并改变方向。之前,要实现图1-7所示的旋转效果,需要一大串JavaScript脚本。而使用transform仅仅需要几行代码。
site-nave .menu:hover .menu-hd {
-webkit-transform: rotate(180deg);
-webkit-transform-origin-x:50%;
-webkit-transform-origin-y:30%;
-moz-transform: rotate(180deg);
-moz-transform-origin-x:50%;
-moz-transform-origin-y:30%;
-o-transform: rotate(180deg);
-o-transform-origin-x:50%;
-o-transform-origin-y:30%;
-ms-transform: rotate(180deg);
-ms-transform-origin-x:50%;
-ms-transform-origin-y:30%;
transform:rotate(180deg);
transform-origin-x: 50%;
transform-origin-y: 30%;
}图1-7 渐进增强制作旋转三角
采用渐进增强能给现代浏览器用户一个更好的体验,在不支持
CSS3的IE浏览器也能正常使用,只不过体验会大打折扣。
以上只是一个简单的例子,本书后面还会介绍CSS3渐进增强的案
例,例如text-shadow文字阴影、border-radius圆角属性、box-shadow盒阴
影属性、CSS3渐变背景和CSS3选择器等。1.4 CSS3的现状及未来
了解到使用CSS3会带来很多好处,哪些网站在使用CSS3?这很容
易,打开计算机随处可见。既然这样,就一起来看几个网站吧。1.4.1 谁在使用CSS3
首先看看新浪微博
[1]
,其中最明显的是圆角的应用,在发表评论
的地方还使用了内阴影属性,如图1-8所示。
图1-8 新浪微博
Google的UI也使用了大量CSS3特性,看主版面的Button效果,这个按钮使用了CSS3的阴影、圆角和渐变三种属性,如图1-9所示。
图1-9 Google的按钮效果
接下来介绍的Twitter网站(http:twitter.com)可以说把CSS3运用得
出神入化,登录界面如图1-10所示。图1-10 Twitter登录界面
整个界面都是使用CSS3完成的,没有使用任何图片、背景渐变、圆角、文本框发光效果等。这些都是CSS3特性的一气呵成,这不得不
让我们为CSS3强大的特性折服。
国内外使用CSS3特性制作网站的案例越来越多,特别是一些优秀
的个人站点,更是运用得出神入化。
[1] 网页地址为http:weibo.com311290005。1.4.2 CSS3的未来
CSS3无疑对Web前端开发带来质的飞跃。虽然目前CSS3还没有完
全普及,而且浏览器也不完全支持,但对于我们积极地去学习和实践并
不矛盾,掌握和学习CSS3将是大势所趋。CSS3将是引导我们进入编写
网页精彩世界的先驱技术。开发人员能够更轻松地创建功能强大、易于
维护网站。
随着旧版浏览器所占市场份额逐渐减少,学习CSS3技术将更有价
值。这是作为一位优秀前端开发人员所必须掌握的技术之一,也是前端
开发人员的大势所趋。
当然,学习一门新技术不能跟风,需要理性思考,这种理性思考并
不表示对新技术的畏缩,同时也应该明白学习新技术可能会遇到的困难
和风险。只有这样,才能更好地驾驭CSS3。1.5 本章小结
本章主要介绍了什么是CSS3、CSS3的发展状况、新特性,以及浏
览器对CSS3的支持状况;同时,引进了渐进增强的设计理念。通过本
章的学习,可以对CSS3有一个初步的了解。学习CSS3的好处有很多,它能让你始终处于Web设计的前沿,增加你的职业技能和竞争力,还能
帮助你缩短与顶级设计师或开发者的距离。马上开始使用,然后不断磨
砺你的技巧并在职业的道路上不断前进。第2章 CSS3选择器
W3C在CSS3的工作草案中把选择器独立出来成为一个模块
[1]。实
际上,选择器是CSS知识中的重要部分之一,也是CSS的根基。利用
CSS选择器能不改动HTML结构,通过添加不同的CSS规则得到不同样
式的网页。
[1] 详情参考http:www.w3.orgTRcss3-selectors。2.1 认识CSS选择器
要使某个样式应用于特定的HTML元素,首先需要找到该元素。在
CSS中,执行这一任务的表现规则称为CSS选择器。它为获取目标元素
之后施加样式提供了极大的灵活性。实际上,CSS2.1已经为大家提供了
很多常用的选择器,基本能够满足Web设计师常规的设计需求。2.1.1 CSS3选择器的优势
既然CSS选择器能满足Web常规的设计需求,CSS3选择器有什么优
势呢?CSS3选择器不但支持所有CSS选择器,同时新增了独有的选择
器,对拥有一定CSS基础的开发人员来说,学习CSS3选择器是件非常容
易的事。
CSS3选择器在常规选择器的基础上新增了属性选择器、伪类选择
器、过滤选择器。可以帮助您在开发中减少对HTML类名或ID名的依
赖,以及对HTML元素的结构依赖,使编写代码更加简单轻松。如果学
习过jQuery选择器,学习CSS3选择器会更容易,因为CSS3选择器在某
些方面和jQuery选择器是完全一样的,唯一遗憾的是部分旧版本浏览器
并不支持CSS3新增的部分选择器。下面一起来体验CSS3选择器。2.1.2 CSS3选择器分类
根据所获取页面中元素的不同,把CSS3选择器分为五大类:基本
选择器、层次选择器、伪类选择器、伪元素和属性选择器。其中,伪类
选择器又分为六种:动态伪类选择器、目标伪类选择器、语言伪类、UI
元素状态伪类选择器,结构伪类选择器和否定伪类选择器,如图2-1所
示。
图2-1 CSS3选择器分类
下面分别介绍这十种选择器。2.2 基本选择器
基本选择器是CSS中使用最频繁、最基础,也是CSS中最早定义的
选择器,这部分选择器在CSS1中就定义了,为了便于初学者温故而知
新,不妨回顾CSS的基础选择器。2.2.1 基本选择器语法
通过基本选择器可以确定HTML树形结构中大多数的DOM元素节
点。其详细说明如表2-1所示。
表2-1 基本选择器语法2.2.2 浏览器兼容性
浏览器兼容性如表2-2所示。从表中可以看出,浏览器对基本选择
器都是一路绿灯通行,大家可以放心使用。
表2-2 基本选择器的浏览器兼容性2.2.3 实战体验:使用基本选择器
下面通过示例介绍各种基本选择器在页面中的使用方法。
页面中有一个列表,其中第一个和最后一个设置了ID属性,其中部
分列表项设置了class类名,通过基本选择器来改变元素的样式风格。
新创建一个HTML文件2-1.html,加入以下代码。
使用CSS3
基本选择器
图解CSS3:核心技术与案例实战
大漠 著
ISBN:978-7-111-46920-9
本书纸版由机械工业出版社于2014年出版,电子版由华章分社(北京华
章图文信息有限公司)全球范围内制作与发行。
版权所有,侵权必究
客服热线:+ 86-10-68995265
客服信箱:service@bbbvip.com
官方网址:www.hzmedia.com.cn
新浪微博 @研发书局
腾讯微博 @yanfabook目录
前言
第1章 揭开CSS3的面纱
1.1 什么是CSS3
1.1.1 CSS3的新特性
1.1.2 CSS3的发展状况
1.1.3 现在能使用CSS3吗
1.1.4 使用CSS3有什么好处
1.2 浏览器对CSS3的支持状况
1.2.1 经典回顾:图说浏览器大战
1.2.2 浏览器的市场份额
1.2.3 主流浏览器对CSS3支持状况
1.3 渐进增强
1.3.1 渐进增强与优雅降级
1.3.2 渐进增强的优点
1.4 CSS3的现状及未来
1.4.1 谁在使用CSS3
1.4.2 CSS3的未来
1.5 本章小结
第2章 CSS3选择器2.1 认识CSS选择器
2.1.1 CSS3选择器的优势
2.1.2 CSS3选择器分类
2.2 基本选择器
2.2.1 基本选择器语法
2.2.2 浏览器兼容性
2.2.3 实战体验:使用基本选择器
2.2.4 通配选择器
2.2.5 元素选择器
2.2.6 ID选择器
2.2.7 类选择器
2.2.8 群组选择器
2.3 层次选择器
2.3.1 层次选择器语法
2.3.2 浏览器兼容性
2.3.3 实战体验:使用层次选择器选择元素
2.3.4 后代选择器
2.3.5 子选择器
2.3.6 相邻兄弟选择器
2.3.7 通用兄弟选择器
2.4 动态伪类选择器2.4.1 动态伪类选择器语法
2.4.2 浏览器兼容性
2.4.3 实战体验:美化按钮
2.5 目标伪类选择器
2.5.1 目标伪类选择器语法
2.5.2 浏览器兼容性
2.5.3 实战体验:制作手风琴效果
2.6 语言伪类选择器
2.6.1 语言伪类选择器语法
2.6.2 浏览器兼容性
2.6.3 实战体验:定制不同语言版本引文风格
2.7 UI元素状态伪类选择器
2.7.1 UI元素状态伪类选择器语法
2.7.2 浏览器兼容性
2.7.3 实战体验:Bootstrap的表单元素UI状态
2.8 结构伪类选择器
2.8.1 重温HTML的DOM树
2.8.2 结构伪类选择器语法
2.8.3 浏览器兼容性
2.8.4 结构伪类选择器中的n是什么
2.8.5 结构伪类选择器的使用方法详解2.8.6 实战体验:CSS3美化表格
2.9 否定伪类选择器
2.9.1 否定伪类选择器语法
2.9.2 浏览器兼容性
2.9.3 实战体验:改变图片效果
2.10 伪元素
2.10.1 伪元素::first-letter
2.10.2 伪元素::first-line
2.10.3 伪元素::before和::after
2.10.4 伪元素::selection
2.11 属性选择器
2.11.1 属性选择器语法
2.11.2 浏览器兼容性
2.11.3 属性选择器的使用方法详解
2.11.4 实战体验:创建个性化链接样式
2.12 本章小结
第3章 CSS3边框
3.1 CSS3边框简介
3.1.1 边框的基本属性
3.1.2 边框的类型
3.1.3 谁在使用CSS3边框3.2 CSS3边框颜色属性
3.2.1 border-color属性的语法及参数
3.2.2 浏览器兼容性
3.2.3 border-color属性的优势
3.2.4 实战体验:立体渐变边框效果
3.3 CSS3图片边框属性
3.3.1 border-image属性的语法及参数
3.3.2 border-image属性使用方法
3.3.3 浏览器兼容性
3.3.4 border-image属性的优势
3.3.5 实战体验:按钮圆角阴影效果
3.4 CSS3圆角边框属性
3.4.1 border-radius属性的语法及参数
3.4.2 border-radius属性使用方法
3.4.3 浏览器兼容性
3.4.4 border-radius属性的优势
3.4.5 实战体验:制作特殊图形
3.5 CSS3盒子阴影属性
3.5.1 box-shadow属性的语法及参数
3.5.2 box-shadow属性使用方法
3.5.3 浏览器兼容性3.5.4 box-shadow属性的优势
3.5.5 实战体验:制作3D搜索表单
3.6 本章小结
第4章 CSS3背景
4.1 CSS3背景属性简介
4.1.1 背景的基本属性
4.1.2 与背景相关的新增属性
4.2 CSS3背景原点属性
4.2.1 background-origin属性的语法及参数
4.2.2 background-origin属性使用方法
4.2.3 浏览器兼容性
4.3 CSS3背景裁切属性
4.3.1 background-clip属性的语法及参数
4.3.2 background-clip属性使用方法
4.3.3 浏览器兼容性
4.4 CSS3背景尺寸属性
4.4.1 background-size属性的语法及参数
4.4.2 background-size属性使用方法
4.4.3 浏览器兼容性
4.4.4 实战体验:制作全屏背景
4.5 内联元素背景图像平铺循环方式4.6 CSS3多背景属性
4.6.1 CSS3多背景语法及参数
4.6.2 CSS3多背景的优势
4.6.3 浏览器兼容性
4.6.4 实战体验:制作花边框
4.7 本章小结
第5章 CSS3文本
5.1 CSS3文本简介
5.2 CSS3文本阴影属性
5.2.1 text-shadow属性的语法及参数
5.2.2 浏览器兼容性
5.2.3 实战体验:制作立体文本
5.3 CSS3溢出文本属性
5.3.1 text-overflow属性的语法及参数
5.3.2 浏览器兼容性
5.3.3 text-overflow属性使用方法
5.3.4 实战体验:制作固定区域的博客列表
5.4 CSS3文本换行
5.4.1 word-wrap属性
5.4.2 word-break属性
5.4.3 white-space属性5.4.4 文本换行技巧
5.4.5 文本换行技术对比
5.5 本章小结
第6章 CSS3颜色特性
6.1 网页中的色彩特性
6.1.1 网页色彩的表现原理
6.1.2 Web页面的安全色
6.1.3 色彩模式
6.2 CSS3透明属性
6.2.1 opacity属性的语法及参数
6.2.2 opacity浏览器兼容性
6.2.3 实战体验:制作透明过渡色块
6.3 CSS3颜色模式
6.3.1 RGBA颜色模式
6.3.2 HSL颜色模式
6.3.3 HSLA颜色模式
6.3.4 RGBA和HSLA颜色模式之间的选择
6.3.5 RGBAHSLA的IE兼容方案
6.3.6 RGBAHSLA滤镜格式
6.4 本章小结
第7章 CSS3盒模型7.1 CSS盒模型简介
7.1.1 什么是盒模型
7.1.2 重置盒模型解析模式
7.2 CSS3盒模型属性
7.2.1 box-sizing属性的语法及参数
7.2.2 浏览器兼容性
7.2.3 实战体验:box-sizing拯救了布局
7.3 CSS3内容溢出属性
7.3.1 overflow-x和overflow-y属性的语法及参数
7.3.2 浏览器兼容性
7.4 CSS3自由缩放属性
7.4.1 resize属性的语法及参数
7.4.2 浏览器兼容性
7.4.3 实战体验:修改文本域随意调整大小的功能
7.5 CSS3外轮廓属性
7.5.1 outline属性的语法及参数
7.5.2 浏览器兼容性
7.5.3 outline和border的对比
7.5.4 实战体验:模仿边框效果
7.6 本章小结
第8章 CSS3伸缩布局盒模型8.1 Flexbox模型基础知识
8.1.1 CSS中的布局模式
8.1.2 Flexbox模型的功能
8.1.3 Flexbox模型中的术语
8.1.4 Flexbox模型规范状态
8.1.5 Flexbox模型浏览器兼容性
8.1.6 Flexbox模型语法变更
8.2 旧版本Flexbox模型的基本使用
8.2.1 伸缩容器设置display
8.2.2 伸缩流方向box-orient
8.2.3 布局顺序box-direction
8.2.4 伸缩换行box-lines
8.2.5 主轴对齐box-pack
8.2.6 侧轴对齐box-align
8.2.7 伸缩性box-flex
8.2.8 显示顺序box-ordinal-group
8.2.9 实战体验:box制作自适应的三列等高布局
8.3 混合版本Flexbox模型的基本使用
8.3.1 伸缩容器设置display
8.3.2 伸缩流方向flex-direction
8.3.3 伸缩换行flex-wrap8.3.4 伸缩流方向与换行flex-flow
8.3.5 主轴对齐flex-pack
8.3.6 侧轴对齐flex-align
8.3.7 堆栈伸缩行flex-line-pack
8.3.8 伸缩性flex
8.3.9 显示顺序flex-order
8.4 新版本Flexbox模型的基本使用
8.4.1 伸缩容器display
8.4.2 伸缩流方向flex-direction
8.4.3 伸缩换行flex-wrap
8.4.4 伸缩流方向与换行flex-flow
8.4.5 主轴对齐justify-content
8.4.6 侧轴对齐align-items和align-self
8.4.7 堆栈伸缩行align-content
8.4.8 伸缩性flex
8.4.9 显示顺序order
8.5 综合案例:跨浏览器的三列布局
8.6 本章小结
第9章 CSS3多列布局
9.1 CSS3多列布局简介
9.1.1 浏览器兼容性9.1.2 CSS3多列布局的属性
9.2 CSS3多列布局基本属性
9.2.1 columns属性的语法及参数
9.2.2 浏览器兼容性
9.2.3 实战体验:Web页面的多列布局
9.3 CSS3多列布局列宽属性
9.3.1 column-width属性的语法及参数
9.3.2 实战体验:浏览器根据窗口宽度变化调整列数
9.4 CSS3多列布局列数属性
9.4.1 column-count属性的语法及参数
9.4.2 实战体验:显示固定列数
9.5 CSS3多列布局列间距属性
9.5.1 column-gap属性的语法及参数
9.5.2 实战体验:设置列间距
9.6 CSS3多列布局列边框样式属性
9.6.1 column-rule属性的语法及参数
9.6.2 实战体验:设置列边框
9.7 CSS3多列布局跨列属性
9.7.1 column-span属性的语法及参数
9.7.2 实战体验:文章标题跨列显示
9.8 CSS3多列布局列高度属性9.9 本章小结
第10章 CSS3渐变
10.1 CSS3渐变简介
10.1.1 什么是色标
10.1.2 浏览器兼容性
10.2 CSS3线性渐变
10.2.1 CSS3线性渐变语法与参数
10.2.2 CSS3线性渐变的基本用法
10.2.3 自定义CSS3线性渐变
10.2.4 实战体验:CSS3制作渐变按钮
10.3 CSS3径向渐变
10.3.1 CSS3径向渐变语法
10.3.2 CSS3径向渐变的属性参数
10.3.3 CSS3径向渐变的基本用法
10.3.4 实战体验:CSS3径向渐变制作圆形图标按钮
10.4 CSS3重复渐变
10.4.1 CSS3重复线性渐变
10.4.2 CSS3重复径向渐变
10.4.3 实战体验:制作记事本纸张效果
10.5 综合案例:CSS3渐变制作纹理背景
10.6 本章小结第11章 CSS3变形
11.1 CSS3变形简介
11.1.1 CSS变形属性及函数
11.1.2 浏览器兼容性
11.2 CSS变形属性详解
11.2.1 transform属性
11.2.2 transform-origin属性
11.2.3 transform-style属性
11.2.4 perspective属性
11.2.5 perspective-origin属性
11.2.6 backface-visibility属性
11.3 CSS3 2D变形
11.3.1 2D位移
11.3.2 2D缩放
11.3.3 2D旋转
11.3.4 2D倾斜
11.3.5 2D矩阵
11.4 CSS3 3D变形
11.4.1 3D位移
11.4.2 3D缩放
11.4.3 3D旋转11.4.4 3D矩阵
11.5 多重变形
11.5.1 2D多重变形制作立方体
11.5.2 3D多重变形制作立方体
11.6 综合案例:3D变形制作产品信息展示
11.7 本章小结
第12章 CSS3过渡
12.1 CSS3过渡简介
12.1.1 如何创建简单的过渡
12.1.2 浏览器兼容性
12.1.3 CSS3过渡属性
12.2 CSS3过渡子属性详解
12.2.1 指定过渡属性transition-property
12.2.2 指定过渡所需时间transition-duration
12.2.3 指定过渡函数transition-timing-function
12.2.4 指定过渡延迟时间transition-delay
12.2.5 多个CSS3过渡效果
12.3 CSS3触发过渡
12.3.1 伪元素触发
12.3.2 媒体查询触发
12.3.3 JavaScript触发12.4 CSS3过渡技巧
12.4.1 一个完整的过渡
12.4.2 可过渡的属性
12.4.3 优先的过渡属性
12.4.4 过渡的开始和结束为auto
12.4.5 隐式过渡
12.4.6 开关状态的不同过渡方式
12.4.7 几乎无限延迟的过渡
12.4.8 通过硬件加速过渡更加流畅
12.4.9 过渡和伪元素
12.5 综合案例:纯CSS3制作CSS Dock导航效果
12.6 本章小结
第13章 CSS3动画
13.1 CSS3动画简介
13.1.1 浏览器兼容性
13.1.2 CSS3动画属性
13.2 关键帧
13.2.1 @keyframes的作用
13.2.2 @keyframes的语法
13.2.3 浏览器兼容性
13.3 CSS中为元素应用动画13.3.1 使用@keyframes声明动画
13.3.2 调用@keyframes声明的动画
13.4 CSS3动画子属性详解
13.4.1 调用动画animation-name
13.4.2 设置动画播放时间animation-duration
13.4.3 设置动画播放方式animation-timing-function
13.4.4 设置动画开始播放的时间animation-delay
13.4.5 设置动画播放次数animation-iteration-count
13.4.6 设置动画播放方向animation-direction
13.4.7 设置动画的播放状态animation-play-state
13.4.8 设置动画时间外属性animation-fill-mode
13.5 综合案例:全屏Slidershow效果
13.6 本章小结
第14章 媒体特性与Responsive设计
14.1 媒体类型
14.1.1 Media Type设备类型
14.1.2 媒体类型引用方法
14.2 媒体特性
14.2.1 Media Query和CSS属性集合
14.2.2 常用Media Query设备特性
14.2.3 浏览器兼容性14.2.4 Media Query使用方法
14.3 Responsive布局概念
14.3.1 Responsive设计特点
14.3.2 Responsive中的术语
14.3.3 Responsive布局技巧
14.3.4 meta标签
14.4 本章小结
第15章 嵌入Web字体
15.1 @font-face模块介绍
15.1.1 浏览器兼容性
15.1.2 @font-face语法
15.1.3 使用字体图标的优势
15.2 实现@font-face
15.2.1 使用@font-face自定义字体
15.2.2 声明字体来源
15.2.3 创建各种字体
15.2.4 调用字体
15.3 综合案例:将图标转换成Web字体
15.3.1 创建一个图标字体
15.3.2 准备插图
15.3.3 导入到IcoMoon15.3.4 从IcoMoon中导出字体
15.3.5 下载字体文件
15.3.6 调用字体
15.4 本章小结前言
为什么要写这本书
CSS3是在CSS2.1基础上扩展而来,事实上,它还没有完全成熟。
有些专家会告诉你,CSS3现在还用不上,甚至几年之后都不会有成熟
的规范发布。
目前为止CSS3还没有一套成熟的规范,其中的模块也在不断更
新,特别是浏览器对CSS3特性的支持也在不断变化,同时没有足够的
时间去学习和研究W3C官方文档和规范,致使我们学习CSS3变得更为
复杂。
为什么会选择这个时候编写这样一本图书呢?原因很简单。对于希
望Web应用开发者而言,CSS3可以说是众望所归,这也是技术变更的硬
性需求。在实际Web应用中新标准的采纳程度正在以令人目眩的速度不
断地变更着,众多浏览器厂商也在不断加快对CSS3新特性的支持。在
编写这本图书的过程中,我也被迫不断更新书中的浏览器支持表格。
面对自己正在使用的浏览器,大多数用户并不真正了解其具备的功
能有多强大。当然,他们在浏览器自动更新后可能会发现一些细微的界
面变化。但他们可能不知道,新版的浏览器对哪些CSS3特性有所支持。
本书的目标是帮助开发者更好地掌握CSS3的特性,并且将新技术
运用到实际的开发当中,提高自己开发Web程序的水平。
本书面向的读者
·有一定CSS3开发经验的前端工程师。
本书能帮助你系统掌握CSS3的各项知识,提升技术水平和业务能
力。
·从事CSS3开发的前端工程师。
由于CSS3涵盖的新特性非常多,在开发过程中将本书作为速查手
册,提高开发效率。
·前端开发爱好者。
如果还不是一名前端工程师,但是对前端开发非常感兴趣,本书也
能让你对最新的CSS标准和规范有一个系统和全面的认识,为学习前端
知识打下基础。
本书的特色本书最大的特色就是将CSS3特性按模块功能分类,通过理论、图
解、实战的方式向大家阐释CSS3每个特性功能。
·内容全面、丰富、翔实。
由浅到深地讲解了CSS3新特性的语法、特性以及使用技巧。本书
涵盖了CSS3众多功能模块,如CSS3选择器特性、边框模块、文本模
块、颜色模块、UI界面模块、CSS3动画模块、CSS新型盒模型以及CSS
媒体查询、响应式设计等。
·图解方式,直观易懂。
图解的方式是本写的最大特色之一,在描述每一个CSS3特性过程
都配了生动的实战效果,甚至每一步骤都配有相应的效果图。就算是你
对文字理解或者代码理解有所误差,实战效果图能辅助你更好地理解
CSS3每个特性。
·案例丰富,实战性强。
每个CSS3特性都配有实战体验,部分案例来自于实际开发之中。
同时在每个知识点之后,还提供了综合案例。通过实践加强动手能力,更好地掌握CSS3中的每个知识点。
动手实践才是掌握一门新技术最有效的途径。如果能在阅读本书的
过程中逐一亲手实现这些案例,那么在以后的实际开发中自然就会具有相当强的动手能力了。
本书的内容
本书包括15章,通过实例来演示CSS3模块的新特性。
第1章简单介绍什么是CSS3,CSS3的好处是什么,浏览器对CSS3
的支持状况,以及CSS3带来什么新特性,并且引入渐进增强式的概
念。通过对本章的学习,大家可以在一定的程度上知道一些CSS3的故
事。
第2章介绍CSS3选择器。选择器是CSS中的核心部分之一,本章先
阐述CSS2的选择器,再引入CSS3新增的选择器。深入介绍了CSS3新增
选择器的功能及其实用性,还有各浏览器的兼容性。
第3章详细介绍CSS3在边框方面新增的功能特性,比如边框色、图
片边框、边框圆角等,并与CSS2进行了对比。
第4章介绍CSS3背景功能,着重阐述了多背景、背景尺寸、背景原
点方面的使用,以让大家掌握如何使用CSS3背景功能的新特性。
第5章介绍CSS3文本功能。以前大家在网页制作时,只是设置文本
的颜色、字体、字号等。通过对CSS3文本功能的学习,大家还可以运
用文本阴影、文本溢出、文本换行等功能。第6章介绍CSS3颜色特性。大家以前只有在设计软件中使用的颜色
值现在都可以运用,如RGBA、HSL、HSLA、透明度等。
第7章介绍CSS3基础盒模型与用户界面。盒模型是CSS的重中之
重,CSS2盒模型功能只能实现一些基本功能,对于一些特殊的功能需
要借助JavaScript来实现。而在CSS3中这一点将得到很大的改善,可以
通过CSS3来直接实现一些特殊的功能。
第8章介绍CSS3的弹性盒模型,给大家引入一种全新的布局概念,为大家的页面布局带来革命性的变化。
第9章介绍CSS3多列布局。布局在Web中随处可见,多列布局在
CSS2中都是依靠float或者inline-block来实现的,而这两个属性带来的局
限性也是相当大的。CSS3多列布局将会弥补这些不足之处。
第10章介绍CSS3渐变功能。渐变效果在Web中也是一种常见的效
果,以前靠设计师制作图片来完成,不仅增加了设计师的工作量,在页
面中的效果也带来过多的局限制,扩展性也相当差。CSS3渐变不再需
要使用图片来代替这些特殊的效果。
第11章介绍CSS3变形功能。这是一个全新的功能,在CSS2中要实
现需要借助JavaScript。CSS3的变形功能可以直接使用样式实现如旋
转、移位、扭曲、缩放等效果。第12章介绍CSS3过渡功能。大家在Web制作中,使过渡效果不再生
硬,变得细腻、流畅。
第13章介绍CSS3动画功能。
第14章介绍Media Query与Responsive布局。随着移动设备和宽屏浏
览器的普及,单一的设计不能满足Web页面的设计需求,此时CSS3的
Media Query新特性中出现了一个新的布局概念——Responsive。本章中
大家将体会到Media Query与Responsive布局的强大功能。
第15章介绍嵌入Web字体。浏览器仅限于用户在其系统上安装的字
体呈现文本。CSS3使用@font-face改变了这一格局。网站不再受限于少
量字体,如Arial、Verdana、Times和Georgia等。
如何阅读本书
本书结构不是按层进式安排的,章节之间是按CSS3的模块分类,读者阅读本书时无须按照先后顺序进行,可以挑选自己喜欢的章节阅
读。但如果按章节的编排顺序逐章阅读,会更系统、更全面地学习
CSS3,从中获得最大受益。
阅读本书的案例时,尽量不要照抄书中的代码 ,在理解案例的设
计思路基础上,自己动手开发相似功能的应用,并创造出满足自己需求
的功能,举一反三。本书中使用的约定
本书案例已在主流浏览器上进行过测试了。分别是:Firefox 12.0、Google Chrome 19.0.1084.52、Safari 5.17、Opera 11.64、IE 9。
同时在一些广泛使用的旧版本浏览器(如IE 8)上也做了测试。很
多情况下,CSS3的效果也能体现在较低版本上,页面能保持正常阅
读,而且效果也不会太差。对于每一个CSS3特性,将尽可能地为低版
本浏览器寻求变通的备用方案,使之能兼容那些不被原生支持的浏览
器。
针对每个浏览器版本,我们会标注相对应的属性在哪个版本号中开
始支持。一些CSS3特性需要添加相应浏览器的渲染引擎的前缀才会生
效,我们将会在后面的章节中依次介绍各浏览器的渲染引擎的前缀名
称,以及CSS3特性在对应浏览器下的写法。
在阅读本书时有些约定,有必要在这里先说明。
·W3C表示万维网联盟(World Wide Web Consortium),是制定
Web官方标准和规范(如CSS3)的组织。
·初始值(即默认值)是用户不显式声明时元素所具有的属性值。
需特别指明的是,属性是元素的本质,而不是用户自定义的属性。·IE 8及以下版本代表IE 8、IE 7和IE 6。
·Webkit引擎内核的浏览器是指Safari(包括移动版本和桌面版
本)、Google Chrome和其他近期使用版本的Webkit页面渲染引擎的浏
览器,其私有属性的前缀是-webkit-。
·Gecko引擎内核的浏览器是指Mozilla,常指的是Firefox浏览器,其
私有属性的前端缀是-moz-。
·Presto引擎内核的浏览器是指Opera,其私有属性的前缀是-o-。
·KHTML引擎内核的浏览器是指Konqueror,其私有属性的前缀是-
khtml-。
·Trident引擎内核的浏览器是指Internet Explorer,其私有属性的前缀
是-ms-。
·在没有特别声明的情况下,本书所指的浏览器仅适用于Windows系
统,不适用于Mac系统和移动端。
·偶尔会碰到“所有浏览器”这个说法,此时仅代表目前所有广泛使
用的浏览器,而并非字面意义所涵盖的那些可能仅占零星市场份额的不
知名的浏览器。
·“HTML”指HTML和XHTML这两种语言。·“CSS”指CSS2.1规范,除非特别声明。
·本书所有案例代码都是以HTML 5的DTD编写。但这仅仅表示使用
短小精悍的HTML 5文档声明,还有更简洁的meta字
符编码、style和script标签。没有使用任何HTML 5的新标签,比如
section、header、nav和article,所以页面可以在IE 8及以下版本正常运
行,可以在自己的页面里将其更换为喜欢的标签。所有示例也同样兼容
HTML 4.01和XHTML 1.0。
·为了方便阅读,本书中的部分案例代码仅提供了CSS样式代码和局
部HTML代码,所有CSS实例代码必须置于一个外部样式文件或HTML
文档的标签内。
·由于CSS3技术还在不断的完善与更新中,建议根据本书提供的参
考地址,获取有关CSS3最新信息与更新。
勘误和支持
由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或
者不准确的地方,恳请读者批评指正。为此,我特意创建了一个在线支
持站点http:www.w3cplus.combook-comment.html。大家可以将书中的
错误发布在页面的评论中,遇到任何问题,可以留言或者发送邮件到
w3cplus@hotmail.com,我将尽量提供最满意的答案。大家还可以关注微信公众账号ednote进入“第三极社区”微社区与广大读者和本书作者互
动。书中的全部源文件可以从华章网站(http:www.hzbook.com)下
载,我也会将相应的功能及时更正。期待能够得到你们真挚反馈。
致谢
首先要感谢好友林小志,是他让我鼓起勇气开始写这本书,也是他
一直督促我的进度,并一直鼓励我坚持到最后。同时感谢
W3CPlus(http:www.w3cplus.com)社区的所有同学们一直以来对我的
默默支持。
感谢机械工业出版社的编辑杨福川给我这样一个机会,在一年多的
时间中始终支持我的写作,你的鼓励和帮助引导我能顺利完成全部书
稿。同时也要感谢白宇编辑辛苦的付出,帮助我修改书中不足。
感谢我的爸爸、妈妈将我培养成人,并时时刻刻为我灌输着信心和
力量!也要感谢我的弟弟,引导我进入这个行业,让我有机会从事喜欢
的工作。感谢太太罗群英和儿子一直以来对我的支持,让我有一个安心
写作的环境,并给我足够的信心去完成这本拙作。
谨以此书献给我最亲爱的家人、朋友以及众多热爱W3CPlus社区的
朋友们!第1章 揭开CSS3的面纱
如果关注前端方面的技术,那么对CSS一定不会陌生,你肯定听说
过CSS3。在使用CSS3之前,应该对这个新一代样式表语言的来龙去脉
有个基本了解。
在本章中,你将知道CSS3与CSS2.1的区别,以及当前市面上主流
浏览器、移动端浏览器对CSS3支持的情况。对于尚不完全支持CSS3的
浏览器,将会为大家引入一个渐进增强的概念,用一些CSS方法来模拟
CSS3的实现方法。最后给大家简单介绍一些CSS3引入的新特性及其未
来的前景。1.1 什么是CSS3
CSS3并不是一门新的语言。如果接触过CSS就知道,CSS是创建网
页的另一个独立但并非不重要的一部分。CSS是种层叠样式表,是一种
样式语言,用来告诉浏览器如何渲染你的Web页面。
CSS3是CSS规范的最新版本,在CSS2.1的基础上增加了很多强大的
新功能,以帮助开发人员解决一些问题,并且不再需要非语义标签、复
杂的JavaScript脚本以及图片,例如圆角功能、多背景、透明度、阴影等
功能等。CSS2.1是单一的规范,而CSS3被划分成几个模块组,每个模
块组都有自己的规范。这样的好处是整个CSS3的规范发布不会因为部
分难缠的部分而影响其他模块的推进
[1]。
现在先来看看CSS3激动人心的新特性。
[1] 更详细的信息可参见http:www.w3.orgStyleCSScurrent-
work.en.html,其中介绍了CSS3具体划分为多少个模块组、CSS3所有模
块组目前所处的状态,以及将在什么时候发布。1.1.1 CSS3的新特性
CSS3规范并不是独立的,它重复了CSS的部分内容,但在其基础上
进行了很多的增补与修改。CSS3与之前的几个版本相比,其变化是革
命性的,虽然它的部分属性还不能够被浏览器完美的支持,但却让我们
看到网页样式发展的前景,让我们更具有方向感、使命感。
CSS3新特性非常多,这里挑选一些被浏览器支持较为完美、更具
实用性的新特性。
1.强大的CSS3选择器
使用过jQuery的人都知道,jQuery的选择器功能强大,使用方便,CSS3选择器和jQuery选择器非常类似。允许设计师通过选择器直接指定
需要的HTML元素,而不需要在HTML中添加不必要的类名、ID等。使
用CSS3选择器,能在Web的制作中更完美地做到结构与表现分离,设计
师能轻松地设计出简洁、轻量级的Web页面,并且能更好地维护和修改
样式。
2.抛弃图片的视觉效果
Web中最常见的效果包括圆角、阴影、渐变背景、半透明、图片边框等。而这样的视觉效果在CSS中都是依赖于设计师制作图片或者
JavaScript脚本来实现的。CSS3的一些新特性可以用来创建一些特殊的
视觉效果,后面的章节将为大家展现这些新特性是如何实现这些视觉效
果。
3.背景的变革
如果说CSS中的背景给你带来太多的限制,那么CSS3将带来革命性
的变化。CSS3不再局限于背景色、背景图像的运用,新特性中添加了
多个新的属性值,例如background-origin、background-clip、background-
size,此外,还可以在一个元素上设置多个背景图片。这样,如果要设
计比较复杂的Web页面效果,就不再需要使用一些多余标签来辅助实现
了。举个例子,要实现CSS中的滑动门效果,在CSS中基本上要添加2~
3个额外的标签来辅助实现,那么CSS3中的这些新特性能够在一个标签
中完成同等的效果。
4.盒模型变化
盒模型在CSS中是重中之重,CSS中的盒模型只能实现一些基本的
功能,对于一些特殊的功能需要基于JavaScript来实现。而在CSS3中这
一点得到了很大的改善,设计师可以直接通过CSS3来实现。例如,CSS3中的弹性盒子,这个属性将给大家引入一种全新的布局概念,能
轻而易举实现各种布局,特别是在移动端的布局,它的功能更是强大。大家将在第7章、第8章见识它的神功。
5.阴影效果
阴影主要为分两种:文本阴影(text-shadow)和盒子阴影(box-
shadow)。文本阴影在CSS中已经存在,但没有得到广泛的运用。CSS3
延续了这个特性,并进行了新的定义,该属性提供了一种新的跨浏览器
方案,使文本看起来更醒目。盒子阴影的实现在CSS中就有点苦不堪
言,为了实现这样的效果,需要新增标签、图片,而且效果还不一定完
美。CSS3的box-shadow将打破这种局面,可以轻易地为任何元素添加盒
子阴影。
6.多列布局与弹性盒模型布局
CSS3引入了几个新的模块用于更方便地创建多列布局。
“多列布局”(Multi-column Layout)模块描述了如何像报纸、杂志
那样,把一个简单的区块拆分成多列,第9章为大家介绍这个模块的运
用。“弹性盒模型布局”(Flexible Box Layout)模块能让区块在水平、垂
直方向对齐,能让区块自适应屏幕大小,相对于CSS的浮动布局、inline-block布局、绝对定位布局来说,它显得更加方便与灵活。缺点
是,这两个模块在一些浏览器中还不被支持,但随着技术的发展革新,这一刻终将到来。7.Web字体和Web Font图标
浏览器对Web字体有诸多限制,Web Font图标对于设计师来说更奢
侈。CSS3重新引入@font-face,对于设计师来说无疑是件好事。@font-
face是链接服务器上字体的一种方式,这些嵌入的字体能变成浏览器的
安全字体,不再担心用户没有这些字体而无法正常显示的问题,从此告
别用图片代替特殊字体的设计时代。
8.颜色与透明度
CSS3颜色模块的引入,实现了制作Web效果时不再局限于RGB和
十六进制两种模式。CSS3增加了HSL、HSLA、RGBA几种新的颜色模
式。在Web设计中,能轻松实现某个颜色变得再亮一点或者再暗一点。
其中HSLA和RGBA还增加了透明通道,能轻松地改变任何一个元素的
透明度。另外,还可以使用opacity属性来制作元素的透明度。从此制作
透明度不再依赖图片或者JavaScript脚本了。
9.圆角与边框的新法
圆角是CSS3中使用最多的一个属性,原因很简单:圆角比直线性
更美观,而且不会与设计产生任何冲突。与CSS制作圆角不同之处是,CSS3无须添加任何标签元素与图片,也不需借用任何JavaScript脚本,一个属性就能搞定。对于边框,在CSS中仅局限与边框的线型、粗细、颜色的设置,如果需要特殊的边框效果,只能使用背景图片来模仿。
CSS3的border-image属性使元素边框的样式变得丰富起来,还可以使用
该属性实现类似background的效果,对边框进行扭曲、拉伸和平铺等。
10.盒容器的变形
在CSS时代,让某个元素变形是一个可望而不可及的想法,为了实
现这样的效果,需要写大量的JavaScript代码。CSS3引进了一个变形属
性,可以在2D或者3D空间里操作盒容器的位置和形状,例如旋转、扭
曲、缩放或者移位。我们把这些效果称为“变形”,大家将在第11章体验
这些新特性。
11.CSS3过渡与动画交互效果
CSS3的“过渡”(transition)特性能在Web制作中实现一些简单的动
画效果,让某些效果变得更具流线性、平滑性。而CSS3“动
画”(animation)特性能够实现更复杂的样式变化,以及一些交互效
果,而不需要使用任何Flash或JavaScript脚本代码。
12.媒体特性与Responsive布局
CSS3的媒体特性可以实现一种响应式(Responsive)布局,使布局
可以根据用户的显示终端或设备特征选择对应的样式文件,从而在不同的显示分辨率或设备下具有不同的布局渲染效果,特别是在移动端上的
实现更是一种理想的做法。1.1.2 CSS3的发展状况
通过对CSS3新特性的简单介绍,大家可能要问,这些超炫的特性
什么时候才能成为标准并最终发布呢?其实CSS3的每一个模块都有它
自己的更新(进度表)时间,如图1-1所示
[1]
,大家可以从这个图上看
到CSS3的当前发展的详细进度。图1-1 CSS3所有模块发展进度图1-1 (续)
Web开发者希望在CSS3标准规范发布之前就能使用这些新特性,而
它们的使用还受限于不同的浏览器,只有浏览器完全支持了,才能完全
使用这些新特性。目前,CSS3还不是最终的标准,有很多浏览器支持不够完美,那
么现在可以使用CSS3吗?
[1] http:www.w3.orgStyleCSScurrent-work.en.html上的截图。还可以到
地址http:meiert.comenindicescssproperties(CSS各属性查询表)查看
各个CSS属性属于哪个CSS版本,以及各个属性对应的默认值,以便更
清楚地知道哪些属性是在CSS基础上添加的。1.1.3 现在能使用CSS3吗
从图1-1中可以看出,CSS3还在不断完善中,很多功能还处于草稿
阶段,但部分模块进入了“候选推荐”状态,这说明在Web设计中完全可
以使用这些模块。即使有一些模块还处于“工作草案状态”,也可以尝试
着使用,只有不断将新的CSS技术运用到实际工作中,才能发现应用这
些新技术所面临的真正挑战,以便W3C更好地完善它们,从而更好地、有效地促使它们成为真正的标准。
你应该了解哪些可用,哪些还不能使用。换句话说,在实际工作开
发中可以先运用相对稳定的CSS3特性,并确保不会对尚不支持这些特
性的浏览器造成影响。做到明智的使用,而不是盲目地滥用CSS3新特
性。1.1.4 使用CSS3有什么好处
与CSS相比,使用CSS3有什么好处呢?最明显的就是CSS3能让页
面看起来非常炫、非常酷,使网站设计锦上添花,但它的好处远远不止
这些。在大多数情况下,使用CSS3不仅有利于开发与维护,还能提高
网站的性能。与此同时,还能增加网站的可访问性、可用性,使网站能
适配更多的设备,甚至还可以优化网站SEO,提高网站的搜索排名结
果。下面介绍CSS3特有的好处。
1.减少开发与维护成本
为什么说CSS3能减少开发与维护的成本呢?先来看一个实例。一
个圆角效果,在CSS中需要添加额外的HTML标签,使用一个或者更多
图片来完成,而使用CSS3只需要一个标签、一个border-radius属性就能
完成。这样,CSS3技术能把你从绘图、切图和优化图片的工作中解救
出来。
如果后续需要调整这个圆角的弧度或者圆角的颜色,使用CSS,要
从头绘图、切图才能完成,而使用CSS3几秒就完成这些工作。
CSS3还能使你远离一大堆的JavaScript脚本代码或者Flash,你不再
需要花大把时间去写脚本或者寻找合适的脚本插件并修改以适配你的网站特效。
最后,有些CSS3技术还能帮你对页面进行“减肥”,让结构更加“苗
条”。你不用为了达到一个效果而嵌套很多DIV和类名,这样能有效地
提高工作效率、减少开发时间、降低开发成本。例如,制作一个重叠的
背景效果,在CSS中需要添加DIV标签和类名,在不同的DIV中放一张
背景图,现在可以使用CSS3的多背景和背景尺寸等新特性,在一个DIV
标签中完成这些工作。
2.提高页面性能
很多CSS3技术通过提供相同的视觉效果而成为图片的“替代品”,换
句话说,在进行Web开发时,减少多余的标签嵌套,以及图片的使用数
量,意味着用户要下载的内容将会更少,页面加载也会更快。另外,更
少的图片、脚本和Flash文件让Web站点减少HTTP请求数,这是提升页
面加载速度的最佳方法之一。而使用CSS3制作图形化网站无需任何图
片,极大地减少HTTP的请求数量,并且提升页面的加载速度。当然,这取决于采用CSS3特性来代替什么技术,同样还要看如何使用CSS3特
性。例如CSS3的动画效果,能够减少对JavaScript和Flash文件的HTTP请
求,但可能要求浏览器执行很多的工作来完成这个动画效果的渲染,这
有可能导致浏览器响应缓慢,致使用户流失。因此,在使用一些复杂的
特效时,大家需要考虑清楚。不过这样的现象毕竟为数不多。其实很多CSS3技术能够在任何情况下都大幅提高页面的性能。就这一条足以让
我们使用CSS3。1.2 浏览器对CSS3的支持状况
CSS3给我们带来众多全新的设计体验,但有一个问题值得考虑
——浏览器对CSS3特性的支持情况如何?因为页面最终离不开浏览器
来渲染,并不是所有浏览器都完全支持CSS3的特性。有时候花时间写
的效果只能在特定的浏览器下有效,意味着只有部分用户能欣赏到,这
样的工作变得没有什么意义。例如,使用CSS3制作背景仅在WebKit内
核的浏览器下有效果。
想知道用户能够体验到哪些CSS3的新特性,必须了解当前浏览器
对CSS3特性的支持程度如何。1.2.1 经典回顾:图说浏览器大战
“浏览器大战”一词在20世纪末产生,网景(Netscape)与微软展开
了第一次互联网大战,结果是网景以失败告终,微软荣登冠军宝座。
2004年11月Firefox 1.0诞生,浏览器开始了历史上的第二次大战,IE的地位受到了以Firefox为首的其他浏览器的挑战。2008年12月Google
Chrome的诞生,向市场投放了一颗重磅炸弹。此时的IE也开始了版本的
升级,虽然IE将版本更新到了IE 8,但面对Firefox和Google Chrome两个
强劲的对手,其更新的步伐依然显得太慢,在2010年IE的市场份额跌至
50%。而后,Chrome不断更新,其市场份额快速上升。2012年5月,终
于夺得浏览器的霸主之位。
这不是浏览器大战的结束,仅仅是IE时代在落幕而已。随着移动设
备的风靡,移动版本Safari的市场份额在一年的时间里迅速增长。也
许,第三次浏览器大战的战场并不在桌面领域,而是在移动领域。
市面上浏览器品种繁多,从而引发浏览器的市场大战,这场战争持
续了近二十年,但从未有结束战争的趋势。浏览器之争提示了Web浏览
器的影响,比如Chrome和Firefox对浏览器霸主IE发起的挑战,随着移动
终端的出现,另一个强有力的竞争者——移动Safari网络浏览器也加入
这场无休止的浏览器之战。下面一起来看看monetate.com
[1]
绘制的浏览器战争图,如图1-2所示。图1-2 浏览器之争
[1] 详情见http:monetate.cominfographicbrowser-wars-the-end-or-just-
thebeginning。1.2.2 浏览器的市场份额
图1-2所示只是主流浏览器的市场之争,国内还有许多国产的浏览
器,例如QQ浏览器、奇虎360浏览器、移动端的UC浏览器等。用户在
使用什么样的浏览器,这个使用率始终无法准确地掌握,因为这个概率
始终都在变化,下面详细看看国内和全球浏览器的市场份额。
1.浏览器国内市场份额
首先关注国内浏览器的市场份额,一起来看百度统计的浏览器市场
份额图,如图1-3所示。图1-3 国内浏览器市场份额
国内浏览器市场位列三甲的分别是IE 6.0、奇虎360和IE 7.0,三个
版本的浏览器流量份额占据总市场份额的61.1%左右,但IE 6~8在国内
依然处于绝对领先态势,但相比两年前,IE浏览器在国内也步入下滑的
态势,这给前端开发人员带来一丝的希望。更值得庆幸的是,360浏览
器在5月发起了狙击IE 6浏览器的活动,并开始在最新版本的360安全浏
览器中内置了IE 8内核,这无疑给国内的前端工程师带来了一丝清凉。2.浏览器全球市场份额
2012年5月可以说是浏览器厂商激烈竞争的一个月,一度报出
Google Chrome浏览器全球份额首次超越IE浏览器,夺得浏览器全球霸
主之位。全球浏览器市场份额发生了哪些变化呢?首先看StatCounter的
统计数据
[1]
,如图1-4所示。
图1-4中数据显示,在2012年5月,IE浏览器已失去了浏览器的霸主
之位,被Chrome取代,Firefox也在市场上位居第三。如果将其他版本的
Firefox、Chrome、Safari和Opera加在一起计算,IE所占的市场份额确实
已少于这些符合标准的现代浏览器。通常,我在自己站点上发布一个新
的CSS3技巧时,很多朋友会问:“它在IE浏览器上能运行吗?效果又是
什么样?”根据图1-4的显示结构,是不是应该换一种思维,是不是询
问“这个效果在Firefox上看起来怎么样”更有意义呢?
那么是不是可以忽略IE呢?其实不然,IE虽然在全球市场份额不再
是霸主,但在国内它依然是主流,特别是IE 6依然占有半壁江山,这也
致使我们不能不考虑使用IE的用户群。图1-4 主流浏览器市场份额(2012年1月~2012年6月)
制作一个网站,其内容应该在任何浏览器上都是可用的,不应该忽
略或抛弃某些用户。虽然制作一个令人满意的Web页面不是一件难事,但是为了一个渐渐消失的用户群体花费大量的时间与成本确实不是一个
明智之举。
正如前面所讲,CSS3对网站意义何在,应该是由用户群体来确
定,而不是由浏览器的市场份额所决定。换而言之,除非网站统计结果
与这个结果有很大的出入,否则就不应该继续认为非IE用户仅仅是个不
需要特别关注的边缘化群体。在非IE浏览器与IE浏览器上花费的时间同
样重要。而CSS3能很容易地让网站在非IE浏览器下更棒,而且少数情
况之下这些CSS3属性也适合IE浏览器。[1] 想了解其他来源的统计结果,可以访问维基百科的“Usage share of
web browsers”页面
(http:en.wikipedia.orgwikiUsage_share_of_web_browsers)。1.2.3 主流浏览器对CSS3支持状况
幸运的是,CSS3特性大部分都已经有了很好的浏览器支持度(后
面在讲每个CSS3特性之时,会列出各浏览器对其支持情况)。各大主
流浏览器对CSS3的支持越来越完善,曾经让多少前端开发人员心碎的
IE也开始挺进CSS3标准行列。当然,即使CSS3标准制定完成,现代浏
览器要普及到大部分用户也是一个相当漫长的过程。如果现在就要使用
CSS3来美化你的站点,有必要对各大主流浏览器对其新技术的支持情
况有一个全面的了解。
本节分别在Mac和Windows两个平台介绍Chrome、Firefox、Safari、Opera和IE五大主流浏览器对CSS3新特性和CSS3选择器的支持情况。
1.主流浏览器对CSS3属性的支持状况
图1-5所示是findmebyIP
[1]
为五大主流浏览器对CSS3属性支持状况
的统计图。
从图中可以看出,CSS3中的Overflow Scrolling属性还没有浏览器支
持,其他属性在Mac系统下,Chrome、Safari都支持,其次支持较好的
是Firefox和Opera。而在Windows系统下,WebKit内核浏览器表现的非
常优秀,其次是Firefox和Opera。同时IE也迎头追赶,在IE 9中支持部分CSS3特性。据说,IE 10将会更完美地支持CSS3。图1-5 主流浏览器对CSS3属性支持状况
2.主浏览浏览器对CSS3选择器的支持状况图1-6所示是findmebyIP
[1]
为五大主流浏览器对CSS3选择器的支持
状况统计图。值得高兴的是,图中除了IE 6~8有“×”之外,其他浏览器
都是“√”,全部支持CSS3选择器。
从图1-5和图1-6中可以清楚地知道,无论是在Mac系统下还是在
Windows系统下,Google Chrome和Safari对CSS3特性的支持度是最好
的,而IE系列是最差的,特别是IE 6~8。原因很简单,IE 6~8发布于
CSS3完善之前。
差别各异的浏览器致使页面在不同的浏览器之中渲染并不一致。特
别是在当今这个信息发达的时代,设备、屏幕、浏览器的形态越来越丰
富,人们的习惯设置也不尽相同,因此想再创造一个在任何地方都表现
一致的页面就更加的不可能。只要你关注如何提供实用、易用、好用的
页面,这点表面上的差异就显得不重要。而这种想法就是接下来要介绍
的“渐进增强”。图1-6 主流浏览器对CSS3选择器的支持状况
[1] 详情见http:fmbip.comlitmus。
[2] 详情见http:fmbip.comlitmus。1.3 渐进增强
第一次听到“渐进增强”(Progressive Enhancement)一词是在前端
重构交流会上。渐进增强并不是一种技术,而是一种开发的方式,更是
一种Web设计理念。首先思考一个问题:“网站是否需要在每个浏览器
中看起来都一样?”带着这个问题来看渐进增强。1.3.1 渐进增强与优雅降级
正如前面所言,渐进增强是一种开发方式,更是一种设计理念。在
编写Web页面时,首先保证最核心的功能实现,让任何低端的浏览器都
能看到站点内容,然后考虑使用高级但非必要的CSS和JavaScript等增强
功能,为当前和未来的浏览器提供更好的支持,给用户带来更好的体
验。
在设计的时候,先考虑低端设备用户能否看到所有内容,然后在此
基础之上为高端用户进行设计。不仅为高端设备用户提供一个完美的应
用,也要为不同性能级别设备的用户设计不同级别的不那么完美的应
用。这称为“优雅降级”。
目前而言,虽对“渐进增强”有所了解的人很多,但是要说普及或深
入还远远没到时候。在大家平时的设计思维中有一种极强的固定思维,也就是想让网站在各个浏览器下表现一致。这种出发点本身并没有什么
问题,但是这样会让领先的浏览器的优势无法充分显示出来。
因此,从今天开始要改变制作Web站点的思维,让网站能优雅降
级,目标应该是——向尽可能多的用户提供尽可能优质的用户体验。这
跟用户访问网站使用方式无关,无论通过iPhone、高端的桌面系统、Kindle,还是阅读器,用户都能得到尽可能独特且完美的体验。1.3.2 渐进增强的优点
“向尽可能多的用户提供尽可能优质的用户体验”这一目标听起来相
当不错。有的人制作Web站点时报怨,IE怎样才具有CSS3的效果。诚
然,我们不使用渐进增强也可以实现,如为一些旧浏览器提供一套兼容
方案,确保页面与现代浏览器保持一致。简单来说就是在支持CSS3的
浏览器中使用CSS3特性,在不支持的浏览器中另写一套样式来模拟
CSS3效果,实现让网站在所有浏览器都一样。
可以说,通过这种方法只是让低版本的浏览器渲染页面更好看一
点,并没有得到实质性的提高。
因此,如果网站始终无法做到一模一样,为什么不使用CSS3技术
使它在现代浏览器上看起来更靓丽呢?当然,某些CSS3特性在不支持
的浏览器中是“无法模拟”的,但使用渐进增强,就无须为了让网站适合
所有人而放弃这些技术。
CSS的渐进增强有别于CSS的hack。hack是浏览器厂商的一种手
法,用来增强自己的竞争,而渐进增强起到锦上添花之效。所以前者应
该尽量避免使用,而后者应该适当使用。
就样式而言,渐进增强的对象是一些现代浏览器,渐进增强的一些属性主要是CSS3的一些特性,或是IE低级版本不支持的一些属性,或
是其他一些特殊情况。淘宝网上的一个例子如图1-7所示。
这里采用了CSS3的旋转特性transform,鼠标移上去时,三角会实现
旋转的动画效果,并改变方向。之前,要实现图1-7所示的旋转效果,需要一大串JavaScript脚本。而使用transform仅仅需要几行代码。
site-nave .menu:hover .menu-hd {
-webkit-transform: rotate(180deg);
-webkit-transform-origin-x:50%;
-webkit-transform-origin-y:30%;
-moz-transform: rotate(180deg);
-moz-transform-origin-x:50%;
-moz-transform-origin-y:30%;
-o-transform: rotate(180deg);
-o-transform-origin-x:50%;
-o-transform-origin-y:30%;
-ms-transform: rotate(180deg);
-ms-transform-origin-x:50%;
-ms-transform-origin-y:30%;
transform:rotate(180deg);
transform-origin-x: 50%;
transform-origin-y: 30%;
}图1-7 渐进增强制作旋转三角
采用渐进增强能给现代浏览器用户一个更好的体验,在不支持
CSS3的IE浏览器也能正常使用,只不过体验会大打折扣。
以上只是一个简单的例子,本书后面还会介绍CSS3渐进增强的案
例,例如text-shadow文字阴影、border-radius圆角属性、box-shadow盒阴
影属性、CSS3渐变背景和CSS3选择器等。1.4 CSS3的现状及未来
了解到使用CSS3会带来很多好处,哪些网站在使用CSS3?这很容
易,打开计算机随处可见。既然这样,就一起来看几个网站吧。1.4.1 谁在使用CSS3
首先看看新浪微博
[1]
,其中最明显的是圆角的应用,在发表评论
的地方还使用了内阴影属性,如图1-8所示。
图1-8 新浪微博
Google的UI也使用了大量CSS3特性,看主版面的Button效果,这个按钮使用了CSS3的阴影、圆角和渐变三种属性,如图1-9所示。
图1-9 Google的按钮效果
接下来介绍的Twitter网站(http:twitter.com)可以说把CSS3运用得
出神入化,登录界面如图1-10所示。图1-10 Twitter登录界面
整个界面都是使用CSS3完成的,没有使用任何图片、背景渐变、圆角、文本框发光效果等。这些都是CSS3特性的一气呵成,这不得不
让我们为CSS3强大的特性折服。
国内外使用CSS3特性制作网站的案例越来越多,特别是一些优秀
的个人站点,更是运用得出神入化。
[1] 网页地址为http:weibo.com311290005。1.4.2 CSS3的未来
CSS3无疑对Web前端开发带来质的飞跃。虽然目前CSS3还没有完
全普及,而且浏览器也不完全支持,但对于我们积极地去学习和实践并
不矛盾,掌握和学习CSS3将是大势所趋。CSS3将是引导我们进入编写
网页精彩世界的先驱技术。开发人员能够更轻松地创建功能强大、易于
维护网站。
随着旧版浏览器所占市场份额逐渐减少,学习CSS3技术将更有价
值。这是作为一位优秀前端开发人员所必须掌握的技术之一,也是前端
开发人员的大势所趋。
当然,学习一门新技术不能跟风,需要理性思考,这种理性思考并
不表示对新技术的畏缩,同时也应该明白学习新技术可能会遇到的困难
和风险。只有这样,才能更好地驾驭CSS3。1.5 本章小结
本章主要介绍了什么是CSS3、CSS3的发展状况、新特性,以及浏
览器对CSS3的支持状况;同时,引进了渐进增强的设计理念。通过本
章的学习,可以对CSS3有一个初步的了解。学习CSS3的好处有很多,它能让你始终处于Web设计的前沿,增加你的职业技能和竞争力,还能
帮助你缩短与顶级设计师或开发者的距离。马上开始使用,然后不断磨
砺你的技巧并在职业的道路上不断前进。第2章 CSS3选择器
W3C在CSS3的工作草案中把选择器独立出来成为一个模块
[1]。实
际上,选择器是CSS知识中的重要部分之一,也是CSS的根基。利用
CSS选择器能不改动HTML结构,通过添加不同的CSS规则得到不同样
式的网页。
[1] 详情参考http:www.w3.orgTRcss3-selectors。2.1 认识CSS选择器
要使某个样式应用于特定的HTML元素,首先需要找到该元素。在
CSS中,执行这一任务的表现规则称为CSS选择器。它为获取目标元素
之后施加样式提供了极大的灵活性。实际上,CSS2.1已经为大家提供了
很多常用的选择器,基本能够满足Web设计师常规的设计需求。2.1.1 CSS3选择器的优势
既然CSS选择器能满足Web常规的设计需求,CSS3选择器有什么优
势呢?CSS3选择器不但支持所有CSS选择器,同时新增了独有的选择
器,对拥有一定CSS基础的开发人员来说,学习CSS3选择器是件非常容
易的事。
CSS3选择器在常规选择器的基础上新增了属性选择器、伪类选择
器、过滤选择器。可以帮助您在开发中减少对HTML类名或ID名的依
赖,以及对HTML元素的结构依赖,使编写代码更加简单轻松。如果学
习过jQuery选择器,学习CSS3选择器会更容易,因为CSS3选择器在某
些方面和jQuery选择器是完全一样的,唯一遗憾的是部分旧版本浏览器
并不支持CSS3新增的部分选择器。下面一起来体验CSS3选择器。2.1.2 CSS3选择器分类
根据所获取页面中元素的不同,把CSS3选择器分为五大类:基本
选择器、层次选择器、伪类选择器、伪元素和属性选择器。其中,伪类
选择器又分为六种:动态伪类选择器、目标伪类选择器、语言伪类、UI
元素状态伪类选择器,结构伪类选择器和否定伪类选择器,如图2-1所
示。
图2-1 CSS3选择器分类
下面分别介绍这十种选择器。2.2 基本选择器
基本选择器是CSS中使用最频繁、最基础,也是CSS中最早定义的
选择器,这部分选择器在CSS1中就定义了,为了便于初学者温故而知
新,不妨回顾CSS的基础选择器。2.2.1 基本选择器语法
通过基本选择器可以确定HTML树形结构中大多数的DOM元素节
点。其详细说明如表2-1所示。
表2-1 基本选择器语法2.2.2 浏览器兼容性
浏览器兼容性如表2-2所示。从表中可以看出,浏览器对基本选择
器都是一路绿灯通行,大家可以放心使用。
表2-2 基本选择器的浏览器兼容性2.2.3 实战体验:使用基本选择器
下面通过示例介绍各种基本选择器在页面中的使用方法。
页面中有一个列表,其中第一个和最后一个设置了ID属性,其中部
分列表项设置了class类名,通过基本选择器来改变元素的样式风格。
新创建一个HTML文件2-1.html,加入以下代码。
使用CSS3
基本选择器





