[ 前端与 HTML | 青训营笔记]

63 阅读6分钟

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

一、本堂课重点内容

  1. CSS 代码构成、使用方法和工作流程
  2. CSS 选择器组、文本渲染和调试
  3. CSS的继承与求值
  4. CSS盒模型

二、详细知识点介绍

/走进前端技术栈 - CSS/

1.ccs是什么?

用来定义页面的样式,可以调节字体颜色、页面元素的大小和位置、还可以添加动画效果 

2.css的构成及引入

  • 构成image.png

  • CSS的引入

    • 可以使用外链、嵌入、内联3种方式

3.css是如何工作的?

  1. 浏览器载入 HTML 文件
  2. 将 HTML 文件转化成一个 DOM
  3. 浏览器会拉取该 HTML 相关的大部分资源,比如嵌入到页面的图片、视频和 CSS 样式
  4. 浏览器拉取到 CSS 之后会进行解析,根据选择器的不同类型把他们分到不同的容器中
  5. 浏览器基于它找到的不同的选择器,将基于选择器的规则应用在对应的 DOM 的节点中,并添加节点依赖的样式(这个中间步骤称为渲染树)
  6. 上述的规则应用于渲染树之后,渲染树会依照应该出现的结构进行布局
  7. 着色 image.png

4.CSS 流程之选择器组、文本渲染

选择器示例
类型选择器h1{ }
通配选择器* { }
类选择器.box { }
id选择器#unique { }
标签属性选择器a[title] { }
伪元素选择器p::first-line { }
伪类选择器p:first-child { }
后代选择器A B
子代选择器A>B
相邻兄弟选择器A+B
兄弟选择器A~B
 状态伪类  :link :visited :hover :active :focus
 结构伪类  :first-child:last-child

5.颜色-HSL

  • Hue 色相
  • Saturation 饱和度(%)
  • Lightness 亮度(%)
  • alpha 透明度 为1时不透明[0,1]

6.Font

font:style weight size/height family

字体font-family

  • 通用字体族
  • 衬线体serif
  • 无衬线体Sans-Serif
  • 手写体Cursive
  • Fantasy
  • 等宽字体Monospace

字体大小font-size

  • 关键字smll、medium、large
  • 长度 px、em
  • 百分数
  • 字重font-weight 100-900

其他的一些常见属性

  • 相对于父元素字体大小 line-height
  • 文本水平位置text-align
  • 行距 spacing
  • 文本缩进 text-indent
  • 属性规定添加到文本的修饰 text-decoration
  • 控制空白符的展示 white-space

7.调试css

可以F12唤起浏览器调试工具进行调试

/深入 CSS/

1. CSS 选择器的特异度

选择器特异度 Specificity

  1. "#"id
  2. .伪类
  3. E 标签

2. CSS 继承

  • color可继承,未定义可以冒泡到其父级去寻找
  • 某些属性会自动继承其父级的计算值,一般文字属性可继承
  • 盒模型相关不可继承
  • 显示继承 *{ xxx:inherit; }

3. CSS 求值过程解析

css中 ,每个属性都有一个初始值。 background-color的初始值为transparentmargin-left的初始值为0,可以使用initial关键字显式重置为初始值background-color:initial

css的求值规则

image.png

4. CSS 布局方式及相关技术

布局Layout

确定内容的大小和位置的算法 依据元素、容器、兄弟节点和内容等信息来计算

布局相关技术

  • 常规流:行级、块级、表格布局、flex布局、boxgrid布局
  • 浮动
  • 绝对定位

width

  • height 容器有指定高度时,百分数才会生效
  • padding
  • border 样式颜色粗细 有4个方向

margin

  • 使用margin:auto水平居中
  • margin collapse
  • box-sizing:border-box
  • 控制溢出内容 overflow visible hidden scroll

小技巧

  • 通过设置容器宽高为0时就只剩下边框,通过设置不同的透明度得到不同的三角形

/CSS盒模型/

一、CSS 盒模型 - 行级

  • 和其他行级盒子放在一行或者拆开成多行
  • 盒模型中的width、height不适用 display:inline

IFC内排版规则:

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

inline-block

  • 本身行级可以放在行盒
  • 可以设置宽高
  • 整体不会拆散成多行

处理连续的长的不换行超出容器的范围,可以使用 overflow-wrap

二、CSS 盒模型 - 块级

  • 不和其他盒子并列摆放
  • 适用于所有盒模型属性 display:block

1.块级排版上下文

某些容器会创建一个BFC

  • 根元素
  • 浮动、决定定位、inline-block
  • Flex子项和Grid子项
  • overFlow值不是bisible的块盒
  • display:flow-root

2.BFC内排版规则

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

3.FlexBox

一种新的排版上下文, 它可以控制子级盒子的:

  • 摆放的流向
  • 摆放顺序
  • 盒子宽度和高度
  • 水平和垂直方向的对齐
  • 是否允许折行

4.弹性盒子容器的对齐方式

横向 justify-content:

  • flex-start
  • flex-end
  • center
  • space-between
  • space-around
  • space-evenly

纵向 align-items:

  • flex-start
  • flex-end
  • center
  • stretch
  • baseline
  • Flexibility

5.可以设置子项的弹性:

当容器有剩余空间时,会伸展;容器空间不够时,会收缩

  • flex-grow 有剩余空间时的伸展能力
  • flex-shrink 容器空间不足时收缩的能力
  • flex-basis 没有伸展或收缩的基础长度.

6.网格Grid

  • 使元素生成一个块级的Grid容器
  • 使用grid-template相关属性将容器划分为网格
  • 设置每一个子项占用那些行列
grid area 网格区域

image.png

7.float浮动 多用于实现文字环绕

8.position 属性

  • static 默认值
  • relative 相对自身原本位置偏移,不脱离文档流
  • absolute 相对定位,相对非static祖先元素定位
  • flxed 相对视口绝对定位
position:relative

在常规流里面布局,相对于自己本应该在位置进行偏移,流内其他元素当它没有偏移时一样布局

position:absolute
  • 脱离常规流
  • 不会对流内元素布局造成影响
  • 相对最近的非static祖先定位.

三、总结

通过这堂课的学习,夯实巩固了我对css的了解,发现了一些以前学习css没注意到细节,收获了一些在写css时的小细节小技巧,并且对css的工作流程有了更加清晰的认知。在布局方面多使用flex或者grid来实现页面的布局,让浮动回归最初实现文本环绕的功能。

四、引用

  1. 课程视频juejin.cn/course/byte…

  2. MDN 上的CSS参考 developer.mozilla.org/zh-CN/docs/…