深入理解CSS | 青训营笔记

77 阅读4分钟

CSS的简要发展历史

  1. HTML提出
  2. CSS1:解决网页排版布局和装饰问题,第一个有“层叠(casading)”概念的语言
  3. CSS2:表现和内容分离
  4. CSS2.1:对CSS2的修正、扩展,代替CSS2
  5. CSS3:规范模块化发展,样式丰富、炫酷,提高网站的可维护性以及性能速度

01 基础知识

层叠三大规则

  1. 样式表来源:按来源进行优先度排序
  2. 选择器优先级:对于选择器类型进行分类

例如,内联>内部>外部 3. 源码位置:后面的源码会覆盖前面的样式

由层叠概念引申出css代码的good practice

  • 选择器尽量少用id
  • 尽量不要用!important
  • 自己的样式加载在引用库样式后面

盒模型

margin + border + padding + content

02 布局和定位

布局

CSS3之前的常用布局:

  1. Normal Flow 常规流
  2. Float 浮动流
  3. Positioning 定位流

CSS3之后的新增布局:

  1. Flex弹性盒子布局
  2. Grid网格布局
  3. Muticol多列布局

外边距坍塌问题

对于一个父盒子里面包含一个子盒子的情况,子盒子有margin-top: 100px;

我们的想要的效果是让子盒子上边距父盒子100px,但是并没有出现我们预期的结果,而是父盒子距离其父盒子有了100px的上边距

解决方案:

给父元素加入display: flow-root;

或者让父元素成为BFC

Flex和Gird使用策略

Flex

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

Grid

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

使用:

  1. 大面积或整体布局,推荐使用Grid布局
  2. 小面积或组件中,或Grid Item中可以使用Flex做灵活布局

03 层叠上下文(The Stacking Context)

层叠优先级可以通过z-index改变,但注意,z-index只有在给定的position非static时生效

编写z-index的建议:

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

04 变形、过度、动画

如何写动画性能更好?

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

05 响应式布局

响应式设计推荐遵循的原则

  1. 优先选用流式布局,如百分比,flex,grid等
  2. 使用响应式图片,匹配尺寸,节省带宽
  3. 使用媒体查询为不同的设备类型做适配
  4. 给移动端设备设置简单、统一的视口
  5. 使用相对长度:em,rem,vw作为长度度量

使用媒体查询的一些Tips

  1. 媒体查询同样遵循cascading层叠覆盖原则,min-和max-选择一个
  2. 由于设备的多样化逐渐不可枚举,断点的选择尽量根据内容选择
  3. 由于断点的增加会增加样式处理的复杂度,所以尽量减少断点

设备像素

设备像素(物理像素):显示器上绘制的最小单位,显示屏通过控制每个像素点的颜色,使屏幕显示出不同的图像。设备像素和设备相关,屏幕从工厂出来的那天起,它上面的物理像素点就固定不变了。

设备像素、DPI、PPI、CSS像素、DPR设备像素比等概念都是需要理解的,特别是需要进行响应式开发的时候。只有理解了这些概念,我们才能更好地进行响应式布局

相对长度单位

em、rem、vw和vh

06 CSS生态相关

预处理器

sass、less和stylus

如何提高开发效率?

  • 自定义变量:提高可复用
  • 嵌套、作用域:避免全局污染、结构层次清晰、减少复杂组合选择器
  • mixins、继承:提高可复用、可维护性
  • 操作符、条件/循环语句、自定义函数:提高可编程能力、增加灵活性

总结

image.png

总的来说,CSS作为前端三剑客之一,是非常基础但却比较重要的一环,特别是对于有图片、视频需求的业务。另外,学号CSS能够设计出很炫酷的网页,这也非常令人向往呢。