走进前端技术栈--CSS | 青训营笔记

78 阅读5分钟

[这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天]

1. css是什么?

用于定义页面元素的样式,如 设置字体和颜色 ,元素的位置和大小等

代码展示

h1 {
   color: pink;
   font-size: 12px;
}

h1是标签选择器,选择器可以帮助我们快速地找出页面中的元素,并设置样式。类似的还有.h1是类选择器;#h1是id选择器;*是通配选择器,它会选出页面中所有的元素

需要注意的是: 如果使用了id选择器,那么请保证该id的唯一性

2. 如何找到目标元素?

按照标签名,类名或id

按照属性

按照DOM树中的位置

3. css选择器

标签选择器 h1; 类选择器 .h1; id选择器 #h1

属性选择器: 选出带有某些特定属性的元素, 如 input[type="password"] 表示选出带有属性type=passwordinput

4. css选择器的组合

名称语法说明示例
直接组合AB满足A同时满足Binput:focus
后代组合A B选中B,如果它是A的子孙nav a
亲子组合A > B选中B,如果它是A的子元素section > p
兄弟选择器A ~ B选中B,如果它在A后且和A同级h2 ~ p
相邻兄弟选择器A + B选中B,如果它紧跟在A的后面h2 + p

5. css中的伪类

状态性伪类

选中处于某种状态下的元素,如 a:hover 表示选中鼠标悬停在的a元素,多用于和用户的交互

结构性伪类

通过判断元素在DOM树中的位置来决定是否选中该元素。如 h:first-child 表示选中第一次出现出现的h元素

6. 关于样式继承

某些元素属性会自动继承其父元素的计算值,除非显示指定一个值

可以继承的属性 如: 与文字相关的属性

不可继承的属性 如: 与盒模型相关的属性

>如何转换? 我们可以使用 * 通配符来指明哪些元素需要继承

7. 样式初始值

CSS 中,每个属性都有一个初始值, 如: background-color 的初始值为 transparent, margin-left 的初始值为0

可以使用 initial 关键字显示重置为初始值 如 background-color: initial

8. css求值过程

浏览器在解析css时候,通过一下过程得到最终的结果,该过程称为css求值过程

1.filtering--筛选过程

在该过程中,浏览器的渲染主进程会遍历样式表(css表)。渲染主进程会根据选择器是否匹配,属性是否有效,是否符合当前的media等条件进行对元素的筛选。最终得到一个Declared Value---声明值注意:一个元素的某个属性可能有多个声明值, 这是因为可能有多个样式匹配到同一个属性

2.cascading--决定使用哪个属性值

在该过程中,会将filtering得到的结果按照来源、!important、选择器特异性、书写顺序等规则选出优先级最高的一个属性值。最终等到一个Cascaded Value---层叠值

3.defaulting--是否使用默认值

如果cascading过程得到的Cascaded Value值为空,那么会将Cascaded Value设置为默认值,最终得到一个Specified Value---指定值 注意:Specified Value值不会为空

4.resolving--处理

在该过程中,会对defaulting过程得到的结果进行处理,将一些相对值或者关键字转化为绝对值,比如:em转化为px,相对路径转化为绝对路径,最终得到一个 Computed Value---计算值 Computed Value是浏览器在不进行实际布局的情况下,所得到最具体的值, 比如:设置某个元素的宽度为60%,在不进行实际布局的情况下无法计算具体值

5.formatting--进一步处理

在该过程中,将Computed Value进一步转换,比如关键字、百分比等都转为绝对值,最终得到Used Value---使用值

6.constraining-- 得到最终渲染值

在该过程中,会将Used Value中小数像素转为整数,最终得到实际值

9. 布局的相关技术

常规流

浮动

绝对定位

10. 布局

常规流 Nromal Flow

根元素、浮动和绝对定位的元素会脱离标准流

其他元素都在常规流之内(in-flow)

IFC (行级排版上下位)

只包含行级盒子的容器会创建一个IFC

IFC的排版规则

  • 盒子在以内水平摆放
  • 一行放不下时,换行显示
  • text-align 决定一行内盒子的水平对齐
  • vertica-align 决定一个盒子在行内的垂直对齐
  • 行盒会避开浮动元素

BFC(块级排版上下文)

某些容器会创建一个BFC

  • 根元素
  • 浮动、绝对定位、inline-block
  • Flex子项和Grid子项
  • overflow值不为 visible 的块盒
  • display: flow-root

BFC内盒子的排版规则

  • 盒子从上到下摆放
  • 垂直margin合并
  • BFC内盒子的margin不会与外面的合并
  • BFC不会和浮动元素重叠

11.flex属性值

附上一张flex属性值 微信图片_20230116222237.png

12. Grid布局 display: grid

使用 grid-template-columns 来布局列, 使用 grid-template 微信图片_20230116223236.png 1fr表示占容器所剩空间的一份

使用grid-area来进行划分

grid-area相当于 grid-row-start等属性的缩写 微信图片_20230116224557.png