css预处理语言可为css增加更多编程特性,以css作为目标生成文件。
这些语言可有效提高编程效率,使CSS更加简洁、适应性更强、可读性更加,并使项目更易于维护。
本文将在开发者角度使用表格横向对比的方式客观分析目前主流的CSS预处理语言LESS、Sass、Stylus的异同之处。
不介绍这些语言的安装、编译等内容。默认读者已熟悉CSS并可能已用过以上至少一种CSS预处理语言。
鉴于目前Sass语言有分别以“.sass”和“.scss”为文件名后缀的两套语法规则,本文只介绍Sass3之后的版本,即以Scss表示。
立即学习“前端免费学习笔记(深入)”;
*.less | *.scss | *.styl |
均可以通过各自方式在本地编译成*.css文件 有很多第三方编译工具可以将这些格式的文件编译为*.css文件 | ||
可以在HTML文件中引入less.js文件与像引入*.css文件一样的方式引入*.less文件,通过浏览器进行编译(可能损耗一点点性能)。 | 需要先安装Ruby |
@@######@@ | ||
不支持 | @@######@@ | |
不支持 | @@######@@ |
@@######@@ | @@######@@ | @@######@@ |
定义变量时,以冒号“:”分隔变量名与变量值 | 以“=”分隔变量名与变量值 | |
与其它语言作用域概念雷同,向上冒泡查找变量 | 无全局变量的概念,后定义的同名变量会完全覆盖先定义的变量 | 同LESS |
Mixins是CSS预处理器中语言中最强大的特性。
Mixins可以将一部分需重用的样式抽出,只需定义一次,就可被很多选择器重复使用。
可以无需特别声明,直接调用某一class或id选择器名即可重用该选择器内属性 | 定义混合需要以“@mixin”开头。引用混合需要以“@include” 开头 | 无需前缀 |
均可定义参数与设置参数默认值 | ||
@@######@@ | @@######@@ | @@######@@ |
@@######@@ |
嵌套语法是相同的,可以通过大括号“{}”之间的层次关系实现嵌套。也可以使用“&”符号来引用父选择器。 | ||
@@######@@ | ||
@@######@@ |
无需明确的前缀 | 使用“@extend”开始,后面紧跟被继承的选择器 | |
@@######@@ | @@######@@ | |
@@######@@ | @@######@@ |
使用关键字“when”实现条件语句 | 可以使用@if、@else、@else if语句实现判断 | 与其它编程语言类似,不过可以省略大括号 |
@@######@@ | @@######@@ | @@######@@ |
@@######@@ |
通过when模拟循环功能 | 使用@for关键字,配合“from”和“through” | 使用for/in对表达式进行循环 |
@@######@@ | @@######@@ | @@######@@ |
@@######@@ | ||
还支持each循环语句、while循环语句 |
/*均支持CSS风格语法*/h1{ color:#000;}
/*支持不包含花括号与分号的编写风格,仅通过缩进表示嵌套*/h1 color: #000
/*支持省略冒号*/h1 color #000
/*以“@”开头*/@maxWidth:1024px;
/*以“$”开头*/$maxWidth:1024px;
/*可以以“$”开头,也可无前缀符号直接声明变量*/maxWidth=1024px;
/*声明混合*/.setColor(@mainC:#000){ color:@mainC;}/*直接以默认值调用混合*/.sBox{ .setColor();}/*调用混合且传入自定义参数值*/.bBox{ .setColor(#fff);}
/*声明混合*/@mixin setColor($mainC:#000){ color:$mainC;}/*直接以默认值调用混合*/.sBox{ @include setColor();}/*调用混合且传入自定义参数值*/.bBox{ @include setColor(#fff);}
/*声明混合*/setColor(mainC=#000){ color:mainC;}/*直接以默认值调用混合*/.sBox{ setColor();}/*调用混合且传入自定义参数值*/.bBox{ setColor(#fff);}
/*编译成CSS后*/.sBox{ color:#000;}.box{ color:#fff;}
div{ margin:10px 5px; a{ color:red; &:hover{ color:blue; } }}
div{ margin:10px 5px;}div a{ color:red;}div a:hover{ color:blue;}
/*继承示例*/.block{ display:block; margin:10px;}p{ .block; padding:5px;}
/*继承示例*/.block{ display:block; margin:10px;}p{ @extend .block; padding:5px;}
/*编译成CSS,相同样式依旧会在每个选择器中重复出现*/.block{ display:block; margin:10px;}p{ display:block; margin:10px; padding:5px;}
/*编译成CSS,相同样式会被合并*/.block,p{ display:block; margin:10px;}p{ padding:5px;}
@type: link;.mixin(@type) when ( @type == link ){ color:blue;} .mixin(@type) when not ( @type == link ){ color:black;}
$type: link;p { @if $type == link { color: blue; } @else { color: black; }}
type: link;p{ if type==linkcolor:blue; else color:black;}
/*编译后的CSS*/p {color:blue;}
.funClass (@i) when (@i>0){ .item-@{i}{ width:2em*@i;}/*递归*/.funClass(@i-1);}/*停止循环*/.funClass (0) {}/*输出*/.funClass (3);
@for &i from 1 through 3{ .item-#{$i} { width:2em*$i; }}
for i in 1 2 3 .item-{i} width 2em*i
/*编译后的CSS*/.item-1{ width:2em;}.item-2{ width:4em;}.item-3{ width:6em;}
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号