样式预处理
样式最基本的语法(Syntax)是 Selectors { Properties:Values }
,就是一个声明(Declaration),告诉排版引擎:将我声明的选择器(Selectors),按我的呈现规则(Rules)来渲染。
面向设计稿书写完样式,日常最基本需求:如颜色或内外间距要修改、公用部分样式、层级嵌套选择器书写、组件化样式分割然后合并、兼容性前缀…,都是要手动一条条修改添加;高级点的需求,如颜色计算、数学计算、条件执行、循环处理,要么借助第三方工具手动操作,要么无解。
因此,我们需要一个样式“工程化”的解决方案,因此,CSS预处理来了,它提供了编程语言中基本语法和函数接口等一般编程所需的抽象机制,可以“编译”打包成符合CSS标准的样式文件,这样逻辑化、程序化CSS代码,好重用、好维护、好扩展。另外还有PostCSS这类CSS后处理实现。区别在于预处理器需要先按特定的语法和逻辑规则书写代码,然后进行编译,后处理器是直接操作CSS源代码进行解析编译。
它们大多具有“变量(Variables)嵌套(Nesting)、混合(Mixins)、扩展(Extends)、色彩函数(Color Operations)、循环(Loops)、Math、导入(Imports)、流程控制声明(if/else/for/each/while)、运算符”等编程语言风格的语法和功能,使用场景、需求方案上都差不多,拥护群体都多;
熟悉一种,切换到另一种也不是难事,最终都是要结合中大型项目和打包才能发挥其作用;
如果有用到像jade
这种缩进式风格模板引擎(Template Engine)的,就选Sass
或Stylus
,接近CSS语法的就选Less
、Scss
;
预处理只是囿于当前标准规范在技术方案上的权宜之计,随着需求,必定会有标准规范和更先进的技术方案诞生(适用于其它方面),可以关注cssnext了解CSS Features。
样式声明
遵循选定的规范,不用标签选择器、全局选择器,不用!important
。
书写样式,建议采用Emmet方案,快。
建议按以下顺序声明样式,便于维护:
- 影响文档流的属性
- 盒模型的属性
- 排版属性
- 背景装饰属性
- 生成内容属性
- 其它CSS3属性(兼容性前缀由autoprefixer打包添加)
盒模型方位顺序:上、右、下、左;
不建议按属性首字母顺序声明样式,如position: absolute;
中的top
/right
/bottom
/left
定位声明,还有width
/height
的声明,中间会有其它属性间隔,不能便捷的添加和修改。
参考:
1 | selector { |
扩展阅读:
- MDN: CSS介绍 - 选择器
- An Introduction to CSS Pre-Processors: SASS, LESS and Stylus
- Using PostCSS Together with Sass, Stylus, or LESS
- CSS preprocessors compared: Less vs. Sass vs. Stylus - EY-Intuitive
- Sass vs Less vs PostCSS 2018 Comparison | StackShare
- Compare ◩ CSS PREprocessors
- DSL
- 谈谈DSL以及DSL的应用
(本篇结束)
许可协议:自由转载-保持署名-非商业性使用-禁止演绎 (CC BY-NC-ND 4.0)
By 小可 from https://xinlu.ink/tech/pro-web-reconstruction-11-css-pre-processors-and-declaration.html