伪元素选择器
元素名::after{content:"在之前"}
::before 在之前 必须要有content
::after 在之后 必须要有content
::first-letter 在首字母
::first-line 在第一行
::selection 鼠标选中的内容
属性选择器
[target="_self"]{font-size : 50 p x}
盒模型
块级元素
占据所有可用宽度,以换行开始
通常用于较大的内容块,比如标题或结构化元素
行内元素
通常用于较小的内容块,如被选设置为粗体或斜体的一些词
只占据内容所需要的宽度,在同一行内一个接一个摆放
盒子的分类
一个元素产生什么样的盒子与它的 display 属性有关
盒子的组成
由 margin、padding、border、content 组成
边框盒(由 border、padding、content 组成)
填充盒(由 padding、content 组成)
内容盒(由 content 组成)
overflow 溢出浮动
overflow:visible;(可见的,默认情况)
overflow:hidden;(隐藏)
overflow:scroll;(生成滚动条)
border-width:所有边框厚度
border-style:所有边框样式
border-color:所有边框颜色
默认情况 内容盒
box-sizing:content-box;
边框盒 自动计算content的width和height
box-sizing:border-box
定位体系
视觉格式化模型规定了三种定位体系
常规流
又叫做普通流,流式布局,文档流,普通文档流
是最常见的定位体系,所有元素默认状态下都是常规流定位
盒子位置
盒子在包含块的垂直方向上依次摆放(按照HTML书写顺序依次摆放)
盒子在包含块中占据的尺寸是整个盒子的尺寸
垂直方向上若两个外边距相邻,则折叠
垂直方向:水平方向上不会重叠
外边距相邻:两个外边距之间没有border、padding和content
合并:均为正数取最大,均为负数取最小,一正一负则相加
浮动
当元素的float属性值为left或right时元素为浮动元素
float:none 不浮动
float:left 左浮动 向上向左排列
float:right 右浮动 向上向右排列
浮动盒子的顶边不得高于上一个盒子的顶边
若放不下则换行
定位体系-绝对定位
任何一个元素都必须属于其中某一种定位体系 设置元素的position属性,则为绝对定位
position:static 默认值,静态位置
position:relative; 相对位置
相对定位 相对于盒子原来的位置偏移
原本所占空间不变 没有脱离文档流
一般会用来做绝对定位的父元素
position:absolute; 绝对位置
相对于设置了定位属性(static)的父元素偏移
如果没有就相对于html元素偏移
脱离文档流 不再占据空间
position:fixed; 固定位置
相对于浏览器窗口的固定位置,不会随着用户的滚动变化
position:sticty; 粘性定位
依赖于用户的滚动,在position:relative;与position:fixed;之间切换(必须有一个方位值)
BFC(块级格式化上下文)
它是一个独立的渲染区域,与这个区域外部毫不相干
如何创建BFC
1、float的值不是none
2、position的值不是static或者relative
3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4、overflow的值不是visible
BFC的作用
1、利用BFC避免上下相邻的两个元素margin重叠
<style> *{ margin: 0; padding: 0; } p { color: #f555; background: yellow; width: 200px; line-height: 100px; text-align:center; margin: 30px; } div{ /* 激活BFC */ overflow: hidden; } </style> <body> <p>看看我的 margin是多少</p> <div> <p>看看我的 margin是多少</p> </div> </body>
2、清除浮动,解决父级高度塌陷的问题
<style> .par { border: 5px solid rgb(91, 243, 30); width: 300px; /* 激活BFC */ overflow: hidden; } .child { border: 5px solid rgb(233, 250, 84); width:100px; height: 100px; float: left; } </style> <body> <div class="par"> <div class="child"></div> <div class="child"></div> </div> </body> </html>
3、自适应两栏布局
<style> *{ margin: 0; padding: 0; } body { width: 100%; position: relative; } .left { width: 100px; height: 150px; float: left; background: rgb(139, 214, 78); text-align: center; line-height: 150px; font-size: 20px; } .right { /* 激活BFC */ overflow: hidden; height: 300px; background: rgb(170, 54, 236); text-align: center; line-height: 300px; font-size: 40px; } </style> <body> <div class="left">LEFT</div> <div class="right">RIGHT</div> </body>
总结:因为BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时,它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。
子绝父相
<div class="box1"> <div class="box2"></div> <div class="box3"></div> <div class="box4"></div> </div>
.box1{ width: 400px; height: 400px; background-color: deeppink; position: relative; top: 100px; left: 100px; } .box2{ width: 100px; height: 100px; background-color: deepskyblue; position: absolute; top: 50px; left: 50px; z-index: 3; }
使用z-index改变堆叠顺序,数值越大,堆叠在越上方
.box2{ width: 100px; height: 100px; background-color: deepskyblue; position: absolute; top: 50px; left: 50px; z-index: 3; } .box3{ width: 100px; height: 100px; background-color: forestgreen; position: absolute; top: 60px; left: 60px; z-index:2 ; } .box4{ width: 100px; height: 100px; background-color: rgb(187, 236, 6); position: absolute; top: 70px; left: 70px; z-index:1 ; }
绝对定位
当浮动元素被设置为绝对定位
元素的float属性会被强制改为none(float属性失效)
绝对定位元素对其他元素不会造成影响
绝对定位的位置:left right top bottom
变化的内容 变化规则 变化时间 transition: all linear 2s;
有序列表
< OL >< /OL>自带数字
无序列表
< UL >< /UL>实心圆
定义列表
< DL >< /DL >
< LI >< /LI >是
列表项样式
属性值 | 含义 |
---|---|
none | 取消列表项样式 |
disc | 默认,标记是实心圆 |
circle | 标记是空心圆 |
square | 标记是实心方块 |
decimal | 标记是数字 |
lower-alpha、upper-alpha | 小写和大写英文字母 |
列如list-style: none;
二级列表(可以在列表中间插入)
当常规流遇上浮动
常规流盒子和浮动盒子混合摆放
浮动盒子在摆放时要避开常规流盒子
常规流盒子在摆放时无视浮动盒子
常规流盒子的自动高度计算时,无视浮动盒子(高度坍塌)
清除浮动
对最后一个子元素使用 clear:both,可防止父元素高度坍塌
清除浮动是为了最后一个常规流盒子
父级:after{content:" "; display:block clear:both}
通过display改变元素盒子的类型
display: inline-block;(行内块)
display:block;(设置为块盒)