这是我参与「第五届青训营」笔记创作活动的第2天。
-
CSS:Cascading Style Sheets 层叠样式表
-
CSS规则=选择器+声明(属性:属性值)
-
CSS用法:
- 外链:link标签引入CSS文件
- 嵌入:style标签内进行CSS规则声明
- 内联:样式声明写入标签的style属性中
-
工作流程:
加载HTML== > 解析HTML(加载CSS == >解析CSS)== > 创建Dom树(添加样式到Dom节点) == > 展示页面
选择器
-
通配选择器:
* -
标签选择器:
tag -
类选择器:
.class -
id选择器:
#id -
属性选择器:
[attr="value"] -
伪类选择器:书写顺序如下,
- link:超链接未访问状态
- visited:超链接访问过后的状态
- hover:鼠标悬停
- active:激活状态,鼠标按下
-
伪元素选择器:必须有content
- before
- after
-
选择器分隔:
- 后代元素——
空格 - 子元素——
> - 相邻兄弟元素——
+ - 兄弟元素——
~ - 多个选择器——
,
- 后代元素——
层叠
-
比较重要性
!important关键字- 作者样式表
-
比较特殊性
CSS 优先规则:
选择器选中的范围越窄,特殊性越高
具体规则:通过选择器计算出一个四位数(xxxx)
- 千位:内联样式记1,否则记0
- 百位:id选择器的数量
- 十位:类选择器+属性选择器+伪类选择器
- 个位:元素选择器+伪元素选择器
!important > 内联样式 > id 选择器 > 类选择器 = 伪类选择器 = 属性选择器 > 标签选择器 = 伪元素选择器
-
比较源次性
代码靠下的更重要
盒模型
box:盒子,每个元素在页面中都会生成一个矩形区域(盒子)
盒子类型
- 行盒:display:inline;不换行
- 块盒:display:block;独占一行
盒子组成
由内到外依次是:
- 内容 content
- 填充 padding
- 边框 border
- 外边框 margin
盒模型bug
在对设计稿进行页面重构时,默认使用的内容盒可能会导致盒子宽高不匹配,解决方案
- 精确计算
box-sizing:border-box(改变宽高的影响范围)溢出处理
overflow属性,边框盒溢出后的处理方式hidden:隐藏;scroll-y|scroll-x:生成y轴或x轴的滚动条
断词规则
word-break属性,影响文字在什么位置被截断换行normal:普通,在文字或单词处截断;break-all:截断所有文字;keep-all:保持都在单词截断
空白处理
white-space属性,空白字符处理方式
overflow属性,溢出处理
text-overflow,文本溢出处理方式ellipsis:文本溢出以省略号显示
空白折叠
空白折叠,发生在行盒内部或行盒之间
保留图片或其他媒体的比例
object-fit属性:指定元素的内容应该如何去适应指定容器的高度与宽度contain:保持比例;fill:自动填充;cover:等比例填充;
视觉格式化模型
常规流
块盒
-
块盒的宽度auto即为父元素的宽度;块盒的高度auto是适应内容的高度
-
除了height以外的样式,padding,margin中的百分比都是相对于父元素context的宽度
- 父元素的context即是: box-sizing: content-box那么就是context的宽度; box-sizing:border-box 那么context的宽度就是context宽度-context的宽度
-
上下外边距合并
两个文档流块盒上下边距相邻会进行合并,外边距取大值
解决方案:BFC
浮动
-
应用场景:文字环绕,横向排列
-
排列方式:
-
左浮动的盒子靠左靠上排列;右浮动的盒子靠右靠上排列
-
浮动盒子在包含块中排列时,回避开常规流块盒
-
常规流块盒排列时,无视浮动盒子
-
行盒排列时会避开浮动盒子(文字环绕)
若文字没有在行盒中,浏览器自动生成一个行盒包裹文字,称为匿名行盒
-
-
高度坍塌
原因:常规流盒子的高度不考虑浮动盒子
解决方案:清除浮动,
clear属性(默认值:none;left:清除左浮动;right:清除右浮动;both:清除两侧浮动)在父元素添加clearfix类并在伪元素中,清除浮动
定位
position属性(static:默认值;relative:相对定位;absolute:绝对定位;fixed:固定定位;sticky:粘性定位)
- relative相对定位:相对正常位置进行定位
- absolute绝对定位:相对最近的定位祖先元素进行定位
- fixed固定定位:相对视口定位
- sticky粘性定位:在relative和fixed之间切换,当遇到给定的偏移位置时,固定在该点
伪类选择器
-
:first-child:第一个子元素 -
:last-child:最后一个子元素 -
:nth-child(n):第n个子元素 -
:nth-of-typ(n):第n个同父元素的子元素n 可以是数字、关键词或公式,例如:
odd:选中所有偶数
an+b:表示周期的长度,n 是计数器(从 0 开始),b 是偏移值
flex布局
-
容器属性(父元素)
- flex-diraction:子元素排列方式
- flex-wrap:换行方式
- flex-flow:flex-diraction+flex-wrap
- justify-content:主轴(X轴)对齐方式
- align-items:副轴(Y轴)对齐方式
- align-content:设置行对齐
-
项目属性(子元素)
- order:元素排列顺序
- align-self:覆盖容器的align-items
- flex:空间分配
- flex-grow:剩余扩展比例
- flex-shrink:超出收缩比例
- flex-basis:伸缩基准值
grip布局
-
容器属性(父元素)
-
grid-template-rows/columns:需要划分的行数
repeat(100px,3) == 100px,100px,100px
auto-fill:自动填充;fr:单位,译为片段;minmax(x,y):最小值为x,最大值为y
-
grid-template-areas:成员单元格
-
gap:item之间的距离
-
grid-auto-flow:放置顺序
-
justify-content/align-items:水平,竖直对齐方式
-
grid-auto-columns:item多余宽高
-
-
项目属性(子元素)
- grid-column:x/m/y/n 网格线水平(x,y)竖直(m,n)
- grid-area:指定item区域