这篇文章是初步介绍css预处理的,详细学习请移步官网~

sass中文文档:https://www.sass.hk/docs

less中文文档:http://lesscss.cn/

什么是css预处理器

CSS 预处理器是一种语言

用通俗易懂的话来说就是“用一种专门的编程语言,进行 Web 页面样式编写,再通过编译器转化为正常的 CSS 文件无需考虑浏览器的兼容性问题。

可以在 CSS 中使用变量、简单的程序逻辑、函数等等,可以让你的 CSS 更加简洁,适应性更强,代码更直观等诸多好处。

但CSS预处理器也不是万金油,原生CSS的好处在于简便、随时随地被使用和调试。

使用预处理器的话有预编译CSS步骤的加入,让我们开发工作流中多了一个环节,调试也变得更麻烦了。更大的问题在于,预编译很容易造成后代选择器的滥用。

所以我们在实际项目中衡量预编译方案时,还是得想想,比起带来的额外维护开销,CSS预处理器有没有解决更大的麻烦。

Less和Sass

以下概念以sass为例讲解,less中一样的。

变量:

$width: 5em;
//直接使用即调用变量:
#main {
width: $width;
}

编译为:

#main {
width: 5em;
}

混合(Mixins):定义好一个基本样式,在需要的选择器中引用。

//定义要引用的样式: @mixin指令后添加名称与样式
@mixin large-text {
color: #ff0000;
}
//引用混合样式:@include 指令后添加名称
.page-title {
@include large-text;
padding: 4px;
margin-top: 10px;
}

上面代码编译为:

.page-title {
color: #ff0000;
padding: 4px;
margin-top: 10px; }

参数混合(Parametric):

带参数的混合,像函数一样定义一个参数的默认值、或者参数属性集合

@mixin sexy-border($color, $width) {//参数:$color, $width
border: {
color: $color;
width: $width;
style: dashed;
}
}
p { @include sexy-border(blue, 1in); }

编译为:

p {
border-color: blue;
border-width: 1in;
border-style: dashed; }

嵌套规则(Nested Rules):

将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器。避免了重复输入父选择器

#main p {//父选择器
color: #00ff00;
width: 97%; .redbox {//子选择器
background-color: #ff0000;
color: #000000;
}
}

编译为:

#main p {
color: #00ff00;
width: 97%;
}
#main p .redbox {
background-color: #ff0000;
color: #000000;
}

运算(Operations):在CSS中使用加、减、乘、除进行数学运算,主要运用于属性值和颜色的运算,可以轻松实现属性值之间的复杂关系。

p {
$width: 1000px;
width: $width/2; // Uses a variable, does division
height: (500px/2); // Uses parentheses, does division
margin-left: 5px + 8px/2px; // Uses +, does division
}

编译为:

p {
width: 500px;
height: 250px;
margin-left: 9px;
}

颜色功能(Color function):颜色的函数运算,可以编辑你的颜色,颜色会先被转化成HSL色彩空间,然后在通道级别操作。

命名空间(Namespaces):样式分组,即将一些变量或者混合模块打包封装,从而方便被调用,更好的组织CSS和属性集的重复使用。

作用域(Scope):局部修改样式,先从本地查找变量或者混合模块,如果没有找到的话就会去父级作用域中查找,直到找到为止,这一点和其他程序语言的作域非常的相似。

JavaScript表达式(Javascript evaluation):在CSS样式中使用Javascript表达式赋值。

上面八条在LESS和Sass中是一个很重要的概念,只有把上面的概念理解清楚了,才能更好的学习LESS和Sass。

Less和Sass之间的主要区别是他们的实现方式不同:

  LESS是基于JavaScript运行,需要引入Less.js来处理代码输出css到浏览器,所以LESS是在客户端处理。

  Sass是基于Ruby的,需要安装Ruby环境,是在服务器端处理的。

很多开发者不选择LESS是因为LESS输出修改过的CSS到浏览器需要依赖于Javascript引擎,而Javascript引擎需要额外的时间来处理代码。

解决:

比如只在开发环节使用LESS。开发完成,复制粘贴LESS输出的到一个压缩器,然后到一个单独的CSS文件来替代LESS文件。

另一种方式是使用LESS APP来编译和压缩你的LESS文件。

两种方式都将是最小化你的样式输出,从而避免由于用户的浏览器不支持Javascript而可能引起的任何问题。尽管这不大可能,但终归是有可能的。

Sass确实需要在Ruby上运行,然而他不需要在服务器上编译CSS。它也可以在本地编译(正如前面提到的LESS),编译后的CSS可以运用到你的项目上,Wordpress主题中,引擎模板,或者任何服务器,就像你的CSS文件。Mac也默认提供了对Sass的安装和支持,只需要一行命令就可以(sudo gem install sass)。

如果你安装了Sass,你在本地就可以将Sass转译成CSS,并将转译的代码用到你的项目中。如果你还不知道如何安装Sass(或者Compass),我们也写了一份详细的指南Getting Started with Sass and Compass,可以很好的帮你清除这个障碍。

使用

首先 Sass 和 Less 都使用的是标准的 CSS 语法,因此你可以很方便的将已有的 CSS 代码转为预处理器代码, Less 使用 .less 扩展名

Sass 有两种语法格式:

使用 “花括号” 表示属性属于某个选择器,“分号” 分隔属性,这种格式以 .scss 作为拓展名。

另一种简化格式:使用 “缩进” 代替 “花括号” 表示属性属于某个选择器,用 “换行” 代替 “分号” 分隔属性,这种格式以 .sass 作为拓展名。

技巧收集

使用混合简化html的class数量,比如下面这个例子,本来写.border和.post 两个class,使用引用,就只写.post。而且ul也可以共享这个.border的样式,减少重复代码

.border {
border-top: 1px dotted #333;
} article.post {
background: #eee;
.border;
} ul.menu {
background: #ccc;
.border;
}

混合的另一种模式:选择器继承(less没有),无需再使用逗号

.menu {
border: 1px solid #ddd;
}
.footer {
@extend .menu;
}
/* 上面的规则和下面的规则是一样的效果 */
.menu, .footer {
border: 1px solid #ddd;
}

sass的混合写法

//定义
@mixin error($borderWidth: 2px) {
border: $borderWidth solid #F00;
color: #F00;
}
//使用
.generic-error {
  padding: 20px;
  margin: 4px;
  @ include error(); /* Applies styles from mixin error */
}

针对浏览器私有前缀的样式,使用参数混合非常有用

.border-radius( @radius: 3px ) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
} div {
  .border-radius(10px);
}

使用运算,在基础样式做数学运算实现其他样式。比如统计页面的border宽度有哪几种,然后定义个基础的border变量,其余border在此基础做运算

@base_border_width: 2px;
.error {
  border: @base_border_width*2 solid #F00;
  color: #F00;
}

使用嵌套规则,减少写父级元素名的代码量或者减少选择器层级。也可以组件实现对应,方便管理。

//糟糕的多次写section
section {
margin: 10px;
}
section nav {
height: 25px;
}
section nav a {
color: #0982C1;
}
section nav a:hover {
text-decoration: underline;
}

使用嵌套后

section {
margin: 10px; nav {
height: 25px; a {
color: #0982C1; &:hover {
text-decoration: underline;
}
}
}
}

减少层级。下面的h2在原生的css中选择器为:#site-body .post .post-header h2。下面这一整个可以是一个组件的样式

#site-body { …
.post { …
.post-header { …
h2 { … }
a { …
&:visited { … }
&:hover { … }
}
}
}
}

初识css预处理器:Sass、LESS的更多相关文章

  1. css预处理器sass学习

    SASS 叫做css预处理器,他的基本思想是用一门专门的编程语言来进行页面样式的设计,然后在编译成正常的css文件. Sass的用法 安装 sass是用ruby语言写的,所以我们在安装sass之前要先 ...

  2. 前端CSS预处理器Sass

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  3. css预处理器sass使用教程(多图预警)

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

  4. 关于前端CSS预处理器Sass的小知识!

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  5. CSS预处理器Sass、LESS 和 Stylus

    CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...

  6. CSS预处理器Sass(Scss)、Less、Stylus

    CSS 预处理编译器能让我成程序化其的方式编写CSS代码,可以引入CSS中没有的变量.条件.函数等特性,从而让代码更简单易维护,但一般按预处理器语法编写的代码无法直接在浏览器中运行,需用通过工具比如g ...

  7. CSS预处理器——Sass、LESS和Stylus实践

    CSS(Cascading Style Sheet)被译为级联样式表,做为一名前端从业人员来说,这个专业名词并不陌生,在行业中通常称之为“风格样式表(Style Sheet)”,它主要是用来进行网页风 ...

  8. CSS预处理器—Sass、LESS和Stylus

    http://www.w3cplus.com/css/css-preprocessor-sass-vs-less-stylus-2.html 一.什么是CSS预处器 CSS预处理器定义了一种新的语言, ...

  9. CSS预处理器(SASS和LESS)

    Sass框架应用Sass简介 Sass又名SCSS,是CSS预处理器之一,它能让你更好更轻松的工作.Sass官网是这样描述Sass的:**Sass是一门高于CSS的元语言,能用来清晰的.结构化地描述文 ...

随机推荐

  1. [agc016B][Colorful Hats]

    题目链接 思路 首先,如果没人说谎那么序列中肯定只有一大一小两种数,假设大的数为x,小的数为y.因为对于每个人只有两种情况,要么自己与除自己外的某个人拥有相同的颜色,此时总颜色数就是这个人所能看到的颜 ...

  2. 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)

    字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...

  3. Spring MVC 架构的java web工程如何添加登录过滤器

    发布到外网的web工程必须添加登录过滤器来阻挡一些非法的请求,即只有登录的用户才能对web工程进行请求,否则无论请求什么资源都需要调整到登录页面进行登录操作.这时就需要用到过滤器,其实非常简单,只需要 ...

  4. mongoDB-权限控制

    启动服务D:\MongoDB\Server\3.6\bin>mongod.exe --dbpath D:\MongoDB\Server\3.6\data 扩展 无认证启动:mongod --po ...

  5. 漫谈php框架之中间件

    市面上常见的php框架有很多,最近因为有技术需求,所以对常见的php框架的中间件进行了一些了解.各个框架尽管在目标上对php框架的定义大同小异,但是在实现方式上却各有不同,且看下文: 定义 首先什么是 ...

  6. 5.django学习模型

    ##Django Models ##编写models 1.在应用根目录下创建models.py并引入models模块,创建类,继承models.Model该类即是一张数据表 2.字段创建 ##映射数据 ...

  7. java中将string类型转int类型或者将string类型转long类型方法

    将字串 String 转换成整数 int 两种方法: 1).int i = Integer.parseInt("111"); 或 i = Integer.parseInt([Str ...

  8. golang 使用os/exec配合context实现的超时机制

    在使用golang开发中,调用外部可执行程序通过exec包是我们常用的方式.如何控制超时请见如下样例: var ( Timeout = 3 * time.Second ) func Command(n ...

  9. 图论分支-Tarjan初步-边双联通分量

    本来应该先说强连通分量,但是有一定的分配,所以这个在下一篇博客将会见到. 这个本想连点连通分量一起讲,但是量有点大,所以我就分两步讲. 我们先看定义 再来看看图解 很容易就能发现,只要将割边断掉,然后 ...

  10. centos系统中php7安装memcached 扩展

    #编译安装php-7.1.16 #wget http://cn2.php.net/distributions/php-7.1.16.tar.gz#tar -zxvf php-7.1.16.tar.gz ...