在看sass之前,有必要先讲另外一个预处理scss,两者之前的区别:
// sass
$font-stack: Helvetica, sans-serif
$primary-color: #333
body
font: 100% $font-stack
color: $primary-color
// scss
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
/* 编译后css */
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
使用 $
符号 作为变量的标志
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
/* 编译后 */
body{
font:100% Helvetica, sans-serif;
color:#333;
}
变量名用中划线还是下划线分隔
$link-color: blue;
a {
color: $link_color;
}
/* 编译后 */
a {
color: blue;
}
#content {
article {
h1 { color: #333 }
p { margin-bottom: 1.4em }
}
aside { background-color: #EEE }
}
/* 编译后 */
#content article h1 { color: #333 }
#content article p { margin-bottom: 1.4em }
#content aside { background-color: #EEE }
父选择器的标识符&
article a {
color: blue;
:hover { color: red }
}
/* 编译后 */
article a{ color:blue; }
article a :hover{ color:red; }
看到上面的编译,发现a伪类的父类没有,这时候父选择器的重要就体现了
?```css
article a {
color: blue;
&:hover { color: red }
}
/* 编译后 */
article a{ color:blue; }
article a:hover{ color:red; }
群组选择器的嵌套
.container {
h1, h2, h3 {margin-bottom: .8em}
}
nav, aside {
a {color: blue}
}
/* 编译后 */
.container h1, .container h2, .container h3 { margin-bottom: .8em }
nav a, aside a {color: blue}
子组合选择器和同层组合选择器:>、+和~
article {
~ article { border-top: 1px dashed #ccc }
> section { background: #eee }
dl > {
dt { color: #333 }
dd { color: #555 }
}
nav + & { margin-top: 0 }
}
/* 编译后 */
article ~ article { border-top: 1px dashed #ccc }
article > footer { background: #eee }
article dl > dt { color: #333 }
article dl > dd { color: #555 }
nav + article { margin-top: 0 }
嵌套属性
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
nav {
border: 1px solid #ccc {
left: 0px;
right: 0px;
}
}
/* 编译后 */
nav {
border-style: solid;
border-width: 1px;
border-color: #ccc;
}
nav {
border: 1px solid #ccc;
border-left: 0px;
border-right: 0px;
}
默认变量值
嵌套导入
跟原生的css
不同,sass
允许@import
命令写在css
规则内。这种导入方式下,生成对应的css
文件时,局部文件会被直接插入到css
规则内导入它的地方。
// test.scss
article a {
color: blue;
&:hover {
color: red
}
}
// index.scss
.test {
@import "test";
}
/* 编译后 */
.test article a {
color: blue;
}
.test article a:hover {
color: red;
}
原生的CSS导入
由于sass
兼容原生的css
,所以它也支持原生的CSS@import
。尽管通常在sass
中使用@import
时,sass
会尝试找到对应的sass
文件并导入进来,但在下列三种情况下会生成原生的CSS@import
,尽管这会造成浏览器解析css
时的额外下载:
.css
结尾;CSS
的url()值。这就是说,你不能用sass
的@import
直接导入一个原始的css
文件,因为sass
会认为你想用css
原生的@import
。但是,因为sass
的语法完全兼容css
,所以你可以把原始的css
文件改名为.scss
后缀,即可直接导入了。
文件导入是保证sass
的代码可维护性和可读性的重要一环。次之但亦非常重要的就是注释了。注释可以帮助样式作者记录写sass
的过程中的想法。在原生的css
中,注释对于其他人是直接可见的,但sass
提供了一种方式可在生成的css
文件中按需抹掉相应的注释。
混合器使用@mixin
标识符定义。看上去很像其他的CSS @
标识符,比如说@media
或者@font-face
。这个标识符给一大段样式赋予一个名字,这样你就可以轻易地通过引用这个名字重用这段样式。
@mixin rounded-corners {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
.notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners;
}
/* 编译后 */
.notice {
background-color: green;
border: 2px solid #00aa00;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
混合器传参
混合器并不一定总得生成相同的样式。可以通过在@include
混合器时给混合器传参,来定制混合器生成的精确样式。当@include
混合器时,参数其实就是可以赋值给css
属性值的变量
@mixin rounded-corners($px,$color) {
-moz-border-radius: $px;
-webkit-border-radius: $px;
border-radius: $px;
color:$color;
}
.notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners(10px,blue);
}
/* 编译后 */
.notice {
background-color: green;
border: 2px solid #00aa00;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
color:blue;
}
默认参数值
为了在@include
混合器时不必传入所有的参数,我们可以给参数指定一个默认值。参数默认值使用$name: default-value
的声明形式,默认值可以是任何有效的css
属性值,甚至是其他参数的引用
@mixin rounded-corners($px:20px,$color:black) {
-moz-border-radius: $px;
-webkit-border-radius: $px;
border-radius: $px;
color:$color;
}
.notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners($color:blue);
}
/* 编译后 */
.notice {
background-color: green;
border: 2px solid #00aa00;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
color: blue;
}
小结:默认参数混合使用时,请根据形参名(如:$color)开始传参使用
使用sass
的时候,最后一个减少重复的主要特性就是选择器继承。基于Nicole Sullivan
面向对象的css
的理念,选择器继承是说一个选择器可以继承为另一个选择器定义的所有样式。这个通过@extend
语法实现
.error {
color: blue;
font-size: 30px;
}
.successerror {
@extend .error;
text-align: center;
}
/* 编译后 */
.error, .successerror {
color: blue;
font-size: 30px;
}
.successerror {
text-align: center;
}
我主要是使用sass,下面两种我仅是了解。
Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。这里呈现的是 Less 的官方文档(中文版),包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS 样式的 Less.js 工具
学习归纳css预处理器-sass/scss、less、stylus
原文:https://www.cnblogs.com/Ink-kai/p/14423983.html