javaEE -17( 15000 字 CSS3 入门级教程 )

一: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-boxwidth 和 height 设置的是盒子内容区的大小。( 默认值 )
border-boxwidth 和 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 线性渐变

  1. 多个颜色之间的渐变, 默认从上到下渐变。
background-image: linear-gradient(red,yellow,green);

在这里插入图片描述


  1. 使用关键词设置线性渐变的方向。
ackground-image: linear-gradient(to top,red,yellow,green);
background-image: linear-gradient(to right top,red,yellow,green);

在这里插入图片描述


  1. 使用角度设置线性渐变的方向。
background-image: linear-gradient(30deg,red,yellow,green);

在这里插入图片描述


  1. 调整开始渐变的位置。
background-image: linear-gradient(red 50px,yellow 100px ,green 150px);

在这里插入图片描述

2.6.2 径向渐变

  1. 多个颜色之间的渐变, 默认从圆心四散。(注意:不一定是正圆,要看容器本身宽高比)
background-image: radial-gradient(red,yellow,green);

在这里插入图片描述


  1. 使用关键词调整渐变圆的圆心位置。
background-image: radial-gradient(at right top,red,yellow,green);

在这里插入图片描述


  1. 使用像素值调整渐变圆的圆心位置。
background-image: radial-gradient(at 100px 50px,red,yellow,green);

在这里插入图片描述


  1. 调整渐变形状为正圆 。
background-image: radial-gradient(circle,red,yellow,green);

在这里插入图片描述


  1. 调整形状的半径 。
background-image: radial-gradient(100px,red,yellow,green);
background-image: radial-gradient(50px 100px,red,yellow,green);

在这里插入图片描述
在这里插入图片描述


  1. 调整开始渐变的位置。
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一个值代表水平方向,两个值代表:水平和垂直方向。

注意:

  1. 位移与相对定位很相似,都不脱离文档流,不会影响到其它元素。
  2. 与相对定位的区别:相对定位的百分比值参考的是父元素,位移的百分比值参考的是元素自身。
  3. 浏览器对位移进行了优化,处理效率比定位更高。
  4. 位移对行内元素无效。
  5. 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%。

示例:

  1. transform-origin: 50% 50% , 变换原点在元素的中心位置,百分比是相对于自身。—— 默认值
  2. transform-origin: left top ,变换原点在元素的左上角 。
  3. transform-origin: 50px 50px , 变换原点距离元素左上角 50px 50px 的位置。
  4. 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 动画的其他属性

  1. 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…)使用特定贝塞尔曲线类型,自定义动画曲线。

  1. animation-iteration-count ,指定动画的播放次数,常用值如下:
描述
number动画循环的次数。
infinite无限循环动画。

  1. animation-direction ,指定动画方向,常用值如下:
描述
normal动画按照正常方向运行(默认)。
reverse动画按照反方向运行。
alternate动画先正常方向运行,再反方向运行,交替循环。
alternate-reverse动画先反方向运行,再正常方向运行,交替循环。

  1. animation-fill-mode ,设置动画之外的状态
描述
forwards设置对象状态为动画结束时的状态。
backwards设置对象状态为动画开始时的状态。

  1. 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检测电子屏幕
print检测打印机

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。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ice___Cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值