HTML是骨架,CSS是装饰,CSS使得网页丰富多彩,它也是Web开发不可或缺的一部分。
同HTML5一样,CSS3也存在兼容性问题,不同浏览器支持情况不同,甚至,特定的浏览器指定了特定CSS属性。
下表是针对不同浏览器需要的特殊前缀:
前缀 | 浏览器 |
---|---|
-moz- | Firefox |
-webkit- | Chrome, Safari |
-ms- | Internet Explorer |
-o- | Opera |
CSS3新特性分为两大类,一是支持了新的选择器,比如伪类:last-child
,:first-child
等等;二是页面渲染方面的新功能。
本文只介绍第二类中比较重要的新特性。
1. Web字体@font-face
CSS3支持自定义字体,只需要在项目中导入字体文件或者文件链接url(常用的有.woff
,.svg
,eot
等格式),样式文件中用@font-face定义字体名,字体文件路径等等。之后,可以在font-familiy属性中使用自定义字体名。
例如,我们在项目中使用google font:
// 定义字体
@font-face {
font-family: 'BadScript';
font-style: normal;
font-weight: 400;
src: local('Bad Script Regular'), local('BadScript-Regular'),
url(../font/googlefonts/rL_b2ND61EQmMOJ8CRr1fhsxEYwM7FgeyaSgU71cLG0.woff) format('woff');
}
// 使用字体
.BadScript {
font-family: 'BadScript', Georgia, "Times New Roman", Times, serif;
}
2. 多栏文本
支持多栏文本有的CSS3属性有:
-
column-count
设置栏数 -
column-width
设置每栏的宽度
3. 媒体查询media
媒体查询media可以取得设备关键信息,如大小,分辨率等等,根据这些信息应用不同样式。
(1)定义样式表外部链接时使用
<head>
<!-- 屏幕显示中使用样式style.css -->
<link media = "screen" href="style.css" />
<!-- 打印页面中使用样式print.css -->
<link media = "print" href="print.css" />
<!-- 在480像素设备且是竖屏情况下应用phone.css -->
<link media = "(max-device-width:480px) and (orientation:portrait)" href="phone.css" />
</head>
(2) CSS样式表中使用
/*窗口宽度介于600像素到700像素直接,使用该样式*/
@media (min-width: 600px) and (max-width: 700px) { ... }
/*窗口宽度小于400像素使用该样式*/
@media (min-width: 400px) { ... }
4.透明度 opacity
注意,opacity
值是小数。
使用opacity
给元素设置透明度,会将背景颜色,文本颜色和边框颜色都变透明。如果只想设置其中一种类型的透明度,可以使用函数ragb(val1, val2, val3, opacity)
。
5. 圆角 border-radius
支持矩形圆角,可以给一个盒子设置四个弧度不同的圆角。
roundBox {
border-top-left-radius: 150px 30px; /* 圆弧 */
border-top-right-radius: 150px 60px;
border-bottom-left-radius: 150px; /* 半圆弧 */
border-bottom-right-radius: 150px;
}
5. 背景盒子
利用background-xxx
几个属性,可以给盒子设置背景图片(应用多个图片,指定图片是否重复,图片位置等信息)。
.bgBox {
/*设置多张背景图片*/
background-image: url("top-left.png"), url("bottom-right.png");
/*背景图片不重复*/
background-repeat: no-repeat, no-repeat;
/*定义背景图片位置*/
background-position: left top, right bottom;
}
6. 阴影盒子
CSS3定义了两种阴影:文字阴影和盒子阴影,分别为text-shadow
和box-shadow
,阴影默认被设置在盒子外部。
该属性值格式为([]
内的是可选项):水平偏移量+垂直偏移量+阴影模糊程度[+阴影延伸范围]+阴影颜色[+inset(在元素内部创建阴影)]。
.box {
box-shadow: 1px 5px 10px 20px blue inset;
}
.text {
text-shadow: 1px 3px 5px green;
}
7. 渐变盒子
渐变是多种颜色混合的效果,有三种渐变:
- 线性渐变:linear-gradient函数
- 径向渐变:radial-gradient函数
目前,需要加浏览器前缀来支持渐变效果,而且,不同浏览器支持函数参数不同:
/*一个从左到右的渐变效果*/
background-image: -moz-linear-gradient(left, $leftColor, $rightColor);
background-image: -ms-linear-gradient(left, $leftColor, $rightColor);
background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0, $leftColor), color-stop(1, $rightColor));
8. 过渡效果 transition
过渡效果有:颜色变换,移动。利用transition
可以让过渡效果更佳平滑。
transition属性值格式为:过渡样式+过渡时间
/*在盒子上应用两个过渡效果,分为针对背景色和文本颜色*/
.box {
transition: background 0.5s, color 0.5s;
}
9. 变换 transform
变换包括移动,缩放,旋转等等,比如45度旋转一个盒子transform: rotate(45deg)
。下面是常用值:
- 旋转
- 2D旋转:rotate(angle)
- 3D旋转:rotate3d(x,y,z,angle)
- 沿着X轴3D旋转:rotateX(angle)
- 沿着Y轴3D旋转:rotateY(angle)
- 沿着Z轴3D旋转:rotateZ(angle)
- 缩放
- 2D缩放:scale(x, y)
- 3D缩放:scale3d(x,y,z)
- 位移
- 2D位移:translate(x,y)
- 3D位移:translate3d(x,y,z)
- 沿着X轴位移:translateX(x)
- 沿着Y轴位移:translateY(x)
- 沿着Z轴位移:translateZ(x)
- 倾斜旋转
- 倾斜旋转:skew(x-angle,y-angle)
- 沿X 轴倾斜旋转:skewX(angle)
- 沿Y 轴倾斜旋转:skewY(angle)
10. 动画 animation
动画设置分为两部分,一是定义动画帧变化;二是应用动画。
定义动画帧变化,一般用百分数把动画分割为若干关键点,声明在keyframes
关键字下,分别定义每个节点的表现形式。
下面是一个W3C官网的例子,该动画有4个节点会发生左偏移和背景色变化(建议加上浏览器前缀)。
@-webkit-keyframes 'wobble' {
0% {
margin-left: 100px;
background: green;
}
40% {
margin-left: 150px;
background: orange;
}
60% {
margin-left: 75px;
background: blue;
}
100% {
margin-left: 100px;
background: red;
}
}
然后用animation
属性应用动画:
.box {
/*动画属性名,也就是前面keyframes定义的动画名*/
animation-name:'wobble';
/*动画持续时间,以s或者ms计算*/
animation-duration: 10s;
/*动画速度曲线*/
animation-timing-function: ease-in-out;
/*动画延迟时间*/
animation-delay: 2s;
/*循环次数,infinite为无限次*/
animation-iteration-count: 10;
/*是否反向播放动画,normal:默认值,正常播放;alternate:反向播放*/
animation-direction: alternate;
}
小结
CSS3新属性非常多,上面10个只是比较常用的和渲染相关的功能,如果需要进一步学习,可以参考W3C或者developer.mozilla。