CSS
CSS三大特性
层叠性
解决样式冲突问题。
- 样式冲突:就近原则
- 样式不冲突:不会层叠
继承性
优先级
- 选择器相同,则执行层叠性
- 选择器不同,则根据选择器权重执行
用到多个后代样式时,优先级的情况:
- 1.id个数多的优先级高
- 2.id和class个数相等看元素个数
- 3.优先级相同看选择器类型和个数
简单记忆法:通配符*和继承权重为0,标签选择器为1,类(伪类)选择器为10,id选择器为100,行内样式表为1000,!important为无穷大。
权重叠加:
- div ul li ---> 3
- .nav ul li ---> 12
- a:hover ---> 11
- .nav a ---> 11
盒模型
- 四个属性:content(内容)、padding(内边距)、border(边框)、margin(外边距)
- 两种类型:标准盒模型,怪异盒模型。标准盒模型的特点是content的宽度和高度只包括元素本身的内容,不包括padding、border和margin;怪异盒模型的特点是content的宽度和高度包括元素本身的内容、padding和border,但不包括margin。
- css盒模型的类型可以通过box-sizing属性来设置。box-sizing: content-box表示使用标准盒模型;box-sizing: border-box表示使用怪异盒模型。
- css盒模型可以影响元素在页面中占据的空间大小和位置,因此需要注意计算元素的实际宽度和高度,以及调整元素之间的间距。
边框
border: border-width || border-style || border-color
内边距padding
外边距margin
典型应用:可以让块级盒子水平居中。
标准盒(W3C)和怪异盒(IE)


水平垂直居中
水平居中
行内元素水平居中
只需给父元素设置text-align:center即可实现。
css
.center{
text-align:center;
}
<div class="center">水平居中</div>
块级元素水平居中
1.定宽块级元素:只需给需要居中的块级元素加margin:0 auto即可,但这里需要注意的是,这里块状元素的宽度width值一定要有
js
.center{
width:200px;
margin:0 auto;
border:1px solid red;
}
<div class="center">水平居中</div>
2.不定宽块级元素:
- 方法1:设置table,通过给要居中显示的元素,设置display:table,然后设置margin:0 auto来实现
css
.center{
display:table;
margin:0 auto;
border:1px solid red;
}
<div class="center">水平居中</div>
- 方法2:子元素设置inline-block(多个块状元素),同时父元素设置text-align:center
css
.center{
text-align:center;
}
.inlineblock-div{
display:inline-block;
}
<div class="center">
<div class="inlineblock-div">1</div>
<div class="inlineblock-div">2</div>
</div>
- 方法3:设置flex布局,只需把要处理的块状元素的父元素设置display:flex,justify-content:center;
css
.center{
display:flex;
justify-content:center;
}
<div class="center">
<div class="flex-div">1</div>
<div class="flex-div">2</div>
</div>
- 方法4:position + 负margin;
- 方法5:position + margin:auto;
- 方法6:position + transform;
垂直居中
单行文本垂直居中
- 设置paddingtop=paddingbottom;或
- 设置line-height=height;
多行文本垂直居中
- 通过设置父元素table,子元素table-cell和vertical-align,vertical-align:middle的意思是把元素放在父元素的中部
css
.center {
width: 200px;
height: 300px;
display: table;
border: 2px solid blue;
}
.table-div {
display: table-cell;
vertical-align: middle;
border: 1px solid red;
}
<div class="center">
<div calss="table-div">多行文本垂直居中</div>
</div>
块级元素垂直居中
- 方法1:flex布局:父元素设置display: flex和align-items:center,要求:父元素必须显示设置height值
- 方法2:利用position和top和负margin(需知宽高):1.设置元素为absolute/relative/fixed;2.margin=负一半
- 方法3:利用position和top/bottom和margin:auto(注意不是margin:0 auto),1.position:absolute/relative/fixed;2.top/bottom:0;3.margin:auto
- 方法4:利用position和top和transform,transform中translate偏移的百分比就是相对于元素自身的尺寸而言的
水平垂直居中
- 方法1:绝对定位+margin:auto
css
div{
width: 200px;
height: 200px;
background: green;
position:absolute;
left:0;
top: 0;
bottom: 0;
right: 0;
margin: auto;
}
- 方法2:绝对定位+负margin
css
div{
width:200px;
height: 200px;
background:green;
position: absolute;
left:50%;
top:50%;
margin-left:-100px;
margin-top:-100px;
}
- 方法3:绝对定位+transform
css
div{
width: 200px;
height: 200px;
background: green;
position:absolute;
left:50%; /* 定位父级的50% */
top:50%;
transform: translate(-50%,-50%); /*自己的50% */
}
- 方法4:flex布局
css
.box{
height:600px;
display:flex;
justify-content:center; //子元素水平居中
align-items:center; //子元素垂直居中
/* aa只要三句话就可以实现不定宽高水平垂直居中。 */
}
.box>div{
background: green;
width: 200px;
height: 200px;
}
- 方法5:table-cell实现居中,父元素设置display: table-cell;text-align: center(子元素水平方向居中);vertical-align: middle(子元素垂直方向居中);
CSS实现三角形
css
.box {
width: 0;
height: 0;
line-height: 0;
font-size: 0;
border: 50px solid transparent;
border-top-color: pink;
margin: 100px auto;
}
实现效果图:

浮动
浮动特性
- 浮动元素会脱离标准流(脱标)
- 浮动的元素会一行内显示并且元素顶部对齐
- 浮动的元素具有行内块元素的特性
清除浮动
为什么清除浮动?
- 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
清除浮动的方法:
- 额外标签法(隔墙法)-W3C推荐
- 父级添加overflow属性
- 父级添加after伪元素
- 父级添加双伪元素
定位
position属性:
- static默认值
- relative相对定位
- absolute绝对定位
- fixed固定定位
- sticky粘性定位
实现两栏布局右侧自适应、三栏布局中间自适应
两栏布局
思路1:
- 使用 float 左浮左边栏
- 右边模块使用 margin-left 撑出内容块做内容展示
- 为父级元素添加BFC,防止下方元素飞到上方内容
代码:
html
<style>
.box{
overflow: hidden; 添加BFC
}
.left {
float: left;
width: 200px;
background-color: gray;
height: 400px;
}
.right {
margin-left: 210px;
background-color: lightgray;
height: 200px;
}
</style>
<div class="box">
<div class="left">左边</div>
<div class="right">右边</div>
</div>
思路2:
- 使用flex弹性布局
代码:
html
<style>
.box{
display: flex;
}
.left {
width: 100px;
}
.right {
flex: 1;
}
</style>
<div class="box">
<div class="left">左边</div>
<div class="right">右边</div>
</div>
三栏布局
布局方式:
- 两边使用 float,中间使用 margin
- 两边使用 absolute,中间使用 margin
- 两边使用 float 和负 margin
- display: table 实现
- flex实现
- grid网格布局
其中flex布局:
html
<style type="text/css">
.wrap {
display: flex;
justify-content: space-between;
}
.left,
.right,
.middle {
height: 100px;
}
.left {
width: 200px;
background: coral;
}
.right {
width: 120px;
background: lightblue;
}
.middle {
background: #555;
width: 100%;
margin: 0 20px;
}
</style>
<div class="wrap">
<div class="left">左侧</div>
<div class="middle">中间</div>
<div class="right">右侧</div>
</div>
CSS3新增属性
新增选择器
属性选择器
结构伪类选择器
伪元素选择器
盒模型
CSS3中可以通过box-sizing来指定盒模型,有2个值:content-box、border-border,这样我们计算盒子大小的方式就发生了变化。
图片模糊
滤镜filter
将模糊或颜色偏移等图形效果应用于元素。
filter: 函数(); 例如:filter: blur(5px); blur模糊处理,数值越大越模糊。
calc函数
在声明CSS属性时执行一些计算。
过渡
flex
常见父项属性
flex-direction设置主轴方向
- row:默认值从左到右
- row-reverse:从右到左
- column:从上到下
- column-reverse:从下到上
justify-content设置主轴子元素排列方式
- flex-start:默认值 从头部开始,如果主轴是x轴,则从左到右
- flex-end:从尾部开始排列
px、em、rem、vw、vh、vm
- px 像素
- em 相对长度单位
- rem 相对单位
- vw 根据窗口的宽度,分成100等分,100vw就表示满宽,50vw就表示一半宽
- vh 窗口的高度
页面元素显示
实现隐藏元素方式有如下几种:
display:none
将元素从渲染树中删除,不占据空间,并且元素及其内容都不可见。相当于元素不存在。
visibility:hidden
保留元素在渲染树中的位置和大小,但元素本身不可见。元素仍然占据空间。
opacity:0
设置透明度为0,元素仍然占据空间,并且其子元素也会继承相同的透明度。
snowy