CSS3

CSS3
TomCSS3 简介
CSS 用于控制网页的样式和布局,CSS3 是最新的 CSS 标准。
CSS3速查手册使用
新增选择器
关系选择器
E~F选择E元素后面的所有兄弟元素F,元素E与F必须同属一个父级。
属性选择器
E[att^="val"]选择具有att属性且属性值为以val开头的字符串的E元素。E[att$="val"]选择具有att属性且属性值为以val结尾的字符串的E元素。E[att*="val"]选择具有att属性且属性值为包含val的字符串的E元素。
伪类选择器
E:not(s)匹配不含有s选择符的元素E。E:first-child(匹配父元素第一个子元素E)。E:last-child匹配父元素的最后一个子元素E。E:nth-child(n)匹配父元素的第n个子元素E,假设该子元素不是E,则选择符无效。E:enabled匹配用户界面上处于可用状态的元素E。E:disabled匹配用户界面上处于禁用状态的元素E。E:checked匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时)
伪对象选择器
E:before/E::before设置在对象前(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性E:after/E::after设置在对象后(依据对象树的逻辑结构)发生的内容。用来和content属性一起使用,并且必须定义content属性E::placeholder设置对象文字占位符的样式。E::selection设置标签中文本被选中的样式,只支持background-color,color及text-shadow(IE11尚不支持定义该属性)。
CSS3将伪对象选择器前面的单个冒号(:)修改为双冒号(::)用以区别伪类选择器但以前的写法仍然有效。
取值与单位
长度
rem相对长度单位。相对于根元素(即html元素)font-size计算值的倍数vw相对于视口的宽度。视口被均分为100单位的vwvh相对于视口的高度。视口被均分为100单位的vh
角度
deg度(Degrees)。一个圆共360度
时间
s秒 1s = 1000msms毫秒
颜色
RGBA(R,G,B,A)- R: 红色值。正整数 | 百分数
- G: 绿色值。正整数 | 百分数
- B: 蓝色值。正整数 | 百分数
- A: 透明度。取值0 - 1之间。
HSL(H,S,L)- H:色调。0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色。取值为:0 - 360
- S:饱和度。取值为:0.0% - 100.0%
- L:亮度。取值为:0.0% - 100.0%
HSLA(H,S,L,A)- A:透明度。取值0 - 1之间。
边框
border-radius简写属性。定义元素的圆角border-top-left-radiusborder-top-right-radiusborder-bottom-right-radiusborder-bottom-left-radius
box-shadow定义元素的阴影
背景
background简写属性。定义元素的背景特性background-image定义元素使用的背景图像background-position指定背景图像在元素中出现的位置background-repeat定义元素的背景图像如何填充background-attachment定义滚动时背景图像相对于谁固定background-size定义背景图像的尺寸大小
文本
text-transform定义元素的文本如何转换大小写text-shadow定义文字是否有阴影及模糊效果
弹性盒子
CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。使用弹性盒子可以更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。
| 属性 | 描述 |
|---|---|
display:flex |
将对象作为弹性伸缩盒显示。 |
display:inline-flex |
将对象作为内联块级弹性伸缩盒显示。 |
弹性盒子分为 容器 与 子元素, 通过情况下需要分别为容器与子元素设置属性。
- 当标签设置属性
display:flex后那么该元素就是弹性盒子容器。- 元素内部直接子级标签就是子元素。
容器属性
| 属性 | 描述 |
|---|---|
flex-direction |
指定弹性容器中子元素排列方式。 |
flex-wrap |
设置弹性盒子的子元素超出父容器时是否换行。 |
flex-flow |
复合属性。设置或检索伸缩盒对象的子元素排列方式。 |
align-items |
设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。 |
align-content |
修改 flex-wrap 属性的行为,类似 align-items, 但不是设置子元素对齐,而是设置行对齐 |
justify-content |
设置弹性盒子元素在主轴(横轴)方向上的对齐方式。 |
flex-direction
flex-direction 决定子元素的排列方向。
flex-direction:row | row-reverse | column | column-reverse
flex-direction 属性取值 |
描述 |
|---|---|
row |
默认值。元素将水平显示,正如一个行一样。 |
row-reverse |
与 row 相同,但是以相反的顺序。 |
column |
元素将垂直显示,正如一个列一样。 |
column-reverse |
与 column 相同,但是以相反的顺序。 |
flex-wrap
flex-wrap 规定flex容器是子元素宽度超过容器时是否换行。
flex-wrap:nowrap | wrap | wrap-reverse
flex-wrap属性取值 |
描述 |
|---|---|
nowrap |
默认值。规定元素不拆行或不拆列。 |
wrap |
规定元素在必要的时候拆行或拆列。 |
wrap-reverse |
规定元素在必要的时候拆行或拆列,但是以相反的顺序。 |
nowrap示例wrap示例
wrap-reverse示例
flex-flow
flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
flex-flow:<' flex-direction '> || <' flex-wrap '>
align-items
align-items 定义flex子元素在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。
align-items:flex-start | flex-end | center | baseline | stretch
align-items属性取值 |
描述 |
|---|---|
stretch |
默认值。项目被拉伸以适应容器。 |
center |
项目位于容器的中心。 |
flex-start |
项目位于容器的开头。 |
flex-end |
项目位于容器的结尾。 |
baseline |
项目位于容器的基线上。 |
justify-content
justify-content 设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式
justify-content:flex-start | flex-end | center | space-between | space-around
| 属性取值 | 描述 |
|---|---|
flex-start |
默认值。项目位于容器的开头。 |
flex-end |
项目位于容器的结尾。 |
center |
项目位于容器的中心。 |
space-between |
项目位于各行之间留有空白的容器内。 |
space-around |
项目位于各行之前、之间、之后都留有空白的容器内。 |
子元素属性
| 属性 | 描述 |
|---|---|
order |
设置弹性盒子的子元素排列顺序。 |
flex-grow |
设置或检索弹性盒子元素的扩展比率。 |
flex-shrink |
指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。 |
flex-basis |
用于设置或检索弹性盒伸缩基准值。 |
flex |
设置弹性盒子的子元素如何分配空间。 |
align-self |
在弹性子元素上使用。覆盖容器的 align-items 属性。 |
order
order 设置子元素排列顺序
order:<integer>
order 属性取值 |
描述 |
|---|---|
integer |
用整数值来定义排列顺序,数值小的排在前面。可以为负值。 |
flex-grow
flex-grow 设置或检索弹性盒子元素的扩展比率
flex-grow:<number>
flex-grow 属性取值 |
描述 |
|---|---|
number |
用数值来定义扩展比率。 |
flex-shrink
flex-shrink 子元素的收缩比率
flex-shrink:<number>
flex-shrink属性取值 |
描述 |
|---|---|
<number> |
用数值来定义收缩比率。不允许负值 |
flex-basis
flex-basis 设置或检索弹性盒伸缩基准值
flex-basis:<length> | <percentage> | auto | content
flex-basis属性取取值 |
描述 |
|---|---|
<length> |
用长度值来定义宽度。不允许负值 |
<percentage> |
用百分比来定义宽度。不允许负值 |
auto |
无特定宽度值,取决于其它属性值, 默认值 |
content |
基于内容自动计算宽度 |
flex
复合属性:flex-grow、flex-shrink 、flex-basis 。
flex:none | <' flex-grow '> <' flex-shrink >'? || <' flex-basis '>
align-self
align-self 子元素上使用。覆盖容器的 align-items 属性
align-self:auto | flex-start | flex-end | center | baseline | stretch
align-self属性取值 |
描述 |
|---|---|
auto |
默认值。元素继承了它的父容器的 align-items 属性。如果没有父容器则为 “stretch”。 |
flex-start |
元素位于容器的开头。 |
flex-end |
元素位于容器的结尾。 |
center |
元素位于容器的中心。 |
baseline |
元素位于容器的基线上。 |
stretch |
元素被拉伸以适应容器。 |
用户界面
| 属性 | 描述 |
|---|---|
resize |
是否允许缩放 |
zoom |
设置对象的缩放比例 |
box-sizing |
设置是否怪异盒模型 |
修改盒子模型
box-sizing:content-box | border-box
| box-sizing属性取值 | 描述 |
|---|---|
content-box |
标准盒模型 |
border-box |
怪异盒模型 |
- 标准盒模型
1 | .test1{ |
- 怪异盒模型
1 | .test1{ |
渐变
linear-gradient()用线性渐变创建图像。radial-gradient()用径向渐变创建图像。- 示例
1
2
3
4
5
6
7
8.box{
width: 250px; height: 250px;
background: red;
border-radius: 50%;
/* 直径100px位置 左上35% */
background: radial-gradient(circle 100px at 35% 35%, #fff, #ff0);
box-shadow: 0 0 8px #ff0;
}
过渡 transition
过渡可以为一个元素在不同状态之间切换的时候定义不同的过渡效果
| 过渡属性 | 描述 |
|---|---|
transition |
复合属性。设置对象变换时的过渡效果。 |
transition-duration |
设置过渡的持续时间 |
transition-property |
设置对象中的参与过渡的属性 |
transition-delay |
设置对象延迟过渡的时间 |
设置过渡的属性:transition-property
transition-property默认值为:all。默认为所有可以进行过渡的css属性。如果提供多个属性值,以逗号进行分隔。
注意:不是所有的属性都可以设置过渡效果。
| 属性名称 | 类型 |
|---|---|
transform |
all |
background-color |
color |
background-image |
only gradients |
background-position |
percentage length |
border-bottom-color |
color |
border-bottom-width |
length |
border-color |
color |
border-left-color |
color |
border-left-width |
length |
border-right-color |
color |
border-right-width |
length |
border-spacing |
length |
border-top-color |
color |
border-top-width |
length |
border-width |
length |
bottom |
length percentage |
color |
color |
crop |
rectangle |
font-size |
length percentage |
font-weight |
number |
grid-* |
various |
height |
length percentage |
left |
length percentage |
letter-spacing |
length |
line-height |
number length percentage |
margin-bottom |
length |
margin-left |
length |
margin-right |
length |
margin-top |
length |
max-height |
length percentage |
max-width |
length percentage |
min-height |
length percentage |
min-width |
length percentage |
opacity |
number |
outline-color |
color |
outline-offset |
integer |
outline-width |
length |
padding-bottom |
length |
padding-left |
length |
padding-right |
length |
padding-top |
length |
right |
length percentage |
text-indent |
length percentage |
text-shadow |
shadow |
top |
length percentage |
vertical-align |
keywords length percentage |
visibility |
visibility |
width |
length percentage |
word-spacing |
length percentage |
z-index |
integer |
zoom |
number |
2d3d变换 transform
转换是CSS3中新特征之一,可以实现元素的位移、旋转、变形、缩放,等动画效果
2d
| transform 2d变换属性取值 | 描述 |
|---|---|
scale() |
2D缩放。第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认取第一个参数的值 |
scalex() |
指定对象X轴的(水平方向)缩放 |
scaley() |
指定对象Y轴的(垂直方向)缩放 |
translate() |
2D平移。第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认值为0。可以为负数 |
translatex() |
指定对象X轴(水平方向)的平移 |
translatey() |
指定对象Y轴(垂直方向)的平移 |
rotate() |
2D旋转。取值为角度单位 deg,可以为负数。 |
skew() |
斜切扭曲,第一个参数对应X轴,第二个参数对应Y轴。如果第二个参数未提供,则默认值为0。取值为角度单位 deg。 |
skewx() |
指定对象X轴的(水平方向)扭曲 |
skewy() |
指定对象Y轴的(垂直方向)扭曲 |
1 | <style> |
3d
| transform 3d变换属性取值 | 描述 |
|---|---|
transform-style |
指定某元素的子元素是(看起来)位于三维空间内,还是在该元素所在的平面内被扁平化。取值:flat 指定子元素位于此元素所在平面内默认值。 preserve-3d: 指定子元素定位在三维空间内* |
perspective() |
定义了 z=0平面与用户之间的距离,以便给三维定位元素一定透视度。当每个3D元素的z>0时会显得比较大,而在z<0时会显得比较小。其影响的程度由这个属性的值来决定。 |
translate3d() |
指定对象的3D位移。第1个参数对应X轴,第2个参数对应Y轴,第3个参数对应Z轴,参数不允许省略。需要配合perspective(500px)使用。 |
translatez() |
指定对象Z轴的平移 |
rotate3d() |
指定对象的3D旋转角度,其中前3个参数分别表示旋转的方向x,y,z,第4个参数表示旋转的角度,参数不允许省略 |
rotatex() |
指定对象在x轴上的旋转角度 |
rotatey() |
指定对象在y轴上的旋转角度 |
rotatez() |
指定对象在z轴上的旋转角度 |
scale3d() |
指定对象的3D缩放。第1个参数对应X轴,第2个参数对应Y轴,第3个参数对应Z轴,参数不允许省略 |
scalez() |
指定对象的z轴缩放 |
位移案例
1 | <style> |
正方体案例
1 | <style> |
动画
可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
| 属性 | 描述 |
|---|---|
animation |
复合属性。设置对象所应用的动画特效 |
animation-name |
设置对象所应用的动画名称, @keyframes 定义动画 |
animation-timing-function |
设置对象动画的过渡类型 |
animation-delay |
设置对象动画延迟的时间 |
animation-iteration-count |
设置对象动画的循环次数 |
animation-direction |
设置对象动画在循环中是否反向运 |
animation-fill-mode |
检索或设置对象动画时间之外的状态 |
keyframes 语法
@keyframes <name> { <keyframes-blocks> }
| 取值 | 描述 |
|---|---|
<name> |
动画名称 |
<keyframes-blocks> |
定义动画在每个阶段的样式,即帧动画。使用 from/to或 percentage(百分比)设置从一种状态过渡到另一种状态。 |
1 | @keyframes testanimations { |
1 | //动画使用案例 |
animate.css
Animate.css是一个可在您的Web项目中使用的即用型跨浏览器动画库.
安装 :
npm install animate.css --savecdn
https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.0.0/animate.min.css
基本用法:
安装Animate.css之后,将类animate__animated以及动画名称添加到元素中(不要忘记animate__前缀!)
1 | <h1 class="animate__animated animate__bounce">An animated element</h1> |
媒体查询
在CSS2中媒体查询可以针对不同的媒体类型(包括显示器、便携设备、电视机,等等)设置不同的样式规则。但是这些多媒体类型在很多设备上支持还不够友好。css3在css2的基础之上改进了查找设备的类型,CSS3 根据设置自适应显示。媒体查询可用于检测很多事情,例如:viewport(视窗) 的宽度与高度、设备的宽度与高度、朝向 (智能手机横屏,竖屏) 、分辨率。
@media指定样式表规则用于指定的媒体类型和条件。- 示例
1
2
3
4
5@media screen and (max-width: 300px) {
body {
background-color:lightblue;
}
}
字体图标库
字体图片库可以在让在页面中设置图标颜色大小像设置文本一样便捷。
推荐使用 阿里巴巴矢量图标库
网格布局(Grid)
网格布局(Grid)是最强大的 CSS 布局方案。
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。
Flex 布局是轴线布局,只能指定”项目”针对轴线(X,Y 水平线和垂直线)的位置,可以看作是一维布局。Grid 布局则是将容器划分成 行和列,产生单元格,然后指定”项目所在”的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。
窗口与子元素
网格分为 容器 与 子元素, 与flex一机子元素是指容器的直接子级。
display:grid或display:inline-grid来创建一个网格容器。
网格的行和列
grid-template-columns 定义每一列的宽度。grid-template-rows 定义每一行的高度值。
1 | <style> |
运行效果:
grid-template-columnsgrid-template-rows的取值个数并不固定,多个值之间用空格分隔, 第一个参数值表示第一行或第一列,第二个参数值表示第二行或第二列,以此类推。
grid-template-columns定义了网格共有多少列,并指定每一列的宽度。grid-template-rows定义了网格中行的高度。如果实际的子元素组成的行超过了设置的行数值,则内容撑开行高。
单位 fr
grid-template-columns grid-template-rows 可以使用任意的长度单位来定义。新的fr单位代表网格容器中可用空间的一等份,可以使网络布局更加的灵活。
1 | .box { |
minmax(min, max)
是一个来定义大小范围的属性,大于等于min值,并且小于等于max值。如果max值小于min值,则该值会被视为min值。
1 | .box { |
auto
auto关键字表示由浏览器自己决定长度。
1 | .box { |
repeat()
使用 repeat() 函数可以简化行与列的赋值
1 | .box { |
repeat()函数参数说明:
- 第一个参数: 列/行 数
- 第二个参数: 第 行/列 的 高度/宽高值
多出单元格的设置宽高设置
grid-auto-columns属性和grid-auto-rows属性用来设置,浏览器自动创建的多余网格的列宽和行高。
1 | .box { |
运行效果:
网格行和列优先排列
划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是”先行后列”,即先填满第一行,再开始放入第二行。
grid-auto-flow 可以修改排列的顺序。默认值是row,即”先行后列”。也可以将它设成column,变成”先列后行”。
子元素设置
合并单元格
grid-column-start合并列的起始位置grid-column-end合并列的结束位置grid-row-start合并行的起始位置grid-row-end合并行的结束位置
1 | .box { |
运行效果:
单元格层叠
在合并单元格时多个单元格可以占用同一个位置,出现单元格层叠。使用z-index可以控制单元格的层叠的顺序。
1 | .box { |
运行效果:
单元格间距
grid-column-gap横向间距grid-row-gap纵向间距
1 | .box { |
运行效果:
网格嵌套
一个网格子元素可以也成为一个网格容器。
1 | <style> |
网格布局的对齐方式
单元格内 内容对齐方式
justify-items属性设置单元格内容的水平位置(左中右)align-items属性设置单元格内容的垂直位置(上中下)。
这两个属性的写法完全相同,都可以取下面这些值。
start:对齐单元格的起始边缘。end:对齐单元格的结束边缘。center:单元格内部居中。stretch:拉伸,占满单元格的整个宽度(默认值)。
place-items属性是align-items属性和justify-items属性的合并简写形式。place-items: <align-items> <justify-items>;
1 | .box { |
运行效果:
网格内容在容器内部了的对齐方式
justify-content属性,justify-content: start | end | center | stretch | space-around | space-between | space-evenly;align-content属性,align-content: start | end | center | stretch | space-around | space-between | space-evenly;place-content属性place-content: <align-content> <justify-content>
start- 对齐容器的起始边框。end- 对齐容器的结束边框。center- 容器内部居中。stretch- 项目大小没有指定时,拉伸占据整个网格容器。space-around- 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍。space-between- 项目与项目的间隔相等,项目与容器边框之间没有间隔。space-evenly- 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。
1 | body,html,.box{ |
运行效果:
子元素内设置对齐方式
justify-self属性,justify-self: start | end | center | stretch;align-self属性,align-self: start | end | center | stretch;place-self属性place-self: <align-self> <justify-self>;
justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目。align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目。











