一:CSS3 简介
CSS3 是 CSS2 的升级版本,它在 CSS2 的基础上新增了很多强大的新功能,从而解决一些实际面临的问题,CSS3 在未来会按照模块化的方式去发展, 了解更多 ,CSS3 的新特性如下:
- 新增了更加实用的选择器,例如:动态伪类选择器、目标伪类选择器、伪元素选择器等等。
- 新增了更好的视觉效果,例如:圆角、阴影、渐变等。
- 新增了丰富的背景效果,例如:支持多个背景图片,同时新增了若干个背景相关的属性。
- 新增了全新的布局方案 —— 弹性盒子。
- 新增了 Web 字体,可以显示用户电脑上没有安装的字体。
- 增强了颜色,例如: HSL 、 HSLA 、 RGBA 几种新的颜色模式,新增 opacity 属性来控制透明度。
- 增加了 2D 和 3D 变换,例如:旋转、扭曲、缩放、位移等。
- 增加动画与过渡效果,让效果的变换更具流线性、平滑性。
1.1 CSS3 私有前缀
什么是私有前缀呢?如下段码中的 -webkit- 就是私有前缀
div {
width:400px;
height:400px;
-webkit-border-radius: 20px;
}
1.1.1 为什么要有私有前缀
W3C 标准所提出的某个 CSS 特性,在被浏览器正式支持之前,浏览器厂商会根据浏览器的内核使用私有前缀来测试该 CSS 特性,在浏览器正式支持该 CSS 特性后,就不需要私有前缀了,查询 CSS3 兼容性的网站
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-ms-border-radius: 20px;
-o-border-radius: 20px;
border-radius: 20px;
1.2 常见浏览器私有前缀
浏览器 | 私有前缀 |
---|---|
Chrome | -webkit- |
Safari | -webkit- |
Firefox | -moz- |
我们在编码时不用过于关注浏览器私有前缀,不用绞尽脑汁的去记忆,也不用每个都去查询,因为常用的 CSS3 新特性主流浏览器都是支持的,即便是为了老浏览器而加前缀,我们也可以借助现代的构建工具去帮我们添加私有前缀。
二:CSS3 新增属性
2.1 CSS3 新增长度单位
单位 | 描述 |
---|---|
rem | 根元素字体大小的倍数,只与根元素字体大小有关。 |
vw | 视口宽度的百分比,10vw 表示视口宽度的 10%。 |
vh | 视口高度的百分比,10vh 表示视口高度的 10%。 |
vmax | 视口宽度和高度中较大的那个的百分比。 |
vmin | 视口宽度和高度中较小的那个的百分比。 |
2.2 CSS3 新增盒模型相关属性
2.2.1 box-sizing 怪异盒模型
使用 box-sizing 属性可以设置盒模型的两种类型:
可选值 | 含义 |
---|---|
content-box | width 和 height 设置的是盒子内容区的大小。( 默认值 ) |
border-box | width 和 height 设置的是盒子总大小。( 怪异盒模型 ) |
2.2.2 resize 调整盒子大小
使用 resize 属性可以控制是否允许用户调节元素尺寸。
值 | 含义 |
---|---|
none | 不允许用户调整元素大小。 (默认) |
both | 用户可以调节元素的宽度和高度。 |
horizontal | 用户可以调节元素的宽度。 |
vertical | 用户可以调节元素的高度。 |
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>resize 属性示例</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
.resizable-box {
width: 200px;
height: 100px;
padding: 10px;
border: 2px solid #333;
margin-bottom: 20px;
overflow: auto; /* 允许内容溢出时显示滚动条 */
}
.resize-none {
resize: none; /* 不允许用户调整大小 */
}
.resize-both {
resize: both; /* 允许用户调整宽度和高度 */
}
.resize-horizontal {
resize: horizontal; /* 只允许用户调整宽度 */
}
.resize-vertical {
resize: vertical; /* 只允许用户调整高度 */
}
</style>
</head>
<body>
<h2>使用 resize 属性控制元素大小调整</h2>
<!-- 不允许调整大小的元素 -->
<div class="resizable-box resize-none">
<p>无法调整大小的元素。</p>
</div>
<!-- 允许同时调整宽度和高度的元素 -->
<div class="resizable-box resize-both">
<p>可以同时调整宽度和高度的元素。</p>
</div>
<!-- 只允许调整宽度的元素 -->
<div class="resizable-box resize-horizontal">
<p>只能调整宽度的元素。</p>
</div>
<!-- 只允许调整高度的元素 -->
<div class="resizable-box resize-vertical">
<p>只能调整高度的元素。</p>
</div>
</body>
</html>
2.2.3 box-shadow 盒子阴影
使用 box-shadow 属性为盒子添加阴影,默认值为没有阴影。
box-shadow: h-shadow v-shadow blur spread color inset;
值 | 含义 |
---|---|
h-shadow | 水平阴影的位置,必须填写,可以为负值 |
v-shadow | 垂直阴影的位置,必须填写,可以为负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的外延值 |
color | 可选,阴影的颜色 |
inset | 可选,将外部阴影改为内部阴影 |
2.2.4 opacity 不透明度
opacity 属性能为整个元素添加透明效果, 值是 0 到 1 之间的小数, 0 是完全透明, 1 表示完全不透明。
属性/方式 | 描述 |
---|---|
opacity | 是一个属性,作用于整个元素及其内容的透明度,包括文字和图片等内容。 |
rgba | 是一种颜色设置方式,仅影响颜色的透明度,不影响元素内部其他内容。 |
2.3 CSS3 新增背景属性
2.3.1 background-origin
作用:设置背景图的原点。
值 | 描述 |
---|---|
padding-box | 从 padding 区域开始显示背景图像。(默认值) |
border-box | 从 border 区域开始显示背景图像。 |
content-box | 从 content 区域开始显示背景图像。 |
2.3.2 background-clip
作用:用于设置背景图的裁剪范围,指定背景图像的可见区域。
值 | 描述 |
---|---|
border-box | 背景图从 border 区域开始向外裁剪。(默认值) |
padding-box | 背景图从 padding 区域开始向外裁剪。 |
content-box | 背景图从 content 区域开始向外裁剪。 |
text | 背景图仅显示在文字上。 |
注意:若值为 text ,那么 backgroun-clip 要加上 -webkit- 前缀。
2.3.3 background-size
作用:设置背景图的尺寸。
background-size: 300px 200px; /* 用长度值指定背景图片大小,不允许负值。 */
background-size: 100% 100%; /* 用百分比指定背景图片大小,不允许负值。 */
background-size: auto;/* auto:背景图片的真实大小(默认值)。 */
background-size: contain;/* contain:将背景图片等比缩放,完整显示在容器内,可能会有部分区域没有背景图片。 */
background-size: cover;/* cover:将背景图片等比缩放,直到完全覆盖容器,可能会裁剪图片。推荐 */
2.4 CSS3新增边框属性
2.4.1 边框外轮廓(了解)
属性 | 描述 |
---|---|
outline-width | 外轮廓的宽度。 |
outline-color | 外轮廓的颜色。 |
outline-style | 外轮廓的风格。 |
outline-offset | 设置外轮廓与边框的距离,支持正负值。 |
style 的取值:
值 | 描述 |
---|---|
none | 无轮廓 |
dotted | 点状轮廓 |
dashed | 虚线轮廓 |
solid | 实线轮廓 |
double | 双线轮廓 |
2.5 CSS3 新增文本属性
2.5.1 文本阴影
在 CSS3 中,我们可以使用 text-shadow 属性给文本添加阴影,默认值为没有阴影。
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需写,水平阴影的位置,允许负值。 |
v-shadow | 必需写,垂直阴影的位置,允许负值。 |
blur | 可选,模糊的距离。 |
color | 可选,阴影的颜色。 |
2.5.2 文本换行
在 CSS3 中,我们可以使用 white-space 属性设置文本换行方式。
值 | 含义 |
---|---|
normal | 文本超出边界自动换行,文本中的换行被浏览器识别为一个空格。(默认值) |
pre | 原样输出,与 pre 标签的效果相同 |
pre-wrap | 在 pre 效果的基础上,超出元素边界自动换行 |
pre-line | 在 pre 效果的基础上,超出元素边界自动换行,且只识别文本中的换行,空格会忽略 |
nowrap | 强制不换行 |
2.5.3 文本溢出
在 CSS3 中,我们可以使用 text-overflow 属性设置文本内容溢出时的呈现模式。
值 | 含义 |
---|---|
clip | 当内联内容溢出时,将溢出部分裁切掉。 (默认值) |
ellipsis | 当内联内容溢出块容器时,将溢出部分替换为 … 。 |
注意:要使得 text-overflow 属性生效,块容器必须显式定义 overflow 为非 visible 值, white-space 为 nowrap 值。
2.5.4 文本修饰
CSS3 升级了 text-decoration 属性,让其变成了复合属性。
text-decoration: text-decoration-line || text-decoration-style || text-decoration-color
text-decoration-line 设置文本装饰线的位置:
值 | 含义 |
---|---|
none | 文字无装饰 |
underline | 文字下划线装饰 |
overline | 文字上划线装饰 |
line-through | 文字贯穿线装饰 |
text-decoration-style 设置文本装饰线条的形状:
值 | 含义 |
---|---|
solid | 实线 |
double | 双线 |
dotted | 点状线条 |
dashed | 虚线 |
wavy | 波浪线 |
text-decoration-color 文本装饰线条的颜色:
2.5.5 文本描边
注意:文字描边功能仅 webkit 内核浏览器支持
属性 | 描述 |
---|---|
-webkit-text-stroke-width | 设置文字描边的宽度,接受长度值。 |
-webkit-text-stroke-color | 设置文字描边的颜色,接受颜色值。 |
-webkit-text-stroke | 复合属性,同时设置文字描边宽度和颜色。 |
2.6 CSS3 新增渐变
2.6.1 线性渐变
- 多个颜色之间的渐变, 默认从上到下渐变。
background-image: linear-gradient(red,yellow,green);
- 使用关键词设置线性渐变的方向。
ackground-image: linear-gradient(to top,red,yellow,green);
background-image: linear-gradient(to right top,red,yellow,green);
- 使用角度设置线性渐变的方向。
background-image: linear-gradient(30deg,red,yellow,green);
- 调整开始渐变的位置。
background-image: linear-gradient(red 50px,yellow 100px ,green 150px);
2.6.2 径向渐变
- 多个颜色之间的渐变, 默认从圆心四散。(注意:不一定是正圆,要看容器本身宽高比)
background-image: radial-gradient(red,yellow,green);
- 使用关键词调整渐变圆的圆心位置。
background-image: radial-gradient(at right top,red,yellow,green);
- 使用像素值调整渐变圆的圆心位置。
background-image: radial-gradient(at 100px 50px,red,yellow,green);
- 调整渐变形状为正圆 。
background-image: radial-gradient(circle,red,yellow,green);
- 调整形状的半径 。
background-image: radial-gradient(100px,red,yellow,green);
background-image: radial-gradient(50px 100px,red,yellow,green);
- 调整开始渐变的位置。
background-image: radial-gradient(red 50px,yellow 100px,green 150px);
2.6.3 重复渐变
无论线性渐变,还是径向渐变,在没有发生渐变的位置,继续进行渐变,就为重复渐变。
函数 | 描述 |
---|---|
repeating-linear-gradient | 进行重复线性渐变,具体参数同 linear-gradient。 |
repeating-radial-gradient | 进行重复径向渐变,具体参数同 radial-gradient。 |
2.7 web 字体
2.7.1 基本用法
可以通过 @font-face 指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了。
@font-face {
font-family: "情书字体";
src: url('./方正手迹.ttf');
}
语法(高兼容性写法):
@font-face {
font-family: "atguigu";
font-display: swap;
src: url('webfont.eot'); /* IE9 */
src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('webfont.woff2') format('woff2'),
url('webfont.woff') format('woff'), /* chrome、firefox */
url('webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari,Android*/
url('webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
2.7.2 定制字体
中文的字体文件很大,使用完整的字体文件不现实,我们通常针对某几个文字进行单独定制。可使用阿里 Web 字体定制工具
2.7.3 字体图标
优点 | 描述 |
---|---|
清晰度高 | 字体图标相比图片更加清晰。 |
灵活性高 | 更方便改变大小、颜色、风格等属性。 |
兼容性好 | 可在多种浏览器中使用,包括 IE。 |
2.8 2D变换
二维坐标系如下图所示:
2.8.1 2D 位移
2D 位移可以改变元素的位置,具体使用方式如下:首先先给元素添加转换属性 transform,接着编写 transform 的具体值,相关可选值如下:
属性 | 含义 |
---|---|
translateX | 设置水平方向位移,需指定长度值;若指定的是百分比,是参考自身宽度的百分比。 |
translateY | 设置垂直方向位移,需指定长度值;若指定的是百分比,是参考自身高度的百分比。 |
translate | 一个值代表水平方向,两个值代表:水平和垂直方向。 |
注意:
- 位移与相对定位很相似,都不脱离文档流,不会影响到其它元素。
- 与相对定位的区别:相对定位的百分比值参考的是父元素,位移的百分比值参考的是元素自身。
- 浏览器对位移进行了优化,处理效率比定位更高。
- 位移对行内元素无效。
- transform 可以链式编写,例如:
transform: translateX(30px) translateY(40px);
2.8.2 2D 缩放
2D 缩放是指:让元素放大或缩小,具体使用方式如下:首先给元素添加转换属性 transform
,接着编写 transform 的具体值,相关可选值如下:
属性名 | 含义 |
---|---|
scaleX | 设置水平方向的缩放比例,值为一个数字,1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scaleY | 设置垂直方向的缩放比例,值为一个数字,1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scale | 同时设置水平方向、垂直方向的缩放比例,一个值代表同时设置水平和垂直缩放;两个值分别代表:水平缩放、垂直缩放。 |
2.8.3 2D旋转
2D 旋转是指:让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方式如下:首先给元素添加 转换属性 transform,接着编写 transform 的具体值,相关可选值如下:
属性 | 含义 |
---|---|
rotate | 设置旋转角度,需指定一个角度值( deg ),正值顺时针,负值逆时针。 |
2.8.4 2D 扭曲(了解)
2D 扭曲是指:让元素在二维平面内被 “拉扯”,进而 “走形”,实际开发几乎不用,了解即可,具体使用方式如下:首先先给元素添加 转换属性 transform,接着编写 transform 的具体值,相关可选值如下:
属性 | 含义 |
---|---|
skewX | 设置元素在水平方向扭曲,值为角度值,会将元素的左上角、右下角拉扯。 |
skewY | 设置元素在垂直方向扭曲,值为角度值,会将元素的左上角、右下角拉扯。 |
skew | 一个值代表 skewX,两个值分别代表 skewX、skewY。 |
2.8.5 多重变换
多个变换,可以同时使用一个 transform 来编写,多重变换时,建议最后旋转。
transform: translate(-50%, -50%) rotate(45deg);
2.8.6 变换原点
元素变换时,默认的原点是元素的中心,使用 transform-origin 可以设置变换的原点,修改变换原点对位移没有影响, 对旋转和缩放会产生影响。
情况 | 描述 |
---|---|
提供两个值 | 第一个值表示横坐标,第二个值表示纵坐标。 |
只提供一个值 | 如果是像素值,表示横坐标,纵坐标默认取 50%;如果是关键词,另一个坐标取 50%。 |
示例:
- transform-origin: 50% 50% , 变换原点在元素的中心位置,百分比是相对于自身。—— 默认值
- transform-origin: left top ,变换原点在元素的左上角 。
- transform-origin: 50px 50px , 变换原点距离元素左上角 50px 50px 的位置。
- transform-origin: 0 ,只写一个值的时候,第二个值默认为 50% 。
2.9 3D变换
2.9.1 开启3D空间
重要原则:要实现元素的 3D 变换,首先需要在父元素上通过 transform-style 属性开启 3D 空间,transform-style 属性的可选值如下:
值 | 描述 |
---|---|
flat | 让子元素位于此元素的二维平面内(默认值)。 |
preserve-3d | 让子元素位于此元素的三维空间内。 |
2.9.2 设置景深
景深指的是观察者与 z=0 平面的距离,通过设置可以让 3D 变换的元素产生透视效果,从而看起来更加立体,可以使用 perspective 属性来设置景深,该属性需要应用于发生 3D 变换元素的父元素。perspective 可选值如下:
值 | 描述 |
---|---|
none | 不指定透视(默认值)。 |
长度值 | 指定观察者距离 z = 0 平面的距离,不允许为负值。 |
2.9.3 3D 位移
3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移,具体使用方式如下:首先给元素添加转换属性 transform,接着编写 transform 的具体值, 3D 相关可选值如下:
值 | 含义 |
---|---|
translateZ | 设置 z 轴位移,需指定长度值,正值向屏幕外,负值向屏幕里,且不能写百分比。 |
translate3d | 第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,且均不能省略。 |
2.9.4 3D 旋转
3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:首先给元素添加 转换属性 transform,接着编写 transform 的具体值, 3D 相关可选值如下:
值 | 含义 |
---|---|
rotateX | 设置绕 x 轴旋转的角度,需指定一个角度值( deg )。面对 x 轴正方向:正值顺时针,负值逆时针。 |
rotateY | 设置绕 y 轴旋转的角度,需指定一个角度值( deg )。面对 y 轴正方向:正值顺时针,负值逆时针。 |
rotate3d | 前三个参数分别表示坐标轴: x, y, z。第四个参数表示旋转的角度。参数不允许省略。 例如: rotate3d(1,1,1,30deg) 表示绕 x、 y、 z 轴分别旋转 30 度。 |
2.9.5 3D 缩放
3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,具体使用方式如下:首先先给元素添加 转换属性 transform,接着编写 transform 的具体值, 3D 相关可选值如下:
属性 | 含义 |
---|---|
scaleZ | 设置 z 轴方向的缩放比例,值为一个数字,1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scale3d | 第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,参数不允许省略。 |
2.9.6 多重变换
多个变换,可以同时使用一个 transform 来编写,多重变换时,建议最后旋转。
transform: translateZ(100px) scaleZ(3) rotateY(40deg);
2.9.7 背部可见性
backface-visibility 用于指定元素背面在面向用户时是否可见。该属性需要直接应用于发生 3D 变换的元素本身,backface-visibility 常用值如下:
值 | 描述 |
---|---|
visible | 指定元素背面可见,允许显示正面的镜像。(默认值) |
hidden | 指定元素背面不可见。 |
很明显,正面的红色背面是看不到的
2.10 过渡
过渡可以在不使用 Flash 动画,不使用 JavaScript 的情况下,让元素从一种样式,平滑过渡为另一种样式。
2.10.1 transition-property
transition-property 用于指定需要过渡的属性,只有在此属性中定义的属性才会产生过渡效果,transition-property 常用值:
值 | 描述 |
---|---|
none | 不过渡任何属性。 |
all | 过渡所有支持过渡的属性。 |
具体属性名 | 指定过渡的属性名,例如 width、height,多个属性用逗号分隔。 |
并非所有属性都支持过渡。只有数值型属性或能够转换为数值的属性才能产生过渡效果,常见的支持过渡的属性有:颜色、长度值、百分比、 z-index 、 opacity 、 2D 变换属性、 3D 变换属性、阴影。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transition Property 演示</title>
<style>
.box {
width: 100px;
height: 100px;
background-color: blue;
transition-property: width, background-color; /* 定义哪些属性参与过渡 */
transition-duration: 2s; /* 定义过渡的持续时间 */
transition-timing-function: ease-in-out; /* 定义过渡的变化方式 */
}
.box:hover {
width: 200px; /* 宽度会发生过渡 */
background-color: red; /* 背景颜色会发生过渡 */
}
</style>
</head>
<body>
<div class="box"></div>
<p>把鼠标移动到方块上,可以看到宽度和背景颜色的过渡效果。</p>
</body>
</html>
2.10.2 transition-duration
transition-duration 设置过渡的持续时间,transition-duration 常用值:
值 | 描述 |
---|---|
0 | 没有任何过渡时间(默认值)。 |
s 或 ms | 指定过渡时间的单位为秒或毫秒。 |
列表 | 可指定多个过渡时间,用逗号分隔。 |
如果想让所有属性都持续一个时间那就写一个值,如果想让每个属性持续不同的时间那就写一个时间的列表。
2.10.3 transition-delay
transition-delay 指定开始过渡的延迟时间,单位: s 或 ms
2.10.4 transition-timing-function
transition-delay 设置过渡的类型,transition-delay 常用值:
值 | 描述 |
---|---|
ease | 平滑过渡(默认值)。 |
linear | 线性过渡。 |
ease-in | 从慢到快的过渡效果。 |
ease-out | 从快到慢的过渡效果。 |
ease-in-out | 从慢到快再到慢的过渡效果。 |
step-start | 等同于 steps(1, start)。 |
step-end | 等同于 steps(1, end)。 |
steps(integer, ?) | 步进函数,接受两个参数:第一个为正整数,指定步数;第二个为 start 或 end,指定每一步变化的时间点,默认为 end。 |
cubic-bezier(number…) | 使用特定贝塞尔曲线类型,自定义过渡曲线。在线制作贝塞尔曲线 |
2.11 动画
2.11.1 什么是帧
动画是通过在一定时间内连续播放多个画面( 即“帧” )实现的。每一帧是动画的一个静态画面。当若干帧以较快速度连续播放时,人眼会感知到流畅的动画效果。在相同的时间内,播放的帧数越多,动画看起来就越流畅。
2.11.2 什么是关键帧
关键帧指的是,在构成一段动画的若干帧中,起到决定性作用的 2 - 3 帧。
2.11.3 动画的基本使用
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动画演示</title>
<style>
/* 定义关键帧动画 */
@keyframes testKey {
0% {
transform: translateX(0px);
background-color: blue;
}
20% {
transform: translateX(50px);
background-color: green;
}
40% {
transform: translateX(100px);
background-color: yellow;
}
60% {
transform: translateX(150px);
background-color: orange;
}
80% {
transform: translateX(200px);
background-color: red;
}
100% {
transform: translateX(250px);
background-color: purple;
}
}
/* 给元素应用动画 */
.box {
width: 100px;
height: 100px;
background-color: blue;
position: relative;
/* 指定动画 */
animation-name: testKey;
/* 设置动画持续时间 */
animation-duration: 5s;
/* 设置动画延迟 */
animation-delay: 0.5s;
/* 设置动画次数 */
animation-iteration-count: infinite; /* 无限次循环 */
/* 设置动画运动方式 */
animation-timing-function: ease-in-out;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
2.11.4 动画的其他属性
- animation-timing-function ,设置动画的类型,常用值如下:
值 | 描述 |
---|---|
ease | 平滑动画(默认值)。 |
linear | 线性过渡。 |
ease-in | 动画从慢到快。 |
ease-out | 动画从快到慢。 |
ease-in-out | 动画从慢到快再到慢。 |
step-start | 等同于 steps(1, start)。 |
step-end | 等同于 steps(1, end)。 |
steps(integer, ?) | 步进函数,接受两个参数:第一个为正整数,指定步数;第二个为 start 或 end,指定每一步变化的时间点,默认为 end。 |
cubic-bezier(number…) | 使用特定贝塞尔曲线类型,自定义动画曲线。 |
- animation-iteration-count ,指定动画的播放次数,常用值如下:
值 | 描述 |
---|---|
number | 动画循环的次数。 |
infinite | 无限循环动画。 |
- animation-direction ,指定动画方向,常用值如下:
值 | 描述 |
---|---|
normal | 动画按照正常方向运行(默认)。 |
reverse | 动画按照反方向运行。 |
alternate | 动画先正常方向运行,再反方向运行,交替循环。 |
alternate-reverse | 动画先反方向运行,再正常方向运行,交替循环。 |
- animation-fill-mode ,设置动画之外的状态
值 | 描述 |
---|---|
forwards | 设置对象状态为动画结束时的状态。 |
backwards | 设置对象状态为动画开始时的状态。 |
- animation-play-state ,设置动画的播放状态,常用值如下:
值 | 描述 |
---|---|
running | 动画运行(默认)。 |
paused | 动画暂停。 |
2.12 多列布局
多列布局专门用于实现类似于报纸的布局。
属性 | 描述 |
---|---|
column-count | 指定列数,值是数字。 |
column-width | 指定列宽,值是长度。 |
columns | 同时指定列宽和列数的复合属性,值没有数量和顺序要求。 |
column-gap | 设置列之间的间距,值是长度。 |
column-rule-style | 设置列之间边框的风格,值与 border-style 一致。 |
column-rule-width | 设置列之间边框的宽度,值是长度。 |
column-rule-color | 设置列之间边框的颜色。 |
column-rule | 设置列边框的复合属性。 |
column-span | 指定是否跨列,可选值:none、all。 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>报纸布局示例</title>
<style>
.newspaper {
/* 指定列数 */
column-count: 3;
/* 指定列宽 */
column-width: 200px;
/* 设置列之间的间距 */
column-gap: 20px;
/* 设置列之间的边框样式、宽度和颜色 */
column-rule-style: solid;
column-rule-width: 2px;
column-rule-color: gray;
}
.headline {
/* 设置跨列 */
column-span: all;
font-weight: bold;
font-size: 24px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<div class="newspaper">
<div class="headline">报纸标题:这是一个跨列的标题</div>
<p>
这是第一个段落内容,展示如何使用 CSS 列布局实现类似报纸的效果。列布局可以将文本内容分为多个竖直排列的列,视觉上类似于我们在报纸上看到的布局样式。通过设置列数、列宽、列间距以及列与列之间的边框样式,可以自由调整布局效果。
</p>
<p>
使用 `column-count` 和 `column-width` 可以分别指定列的数量和每列的宽度,而 `column-gap` 用于设置列与列之间的空隙。 `column-rule` 则用于为列与列之间设置边框效果。
</p>
<p>
此外,还可以使用 `column-span` 属性来指定元素是否跨列,比如在这个示例中,标题使用了 `column-span: all`,它跨越了所有的列,而段落则分布在各个列中。
</p>
<p>
这种布局方式特别适合展示大量文本内容,并且能够有效地提高可读性和视觉效果。
</p>
</div>
</body>
</html>
2.13 媒体查询
2.13.1 媒体类型
值 | 含义 |
---|---|
all | 检测所有设备 |
screen | 检测电子屏幕 |
检测打印机 |
2.13.2 媒体特性
值 | 含义 |
---|---|
width | 检测视口宽度 |
max-width | 检测视口最大宽度 |
min-width | 检测视口最小宽度 |
height | 检测视口高度 |
max-height | 检测视口最大高度 |
min-height | 检测视口最小高度 |
device-width | 检测设备屏幕的宽度 |
max-device-width | 检测设备屏幕的最大宽度 |
min-device-width | 检测设备屏幕的最小宽度 |
orientation | 检测视口的旋转方向(是否横屏) 1. portrait :视口处于纵向,即高度大于等于宽度。 2. landscape :视口处于横向,即宽度大于高度。 |
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>媒体查询示例</title>
<style>
/* 默认样式,适用于所有设备 */
body {
font-family: Arial, sans-serif;
background-color: lightgray;
color: black;
}
.container {
width: 80%;
margin: 0 auto;
text-align: center;
padding: 20px;
}
.box {
width: 100%;
height: 100px;
background-color: blue;
margin-bottom: 20px;
transition: all 0.3s ease;
}
/* 针对屏幕宽度小于600px的设备 */
@media (max-width: 600px) {
.box {
background-color: green; /* 改变背景颜色 */
}
}
/* 针对屏幕宽度在600px到1200px之间的设备 */
@media (min-width: 600px) and (max-width: 1200px) {
.box {
background-color: yellow; /* 改变背景颜色 */
width: 50%; /* 改变宽度 */
}
}
/* 针对横屏设备 */
@media (orientation: landscape) {
.box {
background-color: red; /* 横屏时背景颜色变为红色 */
}
}
/* 针对打印机 */
@media print {
body {
background-color: white; /* 打印时背景变为白色 */
color: black;
}
}
</style>
</head>
<body>
<div class="container">
<div class="box">这个盒子会根据屏幕宽度和设备方向改变样式</div>
<p>调整屏幕尺寸或方向,看看效果变化。</p>
</div>
</body>
</html>
在实际开发中,会将屏幕划分成几个区间,例如:
2.13.3 运算符
值 | 含义 |
---|---|
and | 并且 |
or | 或 |
not | 否定 |
only | 肯定 |
2.14 BFC
BFC 是一种特殊的布局模式,可以简单理解为元素的一种“独立空间”。默认情况下 BFC 是关闭的,当元素符合某些条件时就会开启 BFC。元素开启 BFS 后,元素的布局和外部元素会互相隔离,从而解决一些常见的布局问题。
2.14.1 开启了BFC能解决什么问题
问题 | 描述 |
---|---|
避免 Margin 塌陷 | 元素开启 BFC 后,其子元素之间不会再产生 margin 塌陷问题。 |
避免被浮动元素覆盖 | 元素开启 BFC 后,不会被周围的浮动元素遮挡。 |
高度自适应 | 元素开启 BFC 后,即使子元素浮动,元素自身的高度也能正确计算,不会塌陷。 |
2.14.2 如何开启BFC
方式 | 描述 |
---|---|
根元素 | 所有根元素默认开启 BFC。 |
浮动元素 | 设置 float 的元素会开启 BFC。 |
绝对定位、固定定位的元素 | 设置 position 为 absolute 或 fixed 的元素会开启 BFC。 |
行内块元素 | 设置为 inline-block 的元素会开启 BFC。 |
表格单元格 | table、thead、tbody、tfoot、th、td、tr、caption 等表格相关元素会开启 BFC。 |
overflow 不为 visible 的块元素 | 设置 overflow 为非 visible 的块级元素会开启 BFC。 |
伸缩项目 | 弹性盒子中的子元素会开启 BFC。 |
多列容器 | 设置为多列布局的容器会开启 BFC。 |
column-span 为 all 的元素 | 即使该元素未包裹在多列容器中,column-span 为 all 的元素也会开启 BFC。 |
display 为 flow-root | 将 display 设置为 flow-root 的元素会开启 BFC。 |