【前端知识体系-CSS相关】CSS工程化方案
2019-11-20 16:05:26来源:博客园 阅读 ()
【前端知识体系-CSS相关】CSS工程化方案
1.如何解决CSS的模块化问题?
- 使用Less,Sass等CSS预处理器
- 使用PostCSS插件(postcss-import/precss)
- 使用webpack处理CSS(css-loader + style-loader)
2.PostCSS是什么?
- PostCSS是一个平台,具体要取决于这个平台上面的插件可以做什么
- 常用的插件如下
// 1. 可以添加属性前缀,适应所有的浏览器
const autoprefixer = require('autoprefixer');
// 2. 将所有的import 导入进来的模块全部合并为一个文件
const atImport = require('postcss-import');
// 3. 实现代码的压缩优化
const cssnano = require('postcss-cssnano');
// 4. cssnext提前使用CSS的高级语法
const cssnext = require('postcss-cssnext');
// 5. precss 类似于sass的语法处理
const precss = require('precss')
3.import实现模块的合并(模块分开,提前合并)
4.CSS语法检查,兼容性检查
5.压缩文件
3.CSS modules是什么?如何使用?
- 解决类名冲突的问题
- 使用PostCSS或者Webpack等构建工具进行编译
- 在HTML模板中使用编译过程产生的类名(对象.类名的方式来获取)
4.为什么使用JS来引用,加载CSS?
- JS作为入口,管理资源具有天然优势(HTML,CSS本身是无法管理模块和资源的)
- 将组件的结果、样式、行为封装到一起,增强组件内聚(减少代码耦合)
- 可以做更多的处理(webpack,使用CSS Modules 解决了命名的冲突问题)
5. PostCSS的实现原理说一下?
[!NOTE]
PostCSS是一个通过JS插件转换样式表的工具,它本身并不是一门新的CSS语言,而是一个平台或者是生态心态,提供插件扩展服务即JS API,开发者可以根据这些接口,定制开发插件,
目前比较流行的插件工具如:Autoprefixer 、Stylelint 、CSSnano。
5.1 解析步骤
- 将CSS解析成抽象语法树(AST树)
- 将AST树”传递”给任意数量的插件处理
- 将处理完毕的AST树重新转换成字符串
5.2 处理机制
Source string → Tokenizer → Parser → AST → Processor → Stringifier
5.2.1 Tokenizer
[!NOTE]
将源css字符串进行分词
举个例子:
.className { color: #FFF; }
通过Tokenizer后结果如下:
[
["word", ".className", 1, 1, 1, 10]
["space", " "]
["{", "{", 1, 12]
["space", " "]
["word", "color", 1, 14, 1, 18]
[":", ":", 1, 19]
["space", " "]
["word", "#FFF" , 1, 21, 1, 23]
[";", ";", 1, 24]
["space", " "]
["}", "}", 1, 26]
]
以word类型为例,参数如下:
const token = [
// token 的类型,如word、space、comment
'word',
// 匹配到的词名称
'.className',
// 代表该词开始位置的row以及column,但像 type为`space`的属性没有该值
1, 1,
// 代表该词结束位置的row以及column,
1, 10
]
5.2.2 Parser
[!NOTE]
经过Tokenizer之后,需要Parser将结果初始化为AST
this.root = {
type: 'root',
source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: "<input css 1>"},
start: { line: 1, column: 1 } ,
end: { line: 1, column: 27 }
},
raws:{after: "", semicolon: false}
nodes // 子元素
}
5.2.3 Processor
经过AST之后,PostCSS提供了大量JS API给插件用
5.2.4 Stringifier
插件处理后,比如加浏览器前缀,会被重新Stringifier.stringify为一般CSS。
6.谈一下你对前端工程化的理解?
参考博客:
- https://www.cnblogs.com/fsyz/p/8274727.html
- https://www.cnblogs.com/onebox/p/9570518.html
原文链接:https://www.cnblogs.com/fecommunity/p/11901411.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:css样式重置 移动端适配
下一篇:我的博客园皮肤
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查 2020-07-15
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查 2020-07-15
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查 2020-07-14
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查 2020-07-13
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查 2020-07-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash