目录
3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。
4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。
Sass/Scss与Less区别
1.编译环境不一样
Sass是在服务端处理的,以前是Ruby,现在是Dart-Sass或Node-Sass,而Less是需要引入less.js来处理Less代码输出CSS到浏览器,也可以在开发服务器将Less语法编译成css文件,输出CSS文件到生产包目录,有npm less, Less.app、SimpleLess、CodeKit.app这样的工具,也有在线编译地址。
2.变量符不一样,Less是@,而Scss是$。
Less-变量定义
@color: #00c; /* 蓝色 */
#footer {
border: 1px solid @color; /* 蓝色边框 */
}
scss-变量定义
$color: #00c; /* 蓝色 */
#footer {
border: 1px solid $color; /* 蓝色边框 */
}
3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。
输出样式的风格可以有四种选择,默认为nested
- nested:嵌套缩进的css代码
- expanded:展开的多行css代码
- compact:简洁格式的css代码
- compressed:压缩后的css代码
4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。
5. 引用外部CSS文件
scss@import引用的外部文件如果不想编译时多生成同名的.css文件,命名必须以_开头, 文件名如果以下划线_开头的话,Sass会认为该文件是一个引用文件,不会将其编译为同名css文件.
Less引用外部文件和css中的@import没什么差异。
6.Sass和Less的工具库不同
Sass有工具库Compass, 简单说,Sass和Compass的关系有点像Javascript和jQuery的关系,Compass是Sass的工具库。在它的基础上,封装了一系列有用的模块和模板,补充强化了Sass的功能。
Less有UI组件库Bootstrap,Bootstrap是web前端开发中一个比较有名的前端UI组件库,Bootstrap的样式文件部分源码就是采用Less语法编写。
7.安装体验不同
用npm 或者yarn 安装less非常容易;而安装sass, 在国内没有翻墙的话,要么费了九牛二虎之力才能安装成功,要么就一直报安装失败。安装体验磕磕绊绊,很差劲。
8.注意事项
- 为
css
引入了变量,可以把反复使用的css
属性值 定义成变量,然后通过变量名来引用它们 - 凡是
css
属性的标准值(比如说1px或者bold)可存在的地方,变量就可以使用 sass
的变量名可以与css
中的属性名和选择器名称相同,包括中划线和下划线。这完全取决于个人的喜好-
嵌套CSS 规则
9.嵌套CSS 规则
在规则块中嵌套规则块
#content {
article {
h1 { color: #333 }
p { margin-bottom: 1.4em }
}
aside { background-color: #EEE }
}
既包含属性,又可以嵌套其他规则块
#content {
background-color: #f5f5f5;
aside { background-color: #eee }
}
:hover
这种伪类时,你并不希望以后代选择器的方式连接
//错误
article a {
color: blue;
:hover { color: red }
}
//正确
article a {
color: blue;
&:hover { color: red }
}
父选择器标识符还有另外一种用法,你可以在父选择器之前添加选择器。举例来说,当用户在使用IE浏览器时,你会通过JavaScript
在<body>
标签上添加一个ie的类名,为这种情况编写特殊的样式如下:
#content aside {
color: red;
body.ie & { color: green }
}
/*编译后*/
#content aside {color: red};
body.ie #content aside { color: green }
第一个选择器会选择article下的所有命中section选择器的元素。
第二个选择器会选择article下紧跟着的子元素中命中section选择器的元素。
article section { margin: 5px }
article > section { border: 1px solid #ccc }
在下例中,你可以用同层相邻组合选择器+
选择header
元素后紧跟的p
元素:
header + p { font-size: 1.1em }
你也可以用同层全体组合选择器~
,选择所有跟在article
后的同层article
元素,不管它们之间隔了多少其他元素:
article ~ article { border-top: 1px dashed #ccc }
在sass
中,你只需敲写一遍border
:
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
对于属性的缩写形式,你甚至可以像下边这样来嵌套,指明例外规则:
nav {
border: 1px solid #ccc {
left: 0px;
right: 0px;
}
}
这比下边这种同等样式的写法要好:
nav {
border: 1px solid #ccc;
border-left: 0px;
border-right: 0px;
}
嵌套导入
举例说明,有一个名为_blue-theme.scss
的局部文件,内容如下:
aside {
background: blue;
color: white;
}
然后把它导入到一个CSS规则内,如下所示:
.blue-theme {@import
"blue-theme"}
//生成的结果跟你直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。
.blue-theme {
aside {
background: blue;
color: #fff;
}
}
使用继承的最佳实践
不要在css
规则中使用后代选择器(比如.foo .bar
)去继承css
规则。
快速入门,总结自https://www.sass.hk/guide/
css全局变量
1. 变量的声明
CSS变量声明是字母前加两个横线(--)
--Colors:#dfdfdf;
2. var()函数
var函数用来读取变量
color:var(--Colors);
var()函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。
color: var(--Colors, #e5e5e5);
第二个参数不处理内部的逗号或空格,都视作参数的一部分。
var(--fontF, "Roboto", "Helvetica");
var(--Margins, 15px 20px 25px);
可以用在变量声明中
div{
--bgcolors:red;
--fColor:var(--bgcolors)
}
3. 变量值的类型
(1). 字符串,可以与其他字符串拼接
--far:'hello';
--foo:var(--far)',world';
(2). 数值,不可以拼接
--far:20;
--foo:var(--far)'px'; //无效
但可以通过calc()函数,将他们拼接起来
--far:20;
--foo:calc(var(--far)*1px);
(3). 变量值带单位,则不能写成字符串形式
--far:'20px';
margin-top:var(--far); //无效
--far:20px;
margin-top:var(--far); //有效
4.作用域
:root {
--Colors1:#48A6EB;
--Colors2:#ACEC4D;
--Colors3:#FEFC56;
--Colors4:#E79E42;
--Colors5:#C82A29;
}
.tag-color1 {
border-color: var(--Colors1);
color: var(--Colors1);
}
通用的变量值,最好声明在:root{}内