likes
comments
collection
share

粉丝福利:重新思考 CSS reset(样式重置)

作者站长头像
站长
· 阅读数 5

大家好,这里是大家的林语冰。《前端猫猫教》每日 9 点半更新,坚持阅读,自律打卡,每天一次,进步一点

粉丝福利:重新思考 CSS reset(样式重置)

最近有粉丝明示想深度学习 CSS 样式重置,作为“宠粉狂魔”,UP 主犹豫了 3 秒钟,决定加更一期关于 CSS reset 的文章。

CSS reset 是什么鬼物?

CSS reset 意思是 CSS 样式重置,又名 CSS 样式初始化或样式标准化。在前端工程化中,CSS reset 往往是样式架构的第一步,也是团队协作的一大步。

CSS reset 体现的是一种“破而后立”的编程意图,样式重置的福利包括但不限于:

  • 规避浏览器默认层叠样式的副作用
  • 抹平不同浏览器预设样式的不一致性
  • 自定义全局通用的预设样式
  • ......

粉丝福利:重新思考 CSS reset(样式重置)

由于“浏览器世界大战”余波未平且影响深远,不同的浏览器及其不同版本往往预设了神头鬼脸的默认样式,有的浏览器甚至已经当场退役,比如“万恶之源” IE 浏览器。

因此,现实开发中 CSS reset 既没有唯一解或“绝对真理”,也不存在权威的官方标准,只有若干社区范例,大家可以按需参考、自由重置。

normalize.css

粉丝请注意,虽然没有任何赞助,但是今天 UP 主要推荐的是 normalize.css

我们瞄一眼使用 css reset 关键字在 GitHub 进行大数据搜索的结果,有图有真相,大数据告诉我们收藏最多、人气最高的就是 normalize.css

粉丝福利:重新思考 CSS reset(样式重置)

如你所见,normalize.css 的收藏量高达 51.6k,比 UP 主的女粉还多!如果我们拿 normalize.css 和同款工具库中的第二名相比,就会发现其收藏量是亚军的十几倍,这数据已经说明了 normalize.css 的含金量,所以我们可以放心使用。

normalize.css 意思是“CSS 样式标准化/规范化”,官方自我介绍的措辞是 —— “CSS 重置的现代化备胎方案”。

normalize.css 的产品定位包括但不限于:

  • 与其他 CSS 重置方案不同,它尽量保留有用的默认值
  • 标准化各种元素的样式
  • 纠正错误和常见的浏览器不一致问题
  • 通过微调提高可用性
  • 提供详细注释,解释源码的功能

浏览器支持包括但不限于:

  • Chrome
  • Edge
  • Firefox ESR+
  • Internet Explorer 10+
  • Safari 8+
  • Opera

供给决定需求,需求决定业务,CSS reset 的需求决定了源码实现应该保持精简,因为重置大量样式过犹不及,可能会搬起石头砸到自己的猫。

因此,大部分主流 CSS reset 库的源码都十分苗条,normalize.css 也一样,整体源码 + 注释不到 400 行,而且注释比源码还多,十分适合我们参考和学习。

normalize.css 可以通过 CDN 链接引用,现实开发中我们更常使用 npm/pnpm 作为第三方模块集成。

粉丝福利:重新思考 CSS reset(样式重置)

normalize.css 是与框架和样式方案无关的 CSS reset 库,所以既可以和 Vue/React 等前端框架“梦幻联动”,也可以和 SCSS/Less “无缝衔接”。

结合 Vite 等人气爆棚的前端工具链,我们在前端工程化中需要做的唯一一件事就是,在诸如 main.js 之类的入口文件中导入 normalize.css

举个栗子,我们可以瞄一下人气爆棚的 Vue 模板库 vue-element-admin 的源码:

粉丝福利:重新思考 CSS reset(样式重置)

其他方案

粉丝都知道,UP 主最近在练习“UnoCSS 之父”孵化的 UnoCSS,UnoCSS 的生态系统就提供了一大坨 CSS reset 方案,任君选择。

粉丝福利:重新思考 CSS reset(样式重置)

举一反一,如果你不想使用 normalize.css,也可以选择你目前常用的 CSS 方案,再搜索相关的插件或模块,一般而言,人气比较高、维护比较稳定的 CSS 方案,包括但不限于 UnoCSS、Tailwind CSS 等,周边生态都会提供相应的同款 CSS reset 功能。

除此之外,我们可以瞄一下上文使用 css reset 关键字在 GitHub 进行大数据搜索的其他方案,收藏量只是一个重量级指标,但不是唯一指标。

粉丝福利:重新思考 CSS reset(样式重置)

源码启示录

我们说过,CSS reset 不存在“绝对真理”,normalize.css 虽然人气最高,但我们必须独立思考,才能摆脱“权威效应”的思想钢印。

举个栗子,重置盒模型是一个常见的操作:

/* 市面上常见写法 */
*,
*::before,
*::after {
  box-sizing: border-box;
}

如你所见,我们把所有元素和伪元素的盒模型都统一设置为 border-box,而不是默认的 content-box

虽然但是,如果我们瞄一眼 normalize.css 的源码,就会发现,它根本没有这么做。

CSS reset 是灵活的,除了业务需求,CSS 功能也日新月异,这也会影响重置样式的实现或重构。

举个栗子,我们来瞄一下 normalize.css'@unocss/reset/normalize.css' 的对照实验:

/* normalize 的源码 */
hr {
  box-sizing: content-box;
}

/* uno 的源码 */
:where(hr) {
  box-sizing: content-box;
}

如你所见,上述代码中的 :where() 伪类就属于较新的写法。新的功能通常由于浏览器支持和兼容性而有所滞后,但有时对于样式重构利大于弊。

总而言之,CSS reset 的写法五花八门。当且仅当我们能够权衡自己的需求,才能选择最具性价比的方案。

高潮总结

CSS reset 是样式重置或标准化,这在前端工程化中,通常是样式架构的第一步。

CSS reset 没有唯一解,我们可以按需自定义,功能和写法随机应变。如果有人标榜自己的 CSS reset 是官方权威,那它大概率不是一个诚实的铲屎官。

我们可以选择集成人气最高的 normalize.css,也可以根据自己的 CSS 方案搜索周边生态。

本期话题是 —— 你正在使用的 CSS reset 是社区版还是个人版?你想推荐那个 CSS reset 工具库呢?

欢迎在本文下方群聊自由言论,文明共享。谢谢大家的点赞,掰掰~

《前端猫猫教》每日 9 点半更新,坚持阅读,自律打卡,每天一次,进步一点

转载自:https://juejin.cn/post/7340478055914078258
评论
请登录