一、选择器的优先级
CSS中可以写很多选择器,可以根据id更改内容的样式,也可以改整个标签内容的样式。当多个选择器作用在同一个元素的时候,元素样式将根据选择器特异度变化。这里特异度指的是越特殊的选择器,优先级越高。
上图中,id、伪类、标签数量越多,特异度越高。
举例: 利用选择器的优先级,可以很好地实现按钮复用(只需更改样式,便能区分两个相同的按钮)
二、继承
某些属性会自动继承其父元素的计算值,除非显式指定一个值
说明:strong标签继承了p标签的颜色。与文字相关的属性都是可以继承的,与盒模型(宽度)相关的属性不可继承。
显式继承:关键字inherit,可以让原本不可继承的属性变成可继承的
说明:*是通配符,表示所有标签。box-sizing属性用于定义盒子的宽度值和高度值是否包含元素的内边距和边框。content-box:浏览器对盒模型的解释遵从W3C标准,当定义width和height时,它的参数值不包括border和padding。 border-box:当定义width和height时,border和padding的参数值被包含在width和height之内。
三、初始值
-
CSS中,每个属性都有一个初始值
background-color的初始值为transparent
margin-left的初始值为0
-
可以使用initial关键字显式重置为初始值
background-color:initial
四、CSS求值过程
五、布局(Layout)是什么?
- 确定内容的大小和位置的算法
- 依据元素、容器、兄弟节点和内容等信息来计算
布局相关技术
-
常规流
行级、块级、表格布局、FlexBox、Grid布局
-
浮动
-
绝对定位
说明:width 指定content box宽度,取值为长度、百分数、auto,aotu由浏览器根据其他属性确定,百分数相对于容器的content box宽度。容器有指定的高度时,百分数才生效。
说明:padding 指定元素四个方向的内边距,百分数相对于容器宽度(顺时针)。 border 指定容器边框样式、粗细和颜色
当四条边框颜色不同时可以显示出一个三角形。
margin:auto水平居中
margin collapse 外边距叠加,上下两div(上定义有margin-bottom, 下有margin-top): 叠加取较大的margin值margin在垂直方向上有边界的合并。
区别:box-sizing:border-box;
文字超出部分可以用overflow -visible -hidden -scroll
六、行级vs块级
- 块级不和其他盒子并列摆放,适用所有的盒模型属性
- 行级和其他盒子一起放在一行或拆开成多行,盒模型中的width、height不适用
display属性
- block 块级盒子
- inline 行级盒子
- inline-block 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
- none 排版时完全被忽略
行级排版上下文
简称IFC 只包含行级盒子的容器会创建一个IFC IFC内的排版规则:盒子在一行内水平摆放,一行放不下会换行,text-align决定一行盒子内的水平对齐,vertical-align垂直对齐,会避开浮动元素。
块级排版上下文
简称BFC BFC内的排版规则:盒子从上到下摆放,垂直margin合并,BFC内盒子的margin不会与外面的合并,BFC不会和浮动元素重叠
span是行级元素。
七、FlexBox是什么?
一种新的排版上下文,它可以控制子级盒子的摆放流向、摆放顺序、盒子的宽度和高度、水平和垂直方向的对齐、是否允许折行
对齐
flex根据内容确定宽度高度,摆放从左至右
分为主轴与侧轴
justify-content
align-items
伸展收缩
一维
Flexiblity属性可以伸展和收缩
flex-grow -basis -shrink
Grid布局
二维
display:grid使元素生成一个块级的Grid容器
使用grid-template相关属性将容器划分为网格
按行列划分网格
grid line网格线
浮动
实现文字环绕效果
绝对定位
position属性:
static
relative相对于原本位置偏离
absolute找父级定位,非本身
fixed总是相对于窗口定位
八、学习CSS的几点建议
- 充分利用MDN和W3C CSS规范
- 保持好奇心,善用浏览器的开发者工具
- 持续学习,CSS新特性还在不断出现
九、个人总结
此次课程,学习CSS是怎样工作的,以及相关排版和布局的知识,CSS中的布局可以在常规流中,要符合IFC、BFC、Grid、flex上下文规则排版,也可以用float图文排版,或者用绝对定位来排版。我认为想要掌握CSS的样式和布局是很难的,需要不断调试和练习,不断了解各个布局之间的区别。