css预处理器介绍及应用

115 阅读4分钟

前言

大家都熟知,WEB前端开发的三剑客就是HTML,CSS,JavaScript。通过结合这三种技术以及其派生技术/框架的融合应用,最终产生出了各式各样五花八门的WEB项目。

image.png

我们用通俗易懂的方式来理解这’三剑客’之间的关系,即HTML主内容与框架,CSS主风格与样式,JS主逻辑与交互。

 

CSS预处理器

CSS 自诞生以来,基本语法和核心机制一直没有本质上的变化,在很长一段时间内,它的发展几乎全是表现力层面上的提升。

最开始 CSS 在网页中的作用只是辅助性的装饰,轻便易学是最大的需求;然而如今网站的复杂度已经不可同日而语,原生 CSS 已经让开发者力不从心。

image.png

当一门语言的能力不足而用户的运行环境又不支持其它选择的时候,这门语言就会沦为 “编译目标” 语言。开发者将选择另一门更高级的语言来进行开发,然后编译到底层语言以便实际运行。于是,在前端领域,天降大任于斯人也,CSS 预处理器应运而生。

CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行CSS的编码工作。 转化成通俗易懂的话来说就是“用一种专门的编程语言,进行 Web 页面样式设计,再通过编译器转化为正常的 CSS 文件,以供项目使用。

 

百花齐放****

CSS 预处理器是一个能让你通过预处理器自己独有的语法来生成 CSS 的程序。

市面上有很多 CSS 预处理器可供选择,且绝大多数 CSS 预处理器会增加一些原生 CSS 不具备或不完善的高级特性,这些特性让 CSS 的结构更加具有可读性且易于维护。当前社区代表的 CSS 预处理器 主要有一下几种:

Sass/Scss:2007 年诞生,最早也是最成熟的 CSS 预处理器,拥有 Ruby 社区的支持和 Compass 这一最强大的 CSS 框架,目前受 LESS 影响,已经进化到了全面兼容 CSS 的 SCSS。

Less:2009年出现,受 SASS 的影响较大,但又使用 CSS 的语法,让大部分开发者和设计师更容易上手,在 Ruby 社区之外支持者远超过 SASS,其缺点是比起 SASS 来,可编程功能不够,不过优点是简单和兼容 CSS,反过来也影响了 SASS 演变到了 SCSS 的时代,著名的 Twitter Bootstrap 就是采用 LESS 做底层语言的。

Stylus:Stylus 是一个CSS的预处理框架,2010 年产生,来自 Node.js 社区,主要用来给 Node 项目进行 CSS 预处理支持,所以 Stylus 是一种新型语言,可以创建健壮的、动态的、富有表现力的 CSS。比较年轻,其本质上做的事情与 SASS/LESS 等类似。

 

优点

虽然各种预处理器功能强大,但使用最多的,还是以下特性:变量(variables),代码混合(mixins),嵌套(nested rules)以及 代码模块化(Modules)。

接下来以 Less 为例,展示一下这几个主要特性在预处理器中的实现。

1. 变量

(1) 可以将属性的值赋值给一个变量,变量为完全的常量,所以只能定义一次

  image.png

(2) 可以通过使用变量名定义为变量

image.png

2. 混合

(1) 将一些通用的属性放在一个class中,然后在例外一个class中去调用这些属性。任何的class和id或是元素都可以用这样的方式进行引入

image.png

(2) 混合中可以携带参数,可以像函数一样定义一个带参数的属性集合,也可以给参数设置一个默认的值

image.png

image.png

3. 嵌套

image.png

4. 代码模块化

image.png

5. 其他

(1) 运算

任何数字、颜色都可以参与运算, less运算能够分辨颜色和单位

image.png

image.png

(2) 函数

less本身提供了一系列的颜色运算函数。颜色会被转化成为HSL色彩空间,然后在通道级别操作

image.png

同时也提供了一组方便的数学函数,可以使用它们处理一些数字类型的值

image.png

(3) 命名空间

有时候,我们可能更好地组织CSS或是单纯的为了更好地封装,我们会将会一些变量或是混合模块进行打包操作,为了后续进行复用

image.png

当我们想要在某一个地方引入button的样式的时候

  image.png

(4) 作用域

less的作用域和其他编程语言十分的相似,首先在本地的变量和混合模块进行查找,如果没有找到的话,就会去父及作用域查找,直到找到为止

  image.png

 

 

实际应用****

1. 自定义颜色主题机制

image.png

image.png

2. Mixins公共样式机制

image.png

image.png

3. 分辨率自适应机制

image.png

image.png