理解css(二)完 | 字节青训营笔记

121 阅读5分钟

1. 响应式设计

1.1 响应式设计原则

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

1.2 媒体查询

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

使用媒体查询的一些Tips:

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

image.png

媒体查询学习参考:developer.mozilla.org/zh-CN/docs/…

1.3 设备像素

设备像素(物理像素) :显示器上绘制的最小单位,显示屏通过控制每个像素点的颜色,使屏幕显示出不同的图像。

设备像素和设备相关,屏幕从工厂出来那天起,它上面的物理像素点就固定不变了。

image.png

1.4 CSS像素

CSS像素也叫参考像素。CSS像素(reference pixel) 其实是一个视角单位。规范给出的定义是,1css像素是从一臂之遥看解析度为96DPI (即1英寸96点)的设备输出时,1点(即1/96英寸)的视角。

通常认为常人臂长为28英寸,那么视线与水平线的夹角是:(1/96)in / (28in* 2 * PI/ 360deg) = 0.0213度 image.png

存在意义:保证在不同设备上的阅读体验是相对一致的。

image.png

image.png

1.5 viewport

布局视口(viewport)是页面中html元素(根元素)的包含块,默认情况下,window.document.documentElement.clientWidth 就是viewport的宽度。在移动设备中,默认的布局视口由于历史兼容pc屏幕的原因,并不符合需求,我们经常需要用<meta>标签对viewport进行设定,来完成移动端设备的适配。 image.png

移动端 viewport 的 meta 标签中的属性:

  • width
  • height
  • initial-scale
  • minimum-scale
  • maximum-scale
  • user-scalable:是否允许用户缩放

initial-scale在未设定时,如果width设定了,那么它会自动设置放缩值:initial-scale =屏幕宽度(例子中是390) / 980 ≈ 0.398。相比scale=1的时候,缩小了0.398倍

image.png

<meta name="viewport" content="width=device-width, initial-scale=1.0">
复制代码

1.6 相对长度

em image.png

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

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

移动端页面适配方案参考:www.w3cplus.com/css/vw-for-…

2. CSS生态相关

因为目前CSS的可编程性较差,不可维护性较高,代码污染啊等等问题催生出一系列的处理器。

2.1 常见样式处理流程

image.png

2.2 语言增强-CSS预处理器

image.png

预处理器如何提高研发效率?

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

SCSS、less、stylus简单对比: image.png

2.3 语言增强-CSS后处理器

image.png

cssnano:cssnano.co/

stylelint:github.com/stylelint/s…

autoprefixer:github.com/postcss/aut…

postcss-custom-properties:github.com/csstools/po…

postcss-custom-media:github.com/csstools/po…

postcss-nested:github.com/postcss/pos…

doiuse:github.com/anandthakke…

postcss pluginspostcss.org/docs/postcs…

2.3 postcss 机制浅析

image.png

AST抽象语法树格式化网址:astexplorer.net/

2.4 工程架构-CSS模块化

CSS Module就是为了解决全局污染问题出现的方案,解决CSS全局污染,本质上是保证样式集合对应的选择器是唯一的,从这个角度看,主流的单纯针对于防止全局污染的方案大概有: image.png

css-loader:github.com/webpack-con…

postcss-module:github.com/webpack-con…

css-modulesgithub.com/css-modules…

2.5 工程架构-CSS in JS

将应用的CSS样式写在JavaScript文件里面,利用js动态生成css。

  • inline-style:代表radium(已弃用)
  • unique classname:代表styled-component

image.png

css in js playground(styled-component例子):www.cssinjsplayground.com/?activeModu…

2.6 工程架构-styled component机制浅析

image.png

2.7 css in js 优缺点

image.png

2.8 工程架构-CSS原子化

原子化CSS是一种CSS的架构方式,它倾向于小巧且用途单一的class,并以视觉效果进行命名。 image.png

现有的库或框架:

tailwind:tailwindui.com/

windicss:cn.windicss.org/

tachyons:tachyons.io/

unocss:github.com/unocss/unoc…

Tailwind基本使用: image.png

2.9 CSS原子化优缺点

image.png

Facebook重构拥抱 atomic css:sebastienlorber.com/atomic-css-…

3. 总结

image.png

4. 资源网址

知识点与某节关联性较大,则该节也会将网址贴出。这里做一个简单总结(部分地址都是MDN中的,就不重复贴出,直接在网站内搜索即可)。

注: 一位好同学写的文章,参考记录一下。