理解 CSS | 青训营笔记

112 阅读4分钟

课程重点

  • 基础知识
  • 布局和定位
  • 层叠上下文
  • 变形、过渡、动画
  • 响应式设计
  • CSS生态相关

课程内容

image.png

基础部分

层叠、优先级

image.png 层叠有三大规则,它们的优先程度是依次递减的。

  1. 样式表来源 image.png 如果添加了important的关键字就要反过来。 image.png
  2. 选择器优先级 image.png 那么选择器的优先级是: image.png 即:内联 > ID选择器 > 类选择器 > 标签选择器, 权重相同的情况下以后面出现的选择器为最后规则
    内联样式不属于选择器,只是为了方便记忆,放在这里做对比。
    可以 将A、B、C、D分别代表内联、ID选择器、类选择器、标签选择器
    以下题为例:求在以下代码中,文案TEXT的颜色最终是什么。 image.png 依题:
    yellow和red:均出现了一次标签选择器和一次内联,可记为A:0 B:0 C:1 D:1
    blue和green均只出现一次标签选择器,均记为 0 0 0 1
    依次对照下来AB级同,而yellow、red的C项均大于其余颜色,虽然yellow和red两个权重相同,但是red在后面出现,所以最后颜色是red。
  3. 源码位置 image.png

那么通过层叠概念,我们收获了一些书写CSS代码的好实践:

  • 选择器尽量少用id(优先级比较高,不利于后面的覆盖)
  • 尽量不用用!important
  • 自己的样式加载在引用库样式的后面

继承

image.png

CSS的值和单位

image.png

盒模型

image.png 由盒模型的特性实现一些展示形式? image.png

负外边距

padding、border、margin中,只有margin可以设置负值 image.png

布局

image.png

常规流布局

image.png

块级格式化上下文BFC(面试会问)

image.png

外边距塌陷

image.png

内联级格式化上下文

image.png 常见的使用示例: image.png

弹性盒子布局

image.png 弹性盒子的相关属性分为两类:

  • 作用于父级: image.png
  • 作用于子元素:
    image.png

示例:

  1. 展示灵活的文件长度省略展示 image.png
  2. 展示骰子上的六个面: image.png

网格布局

image.png 使用Grid布局来展示骰子的面 image.png

Grid和Flex布局的使用策略

Flex:

  1. 一维布局
  2. 基于内容
  3. 浏览器兼容性更好

Grid:

  1. 二维布局
  2. 基于布局
  3. 2017年后浏览器的版本普遍支持

image.png

定位Position

为了我们可以在文档流的基础上,让元素移动,做出更多灵活的改变。当position属性的取值非static的时候,可以使用top、right、bottom、left对其进行定位 image.png 使用定位的例子(对话框) image.png 有定位就会有覆盖的问题,这个时候就需要考虑层叠上下文

层叠上下文

层叠上下文是对HTML元素的三维构想,将元素沿着垂直屏幕的虚构的Z轴排开 image.png 形成新的层叠上下文的条件(任一即可):

  • position:relative或absolute;并且z-index不是auto
  • position:fiexd或sticky
  • flex或grid的子元素;并且z-index不是auto
  • opacity的值小于1
  • transform的值不为none
  • will-change的值不为通用值

层叠顺序不仅指不同的层叠上下文的顺序,同一个层叠上下文内,元素间也有顺序: image.png image.png image.png 编写z-index的建议:

  1. 使用CSS变量或者预处理语言的变量,管理z-index的值
  2. 将预设间隔设置10或100,方便后续的插入

image.png

变形、过度、动画

transform变形

image.png image.png 3D运用到上述骰子的例子里可以把骰子以3D的形式展现。 image.png

transition过渡

image.png

animation动画

相较于过渡,动画可以实现更多更丰富的动画效果。 image.png 在使用动画的过程中,会出现一些性能相关的问题。 image.png 如何写动画性能更好?

  1. 尽量不用触发reflow的属性
  2. 在遇到性能问题时可以触发硬件加速,比如设置will-change属性、设置transform3d等
  3. 尽量使用transform和opacity去写动画

响应式设计

推荐遵循的原则: image.png

媒体查询

媒体查询允许某些样式只在页面满足特定条件时才生效。我们可以将媒体类型(如:screen、print)以及媒体特性(如:视口宽度、屏幕比例、设备方向:横向或纵向)做为约束条件。 image.png

设备像素、参考像素和移动设备视口

设备像素

image.png

DPI&PPI

image.png

CSS像素

image.png

DPR设备像素比

image.png

移动端的viewport

image.png image.png

相对长度的使用

em

image.png

rem

rem:根元素的字体大小。通过伪类:root或者html选择器选定。由于是根元素的font-size,所以不会像em那样出现多重嵌套问题。减少了复杂性,同时作为一个相对单位,可以进行适配放缩,可以用来做响应式布局。 image.png

vw和vh

vw:视窗宽度的1%。
vh:视窗高度的1%。
同样vw也可以作为响应式布局的基准单位。由于vw天然是视口宽度的1%,所以不需要js动态配置。 image.png

CSS生态相关

image.png image.png scss、less、stylus简单对比: image.png image.png CSS后处理器 image.png postcsss机制 image.png

工程架构——css模块化

image.png image.png styled-component机制 image.png