[摘要]本篇文章给大家带来的内容是关于什么是css模块化?css模块化的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。CSS 模块化CSS(Cascading Style Shee...
本篇文章给大家带来的内容是关于什么是css模块化?css模块化的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
CSS 模块化
CSS(Cascading Style Sheets),从诞生之初就决定了它无法编程,甚至连解释性语言都算不上,只能作为一种简单的层叠样式表,对 HTML 元素进行格式化。
但随着前端的发展,前端项目已经变得越来越庞大和复杂,社区也一直在探索如何以一种有效的方式去管理前端的代码(js/css/html)和资源(images, fonts, ...)。
在这个过程中,社区探索出了 js 的模块化(amd, commonjs, es6),现在用 js 开发大工程已经游刃有余,而 css 的模块化却还没有特别的深入人心。
1. 分组式模块化
这是最早对 css 模块化的实现,也是最主要的一种方式,包括现在很多组件和开发者都是用这种方式开发的。
分组式模块化就是用命名的方式,以不同的前缀代表不同的含义,实现样式分组,文件分块,达到模块化的目的。
比如:
# 目录结构
-- one/page/css/ 某个页面的 css 目录
-- common.css 通用的 css
-- page1/ 单页面1
-- section1.css 区域1 css
-- section2.css 区域2 css
-- page2/ 单页面2
-- ...
# common.css 文件
.c-el-1 {
...
}
.c-el-2 {
...
}
...
# page1/section1.css 文件
.page1-section1 {
...
}
.page1-section1 .el-1 {
...
}
.page1-section1 .el-2 {
...
}
...
# page1/section2.css 文件
.page1-section2 {
...
}
.page1-section2 .el-1 {
...
}
.page1-section2 .el-2 {
...
}
...
这种方式并不是真正意义上的模块化,因为无法避免全局冲突的问题,但原生 css
并不具备编程的能力,所以这个问题是无法避免的。尽管分组式不算真正意义上的模块化,但是这种方式没有脱离 css
原生的机制,所以尤其是第三方组件在导出 css 文件时,很多都使用的是这种方式。
使用 js 库操作 dom 时,尽量不要用 .class,应尽量用 #id data-set,如 $('#main'), $('[data-tab="1"]')。