将CSS Cascade Layers集成到现有项目
本文分享了将CSS Cascade Layers集成到现有遗留代码库的完整过程,重点介绍如何重构现有CSS以使用层叠层而不破坏任何功能。
理解项目
在开始使用@layers
之前,需要先了解我们正在处理的内容。项目包含三个主要文件:index.html、index.css和index.js。index.css文件超过450行代码,存在以下问题:
- 大量代码重复,相同选择器指向相同HTML元素
- 使用多个
#id
选择器 #botLogo
被定义两次且相隔70多行- 整个代码中随意使用
!important
关键字
规划层结构
决定将样式分为五个不同的层:
- reset:浏览器默认重置,如box-sizing、边距和内边距
- base:HTML元素的默认样式,包括默认排版和颜色
- layout:主要页面结构,控制元素定位
- components:可重用的UI部分,如按钮、卡片和菜单
- utilities:单一辅助修饰符
层顺序定义如下:
|
|
集成层叠层
重置层
|
|
基础层
|
|
将ID转换为类
将ID选择器改为类选择器以降低特异性,例如将#loader
改为.loader
,并将其放入组件层。
动画处理
创建专门的动画层:
|
|
布局和导航
导航相关样式放入布局层:
|
|
组件处理
将logo、导航菜单等作为组件处理:
|
|
媒体查询策略
决定将媒体查询放在与目标元素相同的层中,而不是创建单独的响应式层,这样可以:
- 保持响应式样式与基础元素样式在一起
- 使覆盖更可预测
- 与现代基于组件的架构良好配合
工具层
保留给单一用途的辅助类:
|
|
挑战与收获
遇到的困难
- 起始点确定困难:对于现有项目,很难确定从何处开始
- 浏览器支持:层叠层目前有94%的支持率,但需要考虑遗留浏览器
- 媒体查询定位:不确定媒体查询应该放在哪里
- !important关键字:它们会反转整个层优先级系统
层叠层的好处
建立层叠层确实改善了代码:
- 更易于维护的样式集合
- 更容易找到所需内容
- 明确了解特定样式规则的作用
- 知道在哪里插入新样式
结论
重构代码库以使用CSS Cascade Layers初看可能令人生畏,但重要的是要认识到使事情复杂化的不是层本身,而是现有的代码库。虽然从零开始定义层可能"更容易",但如果必须从现有代码库开始,可能需要先解构样式的复杂性,以确定需要多少重构工作。