CSS3 是 CSS2 的升级版本,它在 CSS2 的基础上,新增了很多强大的新功能。
CSS3 在未来会按照模块化的方式去发展: https://www.w3.org/Style/CSS/current-work.html
CSS3 的新特性如下:
W3C 标准所提出的某个 CSS 特性,在被浏览器正式支持之前,浏览器厂商会根据浏览器的内核, 使用私有前缀来测试该 CSS 特性,在浏览器正式支持该 CSS 特性后,就不需要私有前缀了。
CSS3 新增了三种颜色设置方式,分别是: rgba 、 hsl 、 hsla ,由于之前已经详细讲解,此处略 过。
CSS3 新增的选择器有:动态伪类、目标伪类、语言伪类、 UI 伪类、结构伪类、否定伪类、伪元素;这 些在 CSS2 中已经详细讲解,此处略过。
使用 box-sizing 属性可以设置盒模型的两种类型
可选值 | 含义 |
---|---|
content-box | width 和 height 设置的是盒子内容区的大小。(默认值) |
border-box | width 和 height 设置的是盒子总大小。(怪异盒模型) |
使用 resize 属性可以控制是否允许用户调节元素尺寸。
值 | 含义 |
---|---|
none | 不允许用户调整元素大小。(默认) |
both | 用户可以调节元素的宽度和高度。 |
horizontal | 用户可以调节元素的宽度 |
vertical | 用户可以调节元素的高度。 |
注意: resize元素的overflow属性,不能是默认值visible才可以调整尺寸
使用 box-shadow 属性为盒子添加阴影。
值 | 含义 |
---|---|
h-shadow | 水平阴影的位置,必须填写,可以为负值 |
v-shadow | 垂直阴影的位置,必须填写,可以为负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的外延值 |
color | 可选,阴影的颜色 |
inset | 可选,将外部阴影改为内部阴影 |
默认值: box-shadow:none 表示没有阴影
opacity 属性能为整个元素添加透明效果, 值是 0 到 1 之间的小数, 0 是完全透明, 1 表示完 全不透明
opacity 是一个属性,设置的是整个元素(包括元素里的内容)的不透明度。
rgba 是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度
background-origin设置背景图的原点
background-clip设置背景图的向外裁剪的区域。
设置背景图的尺寸。
auto : 背景图片的真实大小,根据容器大小不压缩展示。 —— 默认值
contain : 将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整 背景图片包含在容器内,但要注意:可能会造成容器里部分区域没有背景图片。
background: color url repeat position / size origin clip
注意:
CSS3 允许元素设置多个背景图片
使用 border-radius 属性可以将盒子变为圆角
同时设置四个角的圆角:border-radius:10px;
分开设置每个角的圆角:
分开设置每个角的圆角,综合写法
border-raidus: 左上角x 右上角x 右下角x 左下角x / 左上y 右上y 右下y 左下y
复合属性:outline: 50px solid blue;
,和设置border写法类似。
注意:
在 CSS3 中,我们可以使用 text-shadow 属性给文本添加阴影
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需写,水平阴影的位置。允许负值。 |
v-shadow | 必需写,垂直阴影的位置。允许负值。 |
blur | 可选,模糊的距离。 |
color | 可选,阴影的颜色 |
默认值: text-shadow:none 表示没有阴影。
在 CSS3 中,我们可以使用 white-space 属性设置文本换行方式。
值 | 含义 |
---|---|
normal | 文本超出边界自动换行,文本中的换行被浏览器识别为一个空格。(默认值) |
pre | 原样输出,与 pre 标签的效果相同。 |
pre-wrap | 在 pre 效果的基础上,超出元素边界自动换行。 |
pre-line | 在 pre 效果的基础上,超出元素边界自动换行,文本行中的连续空格会被忽略。 |
nowrap | 强制不换行 |
在 CSS3 中,我们可以使用 text-overflow 属性设置文本内容溢出时的呈现模式。
值 | 含义 |
---|---|
clip | 当内联内容溢出时,将溢出部分裁切掉。 (默认值) |
ellipsis | 当内联内容溢出块容器时,将溢出部分替换为 ... 。 |
注意: 要使得 text-overflow 属性生效,块容器必须显式定义 overflow 为非 visible 值, white-space 为 nowrap 值。
CSS3 升级了 text-decoration 属性,让其变成了复合属性
text-decoration: text-decoration-line text-decoration-style text-decorationcolor
文字描边功能仅 webkit 内核浏览器支持。
background-image: linear-gradient(red,yellow,green);
to top
, to right
设置线性渐变的方向。background-image: linear-gradient(30deg,red,yellow,green);
background-image: linear-gradient(red 50px,yellow 100px ,green 150px);
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(red 50px,yellow 100px,green 150px);
无论线性渐变,还是径向渐变,在没有发生渐变的位置,继续进行渐变,就为重复渐变。
可以通过 @font-face
指定字体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了。
简写方式
高兼容性写法
2D 位移可以改变元素的位置,具体使用方式如下:
transform: translateX(30px) translateY(40px);
值 | 含义 |
---|---|
translateX | 设置水平方向位移,需指定长度值;若指定的是百分比,是参考自身宽度的百分比。 |
translateY | 设置垂直方向位移,需指定长度值;若指定的是百分比,是参考自身高度的百分比。 |
translate | 一个值代表水平方向,两个值代表:水平和垂直方向。 |
位移与相对定位很相似,都不脱离文档流,不会影响到其它元素。
与相对定位的区别:相对定位的百分比值,参考的是其父元素;位移的百分比值,参考的是其自身。
位移对行内元素无效。
位移配合定位,可实现元素水平垂直居中:
2D 缩放是指让元素放大或缩小,具体使用方式如下:
transform: scale(0.8)
值 | 含义 |
---|---|
scaleX | 设置水平方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scaleY | 设置垂直方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scale | 同时设置水平方向、垂直方向的缩放比例,一个值代表同时设置水平和垂直缩放;两个值分别代表:水平缩放、垂直缩放。 |
注意:
2D 旋转是指让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方式如下:
transform: rotateZ(30deg)
值 | 含义 |
---|---|
rotate | 设置旋转角度,需指定一个角度值( deg ),正值顺时针,负值逆时针。 |
注意: rotateZ(20deg) 相当于 rotate(20deg) ,当然到了 3D 变换的时候,还能写: rotate(x,x,x)
2D 扭曲是指:让元素在二维平面内被“拉扯”,进而“走形”,实际开发几乎不用,了解即可,具体使用方 式如下:
transform: skew(30deg)
值 | 含义 |
---|---|
skewX | 设置元素在水平方向扭曲,值为角度值,会将元素的左上角、右下角 拉扯 。 |
skewY | 设置元素在垂直方向扭曲,值为角度值,会将元素的左上角、右下角 拉扯 。 |
skew | 一个值代表 skewX ,两个值分别代表: skewX 、 skewY |
多个变换,可以同时使用一个 transform 来编写。
transform: translate(-50%, -50%) rotate(45deg);
注意点:多重变换时,建议最后旋转,因为旋转时坐标轴也会旋转。
元素变换时,默认的原点是元素的中心,使用 transform-origin
可以设置变换的原点。
示例:
元素进行 3D 变换的首要操作:父元素必须开启 3D 空间。使用 transform-style 开启 3D 空间,可选值如下:
transform-style: preserve-3d
指定观察者与 z=0
平面的距离,能让发生 3D 变换的元素,产生透视效果,看来更加立体。使用 perspective 设置景深(设置给发生 3D 变换元素的父元素),可选值如下:
景深设置了透视距离,透视点位置就是观察者在透视距离平面上的位置,默认的透视点在元素的中心。使用 perspective-origin 设置观察者位置(透视点的位置),例如:
通常情况下,我们不需要调整透视点位置,也就是正视变换元素
3D 位移是在 2D 位移的基础上,可以让元素沿 z 轴位移,具体使用方式如下:
值 | 含义 |
---|---|
translateZ | 设置 z 轴位移,需指定长度值,正值向屏幕外,负值向屏幕里,且不能写百分比。 |
translate3d | 第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,且均不能省略。 |
3D 旋转是在 2D 旋转的基础上,可以让元素沿 x 轴和 y 轴旋转,具体使用方式如下:
值 | 含义 |
---|---|
rotateX | 设置 x 轴旋转角度,需指定一个角度值( deg ),面对 x 轴正方向:正值顺时针,负值逆时针。 |
rotateY | 设置 y 轴旋转角度,需指定一个角度值( deg ),面对 y 轴正方向:正值顺时针,负值逆时针。 |
rotate3d | 前 3 个参数分别表示坐标轴: x , y , z ,第 4 个参数表示旋转的角度,参数不允许省略。例如: transform: rotate3d(1,1,1,30deg) ,意思是: x 、 y 、 z 分别旋转30度。 |
3D 缩放是在 2D 缩放的基础上,可以让元素沿 z 轴缩放,z轴缩放的其实应该是元素的“厚度”,具体使用方式如下:
值 | 含义 |
---|---|
scaleZ | 设置 z 轴方向的缩放比例,值为一个数字, 1 表示不缩放,大于 1 放大,小于 1 缩小。 |
scale3d | 第1个参数对应 x 轴,第2个参数对应 y 轴,第3个参数对应 z 轴,参数不允许省略。 |
多个变换,可以同时使用一个 transform 来编写。
transform: translateZ(100px) scaleZ(3) rotateY(40deg);
使用 backface-visibility 指定元素背面,在面向用户时是否可见(需要加在发生 3D 变换元素的自身上),常用值如下:
让元素从一种样式,平滑过渡为另一种样式。
定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡效果。
值 | 含义 |
---|---|
none | 不过渡任何属性。 |
all | 过渡所有能过渡的属性。 |
具体某个属性名 | 例如: width 、 heigth ,若有多个以逗号分隔。 |
不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡。
常见的支持过渡的属性有:颜色、长度值、百分比、 z-index 、 opacity 、 2D 变换属性、 3D 变换属性、阴影。
设置过渡的持续时间,即:一个状态过渡到另外一个状态耗时多久。
指定开始过渡的延迟时间,单位: s 或 ms
设置过渡的类型
如果设置了一个时间,表示 duration ;如果设置了两个时间,第一是 duration ,第二个是 delay ;其他值没有顺序要求。
transition:1s 1s linear all;
一段动画,就是一段时间内连续播放 n 个画面。每一张画面,我们管它叫做“帧”。一定时间内连续 快速播放若干个帧,就成了人眼中所看到的动画。同样时间内,播放的帧数越多,画面看起来越流畅。
关键帧指的是在构成一段动画的若干帧中,起到决定性作用的 2-3 帧。
设置动画的类型,常用值如下:
指定动画的播放次数,常用值如下:
指定动画方向,常用值如下:
设置动画之外的状态:
设置动画的播放状态,常用值如下:
只设置一个时间表示 duration ,设置两个时间分别是: duration 和 delay ,其他属性没有数量和顺序要求
animation-play-state 一般单独使用
专门用于实现类似于报纸的布局,比如瀑布流展示列表。
属性 | 值 |
---|---|
column-count | 指定列数,值是数字。 |
column-width | 指定列宽,值是长度。 |
columns | 同时指定列宽和列数,复合属性;值没有数量和顺序要求。 |
column-gap | 设置列边距,值是长度。 |
column-rule-style | 设置列与列之间边框的风格,值与 border-style 一致。 |
column-rule-width | 设置列与列之间边框的宽度,值是长度。 |
column-rule-color | 设置列与列之间边框的颜色。 |
column-rule | 设置列边框,复合属性。 |
column-span | 指定是否跨列;值: none 、 all 。 |
2009 年, W3C 提出了一种新的盒子模型 —— Flexible Box (伸缩盒模型,又称:弹性盒 子)。它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序 ...,截止目前,除了在部分 IE 浏览器不支持,其他浏览器均已全部支持。伸缩盒模型的出现,逐渐演变出了一套新的布局方案 —— flex 布局
传统布局是指:基于传统盒状模型,主要靠: display 属性 + position 属性 + float属性。
flex 布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上。
开启了 flex 的元素,就是:伸缩容器。
给元素设置: display:flex 或 display:inline-flex ,该元素就变为了伸缩容器。一个元素可以同时是:伸缩容器、伸缩项目。
伸缩容器所有子元素自动成为了伸缩项目。
主轴: 伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边是终点)。 侧轴: 与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边是终点)。
flex-direction设置主轴方向,改变了主轴的方向,侧轴方向也随之改变。
flex-wrap设置主轴换行方式
flex-flow 是一个复合属性,复合了 flex-direction 和 flex-wrap 两个属性。 值没有顺序要 求。
flex-flow: row wrap;
justify-content设置主轴对齐方式。
align-items设置侧轴的单行对齐方式
align-content设置侧轴的多行对齐方式
flex-end :与侧轴的终点对齐。
center :与侧轴的中点对齐。
space-between :与侧轴两端对齐,中间平均分布。
space-around :伸缩项目间的距离相等,比距边缘大一倍。
space-evenly : 在侧轴上完全平分。
stretch :占满整个侧轴。—— 默认值
父容器开启 flex 布局,随后使用 justify-content 和 align-items 实现水平垂直居中
父容器开启 flex 布局,随后子元素 margin: auto
子元素无论是否设置高度,这两种方式都可居中子元素
flex-basis 设置的是主轴方向的基准长度,会让元素宽度或高度失效,按照这个基准值显示宽度或高度(主轴横向:宽度失效;主轴纵向:高度失效)
当设置flex-grow或flex-shrink属性值时,浏览器根据flex-basis设置的值,计算主轴上是否有多余空间,默认值 auto ,即:伸缩项目自身的宽或高,通常不需要修改这个值。
flex-grow 定义伸缩项目的放大比例,默认为 0 ,即:纵使主轴存在剩余空间,也不拉伸(放大)。
flex-shrink 定义了项目的压缩比例,默认为 1 ,即:如果空间不足,该项目将会缩小。
计算方式:
假设有三个收缩项目,宽度分别为: 200px 、 300px 、 200px ,若想刚好容纳下三个项目,需要总宽度为 700px ,但目前容器只有 400px ,还差 300px,所以每个人都要收缩一下才可以放下,现在分别设置它们的 flex-shrink 值分别为: 1 、 2 、 3,具体收缩的值,这样计算:
注意: 在扩大时,是按照剩余空间等比例分的,和元素自身大小无关。但是缩小时,是根据元素自身大小按比例计算的。也就是“有福是同享的,有难个子高的要多担当”
flex 是复合属性,复合了: flex-grow 、 flex-shrink 、 flex-basis 三个属性,默认值为 0 1 auto。
order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为 0 。
通过 align-self 属性,可以单独调整某个伸缩项目的对齐方式。默认值为 auto ,表示继承父元素的 align-items 属性。
根据不同的媒体类型应用不同的css
值 | 含义 |
---|---|
all | 检测所有设备。 |
screen | 检测电子屏幕,包括:电脑屏幕、平板屏幕、手机屏幕等。 |
检测打印机。 |
值 | 含义 |
---|---|
width | 检测视口宽度。 |
max-width | 检测视口最大宽度。 |
min-width | 检测视口最小宽度。 |
height | 检测视口高度。 |
max-height | 检测视口最大高度。 |
min-height | 检测视口最小高度。 |
device-width | 检测设备屏幕的宽度。 |
max-device-width | 检测设备屏幕的最大宽度。 |
min-device-width | 检测设备屏幕的最小宽度。 |
orientation | 检测视口的旋转方向(是否横屏)。portrait :视口处于纵向,即高度大于等于宽度landscape :视口处于横向,即宽度大于高度。 |
值 | 含义 |
---|---|
and | 并且 |
, 或 or | 或 |
not | 否定(没啥意义) |
only | 肯定(没啥意义) |
BFC 是 Block Formatting Context (块级格式上下文),可以理解成元素的一个“隐藏功能”。在默认的情况下处于关闭状态;当元素满足了某些条件后,该“隐藏功能”被激活。专业点说就是:为该元素创建了 BFC (又称:开启了 BFC )。
设置为浮动、绝对定位、固定定位、inline-block、flex、flow-root、inline-flex元素 设置overflow 的值不为 visible 的块元素 设置为多列容器 设置 column-span 为 all(即使该元素没有包裹在多列容器中)
viewport视口,表示浏览器进行网页布局时的区域,浏览器是根据视口进行布局的。在桌面端,通常视口宽度等于设备的宽度;而在手机端,为了更好的呈现早期的PC网页,不同的浏览器都把视口定义的比手机屏幕要宽。
手机端网页布局方案,常用的有两种,vw和rem。
假设设计稿尺寸是750px * 1340px
,DPR为2
根据设计稿尺寸,结合postcss-px-to-viewport插件,相当于是百分比布局,100vw等于100%屏幕宽度,编码时按照px
编写,计算也不用考虑DPR。
1px = (1 / 750) * 100vw
根据屏幕尺寸、设计稿尺寸、DPR值,动态计算出基准字体大小和scale值,rem方案其实是模拟vw,由于vw单位在当年兼容性不好,这是当时的过渡方案,现在已经没有兼容问题了。这种方案在嵌套iframe时还会有渲染问题,所以不推荐这种方案了。