CSS(二) |
一、继承(样式的继承)
1、为元素设置的样式,同时也会应用到它的后代元素
2、继承是发生在祖先和后代元素之间,方便开发
3、利用继承,可以将通用样式放于共同的祖先标签中,仅需设置一次
4、并不是所有样式都会被继承 如:背景相关,布局相关等
二、选择器的权重
1、发生样式冲突时,由选择器的权重来决定优先显示哪种样式
2、内联样式(1,0,0,0) id选择器(0,1,0,0),类和伪类选择器(0,0,1,0),元素选择器(0,0,0,1)
3、比较优先级时,需将所有选择器的优先级进行相加,优先级越高,越先显示 分组选择器是单独计算
4、选择器的累加不会超过最大的数量级 如:类选择器无论怎么加都不会高于ID选择器越具体的,优先级越高
5、若优先级相同,则优先使用靠下的样式——下一个样式将上一个覆盖了
6、通配选择器(0,0,0,0) 继承的样式没有优先级
看图理解
7、!important 则此时该样式获得最高优先级
开发的时候慎用,改起来麻烦
三、em和rem
1、em是相对于元素的字体大小来计算的
2、1 em = 1 font-size
3、em会根据字体大小的改变而改变(自身字体)
4、rem是根据根元素的字体大小来计算(html)
四、文档流
1、网页是一个多层的结构,一层摞一层,文档流是网页的基础
2、创建的元素默认都是在文档流中进行排列的
3、块元素:
- 块元素在页面中独占一行,垂直排列
- 默认宽度是父元素的全部(会把父元素撑满)
- 默认高度是被内容撑开
4、行内元素:
- 不会独占一行,只占自身大小
- 行内元素在页面中自左向右,水平排列
五、盒模型
1、css将页面中的所有元素都设置为一个矩形的盒子
2、组成:内容区(content)、边框(border)、内边距(padding)、外边距(margin)
3、内容区(content):元素中所有子元素和文本内容均在此排列
内容区的大小由width和height来设置
4、边框(border):至少要设置border-width,border-color,border-style,
- border-width可以不指定,一般默认3px
- 可以指定四个方向的值,四个值:上 右 下 左, 三个值:上 左右 下 两个值:上下 左右
- border-xxx-width指定任意方向的宽度,单独指定某一边
- border-color可以分别指定各个方向边框颜色,也可以不写,不写时默认是color的颜色
- border-style指定边框样式:可选值:solid实现,dotted点状虚线,dashed虚线,double双线
- border-xxx:none去掉某一个方向的边框
简写:
5、内边距(padding):内容区和边框之间的距离,内边距会影响盒子大小,背景会延伸到内边距上
6、一个盒子的可见框大小由内容区,边框,内边距共同决定
7、外边距(margin):不会影响盒子大小,会影响盒子的位置
- margin-top上外边距 正值:向下移动
- margin-left 左外边距 正值:向右移动
- 元素在页面中是按照自左向右的顺序排列
- 默认情况下,若设置为左、上外边距则移动自身,设置右、下外边距,则会移动其他元素
- margin-bottom下外边距,设置政治,其下边的元素会向下移动
- 默认情况下,设置margin-right没有用
六、元素水平方向布局
1、元素在其父元素中水平方向的位置由以下几个属性共同决定:
margin-left、border-left,padding-left,width,padding-right,border-right,margin-right
2、水平方向布局必须满足以下的等式:上述七个元素相加之和=其父元素的内容区宽度
- 若这七个值中没有auto情况,则会自动调整margin-right来使等式满足
- 若一个宽度和一个外边距设置为auto,则宽度会调整到最大
- 若三个值都设置为auto,则外边距都是0,宽度最大
- 若将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同值 ,常利用该特点来是一个元素在其父元素中水平居中
七、垂直方向布局
1、子元素是在父元素的内容区中排列
2、若子元素大小超过了父元素,则子元素会从父元素中溢出
3、可选值:
- visible 默认值,子元素从父元素溢出,在父元素外部显示
- hidden 溢出内容将会被裁剪不会显示
八、外边距的折叠(只有垂直方向才会发生重叠)
1、相邻的垂直方向外边距会发生重叠现象
2、兄弟元素:
- 外边距,取两者之间的较大值(正值)
- 若相邻的外边距一正一负,取两者和
- 若相邻的外边距都是负值,取绝对值较大的
- 兄弟元素之间外边距重叠对开发是有利的,无需处理
3、父子元素:
- 相邻外边距,子元素(上外边距)会传递给父元素
- 利用padding修改父元素的长宽
- 利用边框,将两者隔开,仍然要修改父元素的长宽