摘要:本文主要介绍了CSS3的一些新特性。
1 简介
1.1 概述
CSS3是CSS2的升级版本,它在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。
CSS3在未来会按照模块化的方式去发展,官方说明:说明文档
CSS3的新特性如下:
- 新增了更加实用的选择器,例如伪类选择器和伪元素选择器等。
- 新增了更好的视觉效果,例如圆角、阴影、渐变等。
- 新增了丰富的背景效果,例如支持多个背景图片,同时新增了若干个背景相关的属性。
- 新增了全新的布局方案,即弹性盒子。
- 新增了Web字体,可以显示用户电脑上没有安装的字体。
- 增强了颜色,例如HSL、HSLA、RGBA几种新的颜色模式,新增控制元素透明度的属性。
- 增加了2D变形和3D变形,例如旋转、扭曲、缩放、位移等。
- 增加动画与过渡效果,让变形更平滑。
1.2 私有前缀
W3C标准所提出的某个CSS特性,在被浏览器正式支持之前,需要根据浏览器的内核,通过私有前缀来使用该CSS特性,在浏览器正式支持该CSS特性后,就不需要私有前缀了。
如下代码中的-webkit-
就是私有前缀:
1 | div { |
常见浏览器私有前缀:
- Chrome浏览器:-webkit-
- Safari浏览器:-webkit-
- Firefox浏览器:-moz-
- Edge浏览器:-webkit-
- Opera浏览器:-o-
- IE浏览器:-ms-
查询CSS3兼容性的网站:caniuse
注意:
- 在编码时,不用过于关注浏览器私有前缀,因为主流浏览器都支持常用的CSS3新特性。
- 即便是为了老浏览器而加前缀,也可以借助现代的构建工具,比如webpack工具,自动添加私有前缀。
2 增强
2.1 新增长度单位
新增长度单位:
- rem:根元素字体大小的倍数,只与根元素字体大小有关,根元素就是
html
元素 - vw:视口宽度的百分之多少,10vw就是视口宽度的10%
- vh:视口高度的百分之多少,10vh就是视口高度的10%
- vmax:视口宽高中大的那个的百分之多少
- vmin:视口宽高中小的那个的百分之多少
2.2 新增颜色表示
CSS3新增了三种颜色设置方式,分别是RGBA、HSL、HSLA,参考:CSS2入门-5-2-颜色
2.3 新增选择器
CSS3新增的选择器有伪类选择器和伪元素选择器,参考:CSS2入门-3-4-高级选择器
2.4 新增盒子属性
2.4.1 盒子宽高
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
resize | 是否允许用户设置盒子宽高,需要和overflow 属性配合使用 |
none:不允许(默认值) both:允许用户设置盒子宽高 horizontal:只允许用户设置盒子宽度 vertical:只允许用户设置盒子高度 |
2.4.2 怪异盒子
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
box-sizing | 设置盒模型的类型 |
content-box:width 和height 设置的是盒子内容区的大小(默认值)border-box: width 和height 设置的是盒子总大小(怪异盒子) |
2.4.3 盒子阴影
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
box-shadow | 添加阴影 |
h-shadow:水平阴影的位置,必填,填写数值,可以为负值 v-shadow:垂直阴影的位置,必填,填写数值,可以为负值 blur:可选,模糊距离,填写数值 spread:可选,阴影的外延值,填写数值 color:可选,阴影的颜色,填写颜色代码 inset:可选,将外部阴影改为内部阴影,填写 inset 固定字符串none:没有阴影(默认值) |
语法:
1 | box-shadow: 水平位置 垂直位置 模糊距离 外延值 颜色 inset; |
注意:
- 只有先设置
blur
属性,才能再设置spread
属性,只存在spread
属性会被当做blur
属性。
2.4.4 不透明度
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
opacity | 添加透明效果 | 0到1之间的小数,0是完全透明,1表示完全不透明 |
2.5 新增背景属性
2.5.1 背景尺寸
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background-size | 设置背景的尺寸 |
用长度值指定背景图片宽高,不允许负值 用百分比指定背景图片宽高,不允许负值 auto:背景图片的真实大小(默认值) contain:将背景图片等比缩放,包含在容器内,保证背景在容器内完整显示 cover:将背景图片等比缩放,覆盖到容器内,保证容器内全都有背景显示 |
2.5.2 背景原点
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background-origin | 设置背景的原点 |
padding-box:从padding区域开始显示背景图像(默认值) border-box:从border区域开始显示背景图像 content-box:从content区域开始显示背景图像 |
2.5.3 背景裁剪
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background-clip | 设置背景的向外裁剪的区域 |
border-box:从border区域开始向外裁剪背景(默认值) padding-box:从padding区域开始向外裁剪背景 content-box:从content区域开始向外裁剪背景 text:只在文字上显示背景,前提是 color 属性值为transparent透明色 |
2.5.4 背景附着
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background-attachment | 设置背景在视口内的附着方式,是否跟随页面的滚动条滚动,是否跟随元素的滚动条滚动 |
scroll:背景相对于元素固定,不跟随元素的滚动条滚动,会跟随页面的滚动条滚动(默认值) fixed:背景相对于视口固定,不跟随元素的滚动条滚动,不跟随页面的滚动条滚动 local:背景相对于元素内容固定,会跟随元素的滚动条滚动,会跟随页面的滚动条滚动 |
2.5.5 颜色渐变
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background-image | 设置背景的渐变颜色 |
linear-gradient:线性渐变,沿直线渐变 radial-gradient:径向渐变,沿弧线渐变 repeating-linear-gradient:循环线性渐变,在没有发生渐变的位置,继续进行线性渐变 repeating-radial-gradient:循环径向渐变,在没有发生渐变的位置,继续进行径向渐变 |
示例:
1 | /* 线性渐变,默认从上到下渐变 */ |
2.5.6 复合属性
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
background | 设置背景复合属性 | 包含全部背景属性,空格分隔 |
语法:
1 | background: 颜色 图片地址 重复方式 定位 / 尺寸 原点 裁剪方式; |
注意:
- 原点和裁剪方式的取值相同,如果只写一个值,则表示都设置,如果写了两个值,前面的是原点,后面的是裁剪方式。
- 尺寸必须写在定位的后面,并且用
/
分开。
2.5.7 多背景图
CSS3允许元素设置多个背景图片。
示例:
1 | background: url(images/bg-lt.png) no-repeat left top, |
2.6 新增边框属性
2.6.1 边框圆角
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
border-radius | 复合属性,将盒子边框的四个角变为圆角,通过设置半径控制圆角范围 | 长度值,支持分别设置四个角的不同半径 |
border-top-left-radius | 设置左上角圆角半径 | 长度值,支持分别设置水平半径和垂直半径 |
border-top-right-radius | 设置右上角圆角半径 | 长度值,支持分别设置水平半径和垂直半径 |
border-bottom-left-radius | 设置左下角圆角半径 | 长度值,支持分别设置水平半径和垂直半径 |
border-bottom-right-radius | 设置右下角圆角半径 | 长度值,支持分别设置水平半径和垂直半径 |
2.6.2 边框外轮廓
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
outline-width | 外轮廓的宽度 | 长度值 |
outline-color | 外轮廓的宽度 | 颜色代码 |
outline-style | 外轮廓的风格 |
none:无轮廓(默认值) dotted:点状轮廓 dashed:虚线轮廓 solid:实线轮廓 double:双线轮廓 |
outline-offset | 设置外轮廓与边框的距离,正负值都可以设置 | 长度值 |
outline | 复合属性 | 可以包含除outline-offset 之外的其他样式,空格分隔 |
2.7 新增文本属性
2.7.1 文本阴影
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
text-shadow | 给文本添加阴影 |
h-shadow:水平阴影的位置,必填,填写数值,可以为负值 v-shadow:垂直阴影的位置,必填,填写数值,可以为负值 blur:可选,模糊距离,填写数值 color:可选,阴影的颜色,填写颜色代码 none:没有阴影(默认值) |
语法:
1 | box-shadow: 水平位置 垂直位置 模糊距离 颜色; |
2.7.2 文本换行
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
white-space | 设置文本换行方式 |
normal:文本超出边界自动换行,文本中的换行被浏览器识别为一个空格(默认值) pre:原样输出,与 pre 元素的效果相同,超出元素边界不换行pre-wrap:原样输出,超出元素边界自动换行 pre-line:原样输出,超出元素边界自动换行,只识别文本中的空格,首尾的空格会忽略 nowrap:强制不换行 |
2.7.3 文本溢出
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
text-overflow | 设置文本内容溢出时的呈现模式 |
clip:当内联内容溢出时,将溢出部分裁切掉(默认值) ellipsis:当内联内容溢出块容器时,将溢出部分替换为 ... |
注意:
- 要使得
text-overflow
属性生效,块容器必须显式定义overflow
属性值为非visible
的其他值,同时设置white-space
属性值为nowrap
。
2.7.4 文本修饰
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
text-decoration | 复合属性,升级了文本修饰 | 包含其他样式,空格分隔 |
text-decoration-line | 设置文本装饰线的位置 |
none:指定文字无装饰(默认值) underline:指定文字的装饰是下划线 overline:指定文字的装饰是上划线 line-through:指定文字的装饰是贯穿线 |
text-decoration-style | 设置文本装饰线条的形状 |
solid:实线(默认) double:双线 dotted:点状线条 dashed:虚线 wavy:波浪线 |
text-decoration-color | 设置文本装饰线条的颜色 | 颜色代码 |
2.7.5 文本描边
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
-webkit-text-stroke-width | 设置文字描边的宽度 | 长度值 |
-webkit-text-stroke-color | 设置文字描边的颜色 | 颜色代码 |
-webkit-text-stroke | 复合属性,设置文字描边宽度和颜色 | 包含其他样式,空格分隔 |
注意:
- 文字描边功能仅
webkit
内核浏览器支持。
2.8 新增字体属性
2.8.1 基本用法
可以通过@font-face
指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了。
基础语法:
1 | @font-face { |
兼容语法:
1 | @font-face { |
2.8.2 定制字体
中文的字体文件很大,使用完整的字体文件不现实,通常针对某几个文字进行单独定制。
可使用阿里Web字体定制工具:阿里Web字体定制
2.8.3 字体图标
好处:
- 相比图片更加清晰,因为字体图标是矢量图,不会在放大后失真。
- 灵活性高,更方便改变大小、颜色、风格等。
- 兼容性好,IE也能支持。
常用字体图标库:
- Font Awesome,优点是版权清晰,缺点是数量比较少,官网地址:Font Awesome
- 阿里图标,优点是数量多,种类多,缺点是版权不清晰,并且需要登录,官网地址:阿里图标官网
Font Awesome字体图标使用步骤:
- 下载并解压。
- 将css和webfonts移动到项目中,css用于声明字体图标名称使用的字体,webfonts中包含了实现图标样式的字体文件。
- 将all.css引入到网页中:
html 1
<link rel="stylesheet" href="./fa/css/all.css">
- 使用图标字体。
Font Awesome字体图标使用方式:
- 方式一:在元素(通常是
i
元素)中使用class
属性,通过样式和名称使用,样式支持简写:html 1
2<i class="fa-solid fa-car"></i>
<i class="fas fa-car"></i> - 方式二:通过CSS样式选择器选中元素后,通过伪元素设置编码和字体使用,支持颜色和外边距等其他样式:
css 1
2
3
4
5
6
7li::before{
content: '\f1b9';
font-family: 'Font Awesome 5 Free';
font-weight: 900;
color: blue;
margin-right: 10px;
} - 方式三:还可以通过实体的方式使用,不过不太常用:
html 1
<div class="fas"></div>
Font Awesome字体图标说明:
- 免费版的样式有
solid
和brands
,分别代表实心图标和品牌图标,solid
样式同类的高级样式还有regular
等样式,不过这些高级样式是收费的。 solid
样式对应Font Awesome 5 Free
字体,brands
对应Font Awesome 5 Brands
字体。- 名称和编码可以在官网查到,每个图标的名称和编码一般是不同的。
阿里图标使用方式:
- 方式一:下载到本地,参考下载后的说明文档使用即可,方法和Font Awesome类似,也有三种方式。
- 方式二:在线使用,引入阿里服务器上的文件,其他和下载到本地类似。
2.9 新增对象属性
2.9.1 元素位置
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
object-position | 设置对象元素的原点 |
使用两个维度定位,空格分隔,有多种方式:
|
2.5.3 元素裁剪
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
object-fit | 设置对象元素的向外裁剪的区域 |
fill:对象被填充,对象将被拉伸以适应内容框(默认值) contain:对象被包含,对象将被保持比例缩放以适应内容框,宽高比不匹配时被添加黑边 cover:对象被覆盖,对象将被保持比例缩放以适应内容框,宽高比不匹配时被裁剪 none:被替换的内容将保持其原有的尺寸 |
3 变形
3.1 2D变形
3.1.1 坐标系
在学习2D变形和3D变形之前,需要先了解CSS中的坐标系。
原点:
- 默认在盒子的左上角,包括边框但不包括外边距。
中心:
- 默认在盒子的几何中心,即两条对角线的交点。
维度:
- 坐标原点的横向被看作X轴,正值在坐标原点往右,负值在坐标原点往左。
- 坐标原点的纵向被看作Y轴,正值在坐标原点往下,负值在坐标原点往上。
- 坐标原点垂直于屏幕的方向被看作Z轴,正值是从坐标原点向屏幕外的方向,负值是从坐标原点向屏幕里的方向。
注意:
- 因为行内元素不存在宽度和高度,所以2D和3D对行内元素无效。
- 在3D场景下,因为无法观察Z轴,元素也不存在厚度,所以看到的是元素从3D到2D的投影。
3.1.2 位移
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 改变元素的位置,参考坐标原点 |
translateX:设置X轴位移,支持指定长度值和百分比,百分比参考的是自身宽度 translateY:设置Y轴位移,支持指定长度值和百分比,百分比参考的是自身宽度 translate:一个值代表X轴,两个值分别代表X轴和Y轴,逗号分隔 |
示例:
1 | transform: translateX(30px) translateY(40px); |
和相对定位的比较:
- 位移与相对定位的相同:都不脱离文档流,不会影响到其它元素。
- 位移与相对定位的区别:位移的百分比值参考的是其自身,相对定位的百分比值参考的是其父元素。
- 浏览器针对位移有优化,处理位移的效率比相对定位更高。
位移配合定位,可实现子元素在父元素中同时水平居中和垂直居中。示例:
1 | .parent { |
3.1.3 缩放
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 改变元素的大小,参照中心默认是元素的中心 |
scaleX:设置X轴的缩放比例,1表示不缩放,大于1表示放大,小于1表示缩小 scaleY:设置Y轴的缩放比例,1表示不缩放,大于1表示放大,小于1表示缩小 scale:一个值代表X轴和Y轴,两个值分别代表X轴和Y轴,逗号分隔 |
示例:
1 | transform: scaleX(50%) scaleY(50%); |
注意:
- 支持负数,如果设为
-1
会将原来的元素镜像显示,但几乎不用,因为容易产生误解。 - 借助缩放,可实现小于12px的文字。
3.1.4 旋转
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 让元素发生旋转,参照中心默认是元素的中心 |
rotateZ:设置2D旋转的角度值,绕Z轴旋转,正值顺时针,负值逆时针 rotate:一个值代表2D旋转,正值顺时针,负值逆时针 |
示例:
1 | transform: rotateZ(30deg); |
3.1.5 扭曲
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 让元素发生拉扯变形 |
skewX:设置元素在X轴扭曲的角度值,不改变宽度,正值左上角向左同时右下角向右,负值左上角向右同时右下角向左 skewY:设置元素在Y轴扭曲的角度值,不改变高度,正值左上角向上同时右下角向下,负值左上角向下同时右下角向上 skew:一个值代表X轴和Y轴,两个值分别代表X轴和Y轴,逗号分隔 |
示例:
1 | transform: skewX(30deg); |
3.1.6 多重变形
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 复合属性,支持多种变形 | 包含其他样式,空格分隔 |
示例:
1 | transform: translate(50%,50%) scale(50%,50%) rotate(30deg) skew(30deg,30deg); |
注意:
- 如果位移前有缩放,位移的距离需要乘以缩放的倍数,尽量将位移写在前面。
- 如果位移前有旋转,旋转的参照中心不会受位移影响,尽量将旋转写在后面。
3.1.7 变形原点
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform-origin | 设置变形的原点,对于缩放和旋转来说,改变的是参照中心 | 支持长度值、百分比、关键字,一个值跟类型有关,另一个取中间点,两个值分别代表X轴和Y轴,空格分隔 |
示例:
1 | transform-origin: left top; |
注意:
- 变形原点对位移的影响是看不出来效果的,对缩放和旋转的影响是能看出来的,将设置的原点作为参照中心。
- 如果只设置了长度值或百分比,则表示X轴,Y轴取中间点,如果只设置了关键字,则根据关键字表示X轴或Y轴,另一个取中间点。
3.2 3D变形
3.2.1 开启3D空间
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform-style | 开启3D空间,元素进行3D变形的前提是父元素开启3D空间 |
flat:让子元素位于此元素的二维平面内,即2D空间(默认值) preserve-3d:让子元素位于此元素的三维空间内,即3D空间 |
示例:
1 | .parent { |
3.2.2 设置景深
景深指的是观察者与z=0
平面的距离,能让发生3D变形的元素产生透视效果,让元素的投影看起来更加立体。
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
perspective | 设置景深,需要给父元素设置 |
none:不指定透视(默认值) 长度值:指定观察者距离 z=0 平面的距离,负数会被认为是默认值none,最小值是0,趋近于0表示观察者贴近平面 |
示例:
1 | .parent { |
注意:
- 如果设置了X轴或Y轴的旋转,可以看到子元素投影受父元素景深的影响。
- 如果未设置X轴或Y轴的旋转,并且Z轴的位移
等于0
,相当于2D平面的子元素,不受父元素景深的影响。 - 如果未设置X轴或Y轴的旋转,并且Z轴的位移
大于0
,此时子元素在投影前面
,随着景深的减少:
3.1 当景深大于位移
时,观察者贴近子元素,子元素投影变大。
3.2 当景深等于或者小于位移
时,观察者贴合子元素
,子元素投影消失。
3.3 当景深小于0
时,取值无效,不指定景深,子元素投影相当于2D平面的子元素。 - 如果未设置X轴或Y轴的旋转,并且Z轴的位移
小于0
,此时子元素在投影后面
,随着景深的减少:
4.1 当景深大于0
时,观察者贴近子元素,子元素投影变小。
4.2 当景深等于0
时,观察者贴合2D平面
,子元素投影相当于2D平面的一个点。
4.3 当景深小于0
时,取值无效,不指定景深,子元素投影相当于2D平面的子元素。
3.2.3 设置透视点位置
透视点位置就是观察者位置,默认的透视点在元素的中心。
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
perspective-origin | 设置透视点位置,需要给父元素设置 | 支持长度值、百分比、关键字,一个值跟类型有关,另一个取中间点,两个值分别代表X轴和Y轴 |
示例:
1 | .parent { |
3.2.4 位移
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 在2D位移的基础上让元素沿Z轴位移,参考坐标原点 |
translateZ:设置Z轴位移,只支持长度值,正值向屏幕外,负值向屏幕里 translate3d:三个值分别代表X轴、Y轴、Z轴,逗号分隔,三个值必须同时设置,否则无效 |
示例:
1 | transform: translateZ(30px); |
注意:
- 在X轴和Y轴的设置支持长度值和百分比,在Z轴的设置只支持长度值,因为元素没有厚度的概念,无法通过百分比确定具体长度值。
- 只有在父元素的
perspective
属性值存在且大于0的情况下,才能设置Z轴的位移。 - 当Z轴的位移大于
perspective
属性值的时候,元素位移到了观察者后面,即观察者看不到元素。
3.2.5 缩放
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 在2D缩放的基础上让元素沿Z轴缩放,参考坐标原点 |
scaleZ:设置Z轴的缩放比例,1表示不缩放,大于1表示放大,小于1表示缩小 scale3d:三个值分别代表X轴、Y轴、Z轴,逗号分隔,三个值必须同时设置,否则无效 |
示例:
1 | transform: scaleZ(0.5); |
注意:
- 在Z轴进行缩放,理论上是对元素的厚度进行缩放,但是元素没有厚度的概念,所以其实是让元素更贴近观察者,效果上类似调整景深。
- 在Z轴放大的效果,类似景深缩小相同倍数的效果,在Z轴缩小的效果,类似景深放大相同倍数的效果。
3.2.6 旋转
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transform | 在2D旋转的基础上让元素沿X轴和Y轴旋转,参照中心默认是元素的中心 |
rotateX:设置X轴旋转的角度值,正值顺时针,负值逆时针 rotateY:设置Y轴旋转的角度值,正值顺时针,负值逆时针 rotate3d:前三个值分别代表X轴、Y轴、Z轴,第四个值代表旋转的角度,四个值必须同时设置,否则无效 |
示例:
1 | transform: rotateX(30deg) rotateY(30deg); |
注意:
- 通过
rotate3d
设置的前三个值描述的是坐标轴的矢量定义,取值是从0到1的矢量值。 - 即使
rotate3d
的前三个值超过1的数值,也会进行内部隐式标准化:
比如rotate3d(9,9,9,30deg)
相当于rotate3d(1,1,1,30deg)
的效果。
比如rotate3d(10,1,0.5,30deg)
相当于rotate3d(1,0.1,0.05,30deg)
的效果。
3.2.7 多重变形
同2D多重变形类似,支持3D参数,建议将位移写前面同时将旋转写后面。
3.2.8 背部可见性
将元素在X轴旋转或者Y轴旋转前显示的一面称为正面,将元素在X轴旋转或者Y轴旋转后显示的一面称为背面。
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
backface-visibility | 设置元素背面在面向用户时是否可见 |
visible:设置元素背面可见,允许显示正面的镜像(默认值) hidden:设置元素背面不可见 |
示例:
1 | <body> |
1 | body { |
注意:
- 父元素作为盒子,两个子元素分别表示前面和后面,开启定位让两个子元素在同一位置,后面元素在前面元素上层,并且不会随父元素旋转而改变。
- 上层元素预先旋转:上层元素在父元素旋转前显示正面,上层元素在父元素旋转后显示背面。所以先将上层元素进行旋转显示背面,这样在父元素旋转后就能显示正面。
- 上层元素背面不可见:将上层元素进行旋转,并且上层元素的背面不可见后,显示下层元素的正面,父元素旋转后,上层元素显示正面,挡住了下层元素,所以下层元素背面是否可见是不影响的。
4 过渡
过渡可以在不使用Flash动画,不使用JavaScript的情况下,让元素从一种样式平滑过渡为另一种样式。
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
transition-property | 定义过渡的属性,只有定义的属性才会有过渡效果 |
none:不过渡任何属性 all:过渡所有能过渡的属性 属性名:逗号分隔的多个属性名 |
transition-duration | 定义过渡的时间,完成过渡需要的时间,时间越长过渡越平滑 |
0:没有过渡时间,即不过渡(默认值) 单个时间:所有属性设置相同时间,单位是s或者ms,表示秒或者毫秒 多个时间:给不同的属性设置不同的时间,逗号分隔,过渡时间和过渡属性对应 |
transition-delay | 定义过渡的延迟,触发过渡后多久开始过渡 | 单位是s或者ms,表示秒或者毫秒 |
transition-timing-function | 定义过渡的类型 |
ease:平滑过渡(默认值) linear:线性过渡 ease-in:过渡由慢到快 ease-out:过渡由快到慢 ease-in-out:过渡由慢到快再到慢 steps(integer,?):接受两个参数的步进函数 step-start:等同于steps(1,start) step-end:等同于steps(1,end) cubic-bezie(number,number,number,number):特定的贝塞尔曲线类型 |
transition | 复合属性,支持多种过渡 | 包含其他样式,空格分隔,如果时间只有一个,则表示过渡时间,如果时间有两个,则最后一个表示过渡延迟 |
注意:
- 不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡。
- 常见的支持过渡的属性有:
颜色
长度值
百分比
z-index
opacity
2D变形属性
3D变形属性
阴影
步进函数:
- 第一个参数是正整数,指定函数的步数。
- 第二个参数是start或end,指定每一步的值发生变化的时间点,默认值为end。
贝塞尔曲线:
- 英文名是Bezier Curve,又称贝兹曲线或贝济埃曲线,可以通过二维坐标系描述曲线。
- 在线制作贝赛尔曲线:cubic-bezier
5 动画
5.1 帧和关键帧
一段动画,就是一段时间内连续播放多个画面,每一张画面称为一帧。同样时间内,播放的帧数越多,画面看起来越流畅。
关键帧指的是,在构成一段动画的若干帧中,起到决定性作用的2-3帧,可以理解为和前后有明显差别的帧。
早期要求1秒内最低24帧,现在主流使用的是60帧,对延迟要求高的应用要求120帧或者更高。
5.2 基本使用
5.2.1 定义动画
定义动画实际上指的是定义一组关键帧,使用@keyframes
设置动画名,可以定义多个动画名,但动画名不可以重复。
有两种方式:
- 简单方式定义:
css 1
2
3
4
5
6
7
8
9
10@keyframes 动画名 {
from {
/*property1:value1*/
/*property2:value2*/
}
to {
/*property1:value1*/
/*property2:value2*/
}
} - 完整方式定义:
css 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20@keyframes 动画名 {
0% {
/*property1:value1*/
}
20% {
/*property1:value1*/
}
40% {
/*property1:value1*/
}
60% {
/*property1:value1*/
}
80% {
/*property1:value1*/
}
100% {
/*property1:value1*/
}
}
5.2.2 给元素应用动画
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
animation-name | 给元素指定具体的动画 | 动画名 |
animation-duration | 设置动画所需时间 | 单位是s或者ms |
animation-delay | 设置动画延迟 | 单位是s或者ms |
示例:
1 | .box { |
5.3 动画的其他属性
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
animation-timing-function | 设置动画的类型 |
ease:平滑过渡(默认值) linear:线性过渡 ease-in:过渡由慢到快 ease-out:过渡由快到慢 ease-in-out:过渡由慢到快再到慢 steps(integer,?):接受两个参数的步进函数 step-start:等同于steps(1,start) step-end:等同于steps(1,end) cubic-bezie(number,number,number,number):特定的贝塞尔曲线类型 |
animation-iteration-count | 设置动画的播放次数 |
数值:动画循环次数 infinite:无限循环 |
animation-direction | 设置动画方向 |
normal:正常方向(默认) reverse:反方向运行 alternate:动画先正常运行再反方向运行,并持续交替运行,要求动画播放至少两次 alternate-reverse:动画先反运行再正方向运行,并持续交替运行,要求动画播放至少两次 |
animation-fill-mode | 设置动画之外的状态 |
forwards:设置对象状态为动画结束时的状态,要求动画播放有限次数 backwards:设置对象状态为动画开始时的状态,要求动画播放有限次数 |
animation-play-state | 设置动画的播放状态 |
running:运动(默认) paused:暂停 |
5.4 复合属性
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
animation | 设置动画复合属性 | 包含其他样式,空格分隔,如果时间只有一个,则表示动画时间,如果时间有两个,则最后一个表示动画延迟 |
注意:
- 设置动画的播放状态的
animation-play-state
属性一般单独使用,复合使用会导致动画重新播放。
和过渡的区别:
- 动画不需要事件触发,过渡需要触发。
- 过渡只有开始和结束两个关键帧,动画可以设置多个关键帧,可以进行更细力度的控制。
6 多列布局
专门用于实现类似于报纸的布局。
分列数量相关属性:
属性名 | 作用 | 取值 |
---|---|---|
column-count | 指定列数 | 数值 |
column-width | 指定列宽,自动计算列数 | 长度值 |
columns | 同时指定列宽和列数,复合属性,取列数少的效果(不推荐使用) | 包含列宽和列数,空格分隔 |
分列边框相关属性:
属性名 | 作用 | 取值 |
---|---|---|
column-rule-style | 设置列与列之间边框的风格 |
none:无(默认值) solid:实线 dashed:虚线 dotted:点线 double:双实线 |
column-rule-width | 设置列与列之间边框的宽度 | 长度值 |
column-rule-color | 设置列与列之间边框的颜色 | 颜色代码,默认黑色 |
column-rule | 设置列与列之间边框,复合属性 | 包含边框样式,空格分隔 |
分列其他属性:
属性名 | 作用 | 取值 |
---|---|---|
column-gap | 设置列边距 | 长度值 |
column-span | 设置是否跨列 | none:不跨列(默认值) all:跨列 |
注意:
- 除了
column-span
属性要在跨列的元素上设置,其他属性都是在父元素上设置的。
7 弹性盒子
7.1 简介
2009年,W3C提出了一种新的盒子模型,即弹性盒子(Flexible Box),也称为伸缩盒模型,它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序、等等。
截止目前,除了在部分IE浏览器不支持,其他浏览器均已全部支持。
弹性盒子的出现,逐渐演变出了一套新的布局方案,即弹性布局,也称为Flex布局。
布局方式:
传统模型布局分三种模型,并且这三种模型紧密联系:
- 流动模型(Flow):默认的网页布局模式,块级元素宽度总是100%,并且自上而下垂直分布,行内元素在包含元素内从左到右水平分布。
- 浮动模型(Float):当元素设置了
float
属性,就会依照浮动的位置进行特定的定位。 - 层模型(Layer):当元素设置了
position
属性,就会依照定位类型进行特定的定位。
因此,传统模型布局主要基于传统盒子模型、display
属性、float
属性、position
属性。
弹性布局可以为盒状模型提供最大的灵活性,目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上。
7.2 弹性容器和弹性项目
将元素的display
属性设为flex
或者设为inline-flex
就可以将该元素变为弹性容器,其子元素(不包括后代元素)会变为弹性项目。
无论原来是哪种元素(块、行内块、行内),一旦成为了弹性项目,全都会块状化,如果没有设置宽度和高度,默认由内容撑开。
7.3 主轴与侧轴
概念:
- 主轴:项目沿主轴排列,默认方向是水平从左到右。
- 侧轴:与主轴垂直的就是侧轴,默认方向是垂直从上到下。
主轴换行相关属性:
属性名 | 作用 | 取值 |
---|---|---|
flex-direction | 设置主轴方向,同时也会影响侧轴方向 |
row:主轴方向水平从左到右(默认值) row-reverse:主轴方向水平从右到左 column:主轴方向垂直从上到下 column-reverse:主轴方向垂直从下到上 |
flex-wrap | 设置主轴换行方式 |
nowrap:主轴不换行,允许项目的高度超出容器,不允许项目的宽度超出容器,宽度超出时会压缩容器(默认值) wrap:主轴自动换行,允许项目的高度超出容器,不允许项目的宽度超出容器,宽度超出时会换行 wrap-reverse:主轴自动反转换行,每一行的项目还是从左到右,但是每行的项目是从下到上排列,向上超出容器 |
flex-flow | 复合属性 | 包含方向和换行,空格分隔 |
水平对齐相关属性:
属性名 | 作用 | 取值 |
---|---|---|
justify-content | 设置主轴对齐方式,控制项目水平位置 |
flex-start:主轴起点对齐(默认值) flex-end:主轴终点对齐 center:水平居中对齐 space-between:主轴水平分散对齐,中间均匀分布,项目紧贴两端(最常用) space-around:中间均匀分布,项目到两端距离与项目之间距离的一半相同 space-evenly:中间均匀分布,项目到两端距离与项目之间距离相同 |
垂直对齐相关属性:
属性名 | 作用 | 取值 |
---|---|---|
align-items | 设置侧轴对齐方式,以单个项目作为控制目标,控制项目在单行的垂直位置 |
flex-start:侧轴起点对齐 flex-end:侧轴终点对齐 center:垂直居中对齐 baseline:每行项目的第一行文字的基线对齐,后面的大字体项目会向上超出容器高度 stretch:如果项目设置了高度,按照起点对齐,如果项目没有设置高度,将占满整个容器的高度(默认值) |
align-content | 设置侧轴对齐方式,以一行项目作为控制目标,控制一行项目在容器的垂直位置,设置换行后有效 |
flex-start:侧轴起点对齐 flex-end:侧轴终点对齐 center:垂直居中对齐 space-between:侧轴垂直分散对齐,中间均匀分布,项目紧贴两端 space-around:中间均匀分布,项目到两端距离与项目之间距离的一半相同 space-evenly:中间均匀分布,项目到两端距离与项目之间距离相同 stretch:如果项目设置了高度,按照起点对齐,如果项目没有设置高度,将占满整个容器的高度(默认值) |
垂直对齐显示逻辑:
- 对于设置换行但是没有超出容器的项目,将容器高度减去每行项目的最大高度,得到的剩余高度按照行数平均分开,和每行项目的最大高度一起作为行高。
- 使用
align-items
属性将每行最大高度和剩余平均高度作为行高,可以控制项目在行高里的垂直对齐,不能控制每行在容器里的垂直对齐。 - 使用
align-content
属性将每行最大高度作为行高,可以控制每行在容器里的垂直对齐,不能控制项目在行高里的垂直对齐。并且只有设置换行,该属性才会生效,即单行无效。
同时水平居中和垂直居中:
- 在父元素开启弹性布局后,在父元素中设置水平居中和垂直居中。示例:
css 1
2
3
4
5
6.outer {
display: flex;
justify-content: center;
align-items: center;
align-content: center;
} - 在父元素开启弹性布局后,在子元素中设置外边距自动。示例:
css 1
2
3
4
5
6
7
8
9.outer {
display: flex;
justify-content: center;
align-items: center;
align-content: center;
}
.inner {
margin: auto;
}
7.4 基准长度
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
flex-basis | 设置项目主轴方向的基准长度,主轴横向会让宽度失效,主轴纵向会让高度失效 |
0:无(默认值) solid:实线 dashed:虚线 dotted:点线 其他长度值:指定长度 |
flex-grow | 设置项目的放大权重,默认为0,即使主轴存在剩余空间,该项目也不放大,前提是主轴存在剩余空间,否则无效 | 放大权重 |
flex-shrink | 设置项目的缩小权重,默认为1,如果空间不足,该项目将会缩小 | 缩小权重 |
flex | 复合属性 |
包含上述属性按照顺序设置,空格分隔:
|
基准长度显示规则:
- 默认情况下,以内容作为宽度显示。
- 如果设置项目宽度,以项目宽度显示。
- 如果设置项目宽度,又设置基准长度,如果内容长度小于基准长度,以基准长度显示,如果内容长度大于基准长度,比较项目宽度和内容长度,以最小值显示。
按权重放大规则:
- 默认为0,表示不放大。
- 如果所有项目设置为1,计算公式:
css 1
项目放大的长度=剩余长度×(1÷项目数量)
- 如果项目设置的不同,计算公式:
css 1
项目放大的长度=剩余长度×(当前权重÷{(每个项目权重)求和})
按权重缩小规则:
- 默认为1,表示如果项目长度超出,就按权重缩小项目长度,计算公式:
css 1
项目缩小的长度=超出长度×[(1×项目长度)÷{(1×每个项目长度)求和}]
- 如果项目设置的不同,计算公式:
css 1
项目缩小的长度=超出长度×[(当前权重×项目长度)÷{(每个项目权重×每个项目长度)求和}]
7.5 单独对齐
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
align-self | 设置单独项目的对齐方式 | 参考align-items 属性,默认值为auto,表示继承父元素的align-items 属性 |
7.6 项目排序
常用属性:
属性名 | 作用 | 取值 |
---|---|---|
order | 设置项目的排列顺序,数值越小,排列越靠前,默认为0,支持负值 | 数值 |
8 BFC
BFC,即块级格式化上下文(Block Formatting Context),可以理解为一种功能,当某些情况下元素满足条件时开启。
开启BFC的元素所具有的特点:
- 元素开启BFC后,其子元素不会再产生外边距塌陷问题。
- 元素开启BFC后,元素自身不会被其他浮动元素所覆盖。
- 元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷。
开启BFC的方式:
- 根元素默认开启。
- 表格相关的元素默认开启。
- 行内块元素默认开启。
- 给
块元素
的overflow
属性设置不为visible
的值后自动开启。 - 将元素改为浮动元素后自动开启。
- 给元素设置绝对定位或固定定位,称为定位元素后自动开启。
- 弹性布局中的弹性项目自动开启。
- 多列布局中的多列容器自动开启。
- 多列布局中的多列项目,将元素的
column-span
属性的值设置为all
后自动开启。 - 将元素的
display
属性的值设置为flow-root
后自动开启。
条