Sass/SCSS的关系,SCSS的安装,webstorm编译配置SCSS,SCSS使用(语法)
一 、 Sass、SCSS
Sass:一种css预处理器和一种语言。Sass(预处理器)有两种不同的语法:
- Sass : 一种缩进语法
- SCSS : 一种 CSS-like 语法
Sass
Sass使用类似Ruby的语法,没有花括号,没有分号,具有严格的缩进,就像这样:
// 变量
!primary-color= hotpink
// 混入
=border-radius(!radius)
-webkit-border-radius= !radius
-moz-border-radius= !radius
border-radius= !radius
.my-element
color= !primary-color
width= 100%
overflow= hidden
.my-other-element
+border-radius(5px)
//@import
@import themes/dark
@import font.sass
* 注:变量的标志用 !,而不是 $;分配符是 = 而不是 : 。
SCSS
SCSS和Sass相比更加贴近CSS语法。Sass语法中的!和=换成了SCSS中的$和:。就像这样:
// 变量
$primary-color: hotpink;
// 混入
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.my-element {
color: $primary-color;
width: 100%;
overflow: hidden;
}
.my-other-element {
@include border-radius(5px);
}
//@import
@import "themes/dark";
@import "font.sass";
* 注:变量的标志用 $ ,分配符是 : 。
总结:
Sass:
- 更短并且更易于书写。没有花括号,没有分号,甚至不需要@mixin 或者 @include, 一个字符就足够了:= 和 +
- Sass 通过严格的缩进来强制 clean coding standards。因为一个错误的缩进就会破坏整个.sass文件,这使得整个代码总是clean 和格式良好的。缩进一个元素,意味着将它变为了之前元素的子元素。
SCSS:
- 易于阅读,因为它是有语义的,而不是用符号表示,没有用任何缩写。读到 @mixin,就知道这是一个 mixin 声明;看到 @include ,就是在引用一个 mixin。
- Sass 通过严格的缩进来强制 clean coding standards。因为一个错误的缩进就会破坏整个.sass文件,这使得整个代码总是clean 和格式良好的。缩进一个元素,意味着将它变为了之前元素的子元素。
注意: Sass 没有大写,无论指的是语法或语言。但SCSS 一直是大写。
二 、 SCSS的使用(安装,webstorm配置,SCSS语法)
安装:
1 . 安装SCSS先要安装ruby。因为Sass/SCSS依赖ruby环境。可以去官网下载:https://rubyinstaller.org/downloads/
2 . 安装完ruby之后,打开cmd,在命令行中输入gem install sass 命令。
- 查看 sass 版本 sass -v
- 更新 sass 版本 gem update sass
webstorm配置:
- 打开 webstorm 的 settings(设置) –>Tools(工具集)–>File Watchers(文件 监听)–> +(新增)
- 配置:
Arguments(输出参数) :
(表示将编译好的 css 文件,输出到 scss 文件的父级 outcss 文件夹下。)
--no-cache --update --sourcemap --watch $FileName$:$FileParentDir$\outscss\$FileNameWithoutExtension$.css
Working directory (工作目录):
$FileNameWithoutExtension$.css
SCSS语法 :
①变量
- 普通变量:变量定义$
//SCSS
$color_pink:pink;
div{
color:$color_pink;
//css
div{
color:pink;
}
- 默认变量: !default
//SCSS
$color:pink !default;
div{
color:$color;
//css
div{
color:pink;
}
覆盖默认变量:在默认变量之前重新声明改变量
//SCSS
$color:skyblue;
$color:pink !default;
div{
color:$color;
}
//css
div{
color:skyblue;
}
- 特殊变量:变量定义 #{$variable}
//SCSS
$borderDirection: top !default;
$baseFontSize: 12px !default;
$baseLineHeight: 1.5 !default;
//应用于class和属性
.border-#{$borderDirection}{
border-#{$borderDirection}:1px solid #ccc;
}
//应用于复杂的属性值
body{
font:#{$baseFontSize}/#{$baseLineHeight};
}
//css
.border-top{
border-top:1px solid #ccc;
}
body {
font: 12px/1.5;
}
全局变量,多指变量……
http://www.w3cplus.com/sassguide/syntax.html
②混入 @mixin
- @mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开;
- 声明的@mixin通过@include来调用;
//无参数mixin
//SCSS
@mixin center-block {
margin-left:auto;
}
.demo{
@include center-block;
}
//css
.demo{
margin-left:auto;
}
//有参数mixin
//SCSS
@mixin opacity($opacity:50) {
opacity: $opacity / 100;
filter: alpha(opacity=$opacity);
}
//css
.opacity{
@include opacity; //参数使用默认值
}
.opacity-80{
@include opacity(80); //传递参数
}
多组值参数……
http://www.w3cplus.com/sassguide/syntax.html
③嵌套 { { } } & :
- 选择器的嵌套;(常用)
- 属性的嵌套。
- 选择器嵌套
//SCSS
#top_nav{
line-height: 40px;
text-transform: capitalize;
background-color:#333;
li{
float:left;
}
a{
display: block;
padding: 0 10px;
color: #fff;
&:hover{
color:#ddd;
}
}
}
//css
#top_nav{
line-height: 40px;
text-transform: capitalize;
background-color:#333;
}
#top_nav li{
float:left;
}
#top_nav a{
display: block;
padding: 0 10px;
color: #fff;
}
#top_nav a:hover{
color:#ddd;
}
- 属性嵌套 (有些属性拥有同一个开始单词,如border-width,border-color都是以border开头)
//SCSS
.fakeshadow {
border: { style: solid;
left: { width: 4px;
color: #888;
}
right: { width: 2px;
color: #ccc;
}
}
}
//css
.fakeshadow {
border-style: solid;
border-left-width: 4px;
border-left-color: #888;
border-right-width: 2px;
border-right-color: #ccc;
}
普通跳出嵌套(@at-root ; @at-root(without : …) ; @at-root(with : …))……
http://www.w3cplus.com/sassguide/syntax.html
④导入 @import
- 导入SCSS文件:编译时会将@import的SCSS文件合并进来只生成一个CSS文件。
- 导入css文件:如@import 'reset.css',那效果跟普通CSS导入样式文件一样,导入的css文件不会合并到编译后的文件中,而是以@import方式存在
//被导入sass文件 a.scss:
body {
background: #eee;
}
//需要导入样式的sass文件 b.scss:
@import "reset.css";
@import "a";
p{
background: #0982c1;
}
//转译出来的 b.css 样式:
@import "reset.css";
body {
background: #eee;
}
p{
background: #0982c1;
}
⑤继承 @extend
- 让选择器继承另一个选择器的所有样式
//SCSS
h1{
border: 4px solid #ff9aa9;
}
.speaker{
@extend h1;
border-width: 2px;
}
//css
h1,.speaker{
border: 4px solid #ff9aa9;
}
.speaker{
border-width: 2px;
}
⑥函数 @fuction
- 实际项目中使用最多的应该是颜色函数;
- 颜色函数中以lighten减淡和darken加深为最,调用方法为:
+ lighten($color,$amount)
+ darken($color,$amount)
+ 第一个参数是颜色值,第二个参数是百分比。
//SCSS
$baseFontSize: 10px !default;
$gray: #ccc !defualt;
// 单位转换:px 转换成 rem
@function pxToRem($px) {
@return $px / $baseFontSize * 1rem;
}
body{
font-size:$baseFontSize;
color:lighten($gray,10%);
}
.test{
font-size:pxToRem(16px);
color:darken($gray,10%);
}
//css
body{
font-size:10px;
color:#E6E6E6;
}
.test{
font-size:1.6rem;
color:#B3B3B3;
}
⑦注释
- /*可以被编译出来注释 */
- //不可以被编译出来的注释
关于@mixin,%,@function更多说明可参阅:
Sass揭秘之@mixin,%,@function
http://www.w3cplus.com/preprocessor/sass-mixins-function-placeholder.html
Sass基础——颜色函数
http://www.w3cplus.com/preprocessor/sass-color-function.html
Sass基础——Sass函数
http://www.w3cplus.com/preprocessor/sass-other-function.html
条件判断及循环(@if判断,三目判断,for循环,@each循环)……
http://www.w3cplus.com/preprocessor/sass-advanced-application.html
http://www.w3cplus.com/sassguide/syntax.htm