SASS用法入门

  本文参考了 阮一峰 老师对 SASS 用法的讲解。

  学过 CSS 的人都知道,它不是一种编程语言,在日常的开发中,经常要写大量的 css 代码,有很多的重复代码,效率很低。Sass 是一个 CSS 的扩展,它在 CSS 语法的基础上,允许您使用变量 (variables), 嵌套规则 (nested rules), 混合 (mixins), 导入 (inline imports) 等功能,令 CSS 更加强大与优雅。使用 Sass 以及 Compass 样式库 有助于更好地组织管理样式文件,以及更高效地开发项目。

  下面是我整理的用法总结,供自己开发时参考,相信对一些初学者也有用。

一、安装和使用 Sass

  1.1 安装

  SASS是Ruby语言写的,但是两者的语法没有关系。不懂Ruby,照样使用。只是必须先安装Ruby,然后再安装SASS。

  假定你已经安装好了Ruby,接着在命令行输入下面的命令:

gem install sass

  然后就可以使用了。

  如果你想查看 sass 的版本,在命令行使用 sass -v 就可以看到。

  2.1 使用

  SASS文件就是普通的文本文件,里面可以直接使用CSS语法。文件后缀名是.scss,意思为Sassy CSS

  首先创建一个名为 demo.html 的文件代码如下: 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="test.css">
</head>

<body>
    <div id="box">
        <h1>Hello world!</h1>
        <p class="p1">
            死亡如风,常伴吾身!
        </p>
        <p class="p2">
            德玛西亚万岁!
        </p>
    </div>
</body>

</html>

  然后创建一个名为 test.scss 的文件,这里用来我们书写测试的 scss 代码。使用下面的代码我们可以把 scss 文件转为为我们页面引入的 css 文件。  

sass test.scss test.css

  我们可以看到此时的项目目录,多了一个 test.css 文件。

  SASS提供四个编译风格的选项:  

  * nested:嵌套缩进的css代码,它是默认值。

  * expanded:没有缩进的、扩展的css代码。

  * compact:简洁格式的css代码。

  * compressed:压缩后的css代码。

  生产环境当中,一般使用最后一个选项。 

sass --style compressed test.sass test.css

  你也可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。

 // watch a file
 sass --watch test.scss:test.css
  
 // watch a directory  sass --watch app/sass:public/stylesheets

二、基本用法

  2.1 变量

  SASS 允许使用变量,所有变量以  $  开头。 

$blue: blue;
#box {
    width: 500px;
    height: 500px;
    border: 1px solid $blue;
} 

  在监听的基础上,可以看到 test.css 文件中同时生产了样式代码。在浏览器运行 demo.html 可以看到相应的样式改变。

  如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。

$side: left;
#box {
    margin-#{$side}: 200px;
}

  2.2 计算功能

  SASS 允许在代码中使用算式:

$side: left;
$var: 500;
#box {
    margin-#{$side}: 200px;
    padding-top: 20px + 30px;
    margin-top: $var * 0.1px;
}

  2.3 嵌套

  SASS 允许选择器嵌套。比如,下面的 CSS 代码: 

#box h1{
  color: red;  
} 

  可以写成:

#box {
    h1 {
        color: red;
    }
}

  属性也可以嵌套,比如 border-color 属性,可以写成:

  p {
   border: {
     color: red;
   }
 }

  注意,border 后面必须加上冒号。

  在嵌套的代码块内,可以使用 & 引用父元素。比如 a:hover 伪类,可以写成:

a {
    &:hover {
        color: yellow;
    }
}

  2.4 注释 

  SASS共有两种注释风格。

  标准的CSS注释 /* comment */ ,会保留到编译后的文件。

  单行注释 // comment,只保留在SASS源文件中,编译后被省略。

  在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。

/*! 
   重要注释!
*/

三、代码的重用

  3.1 继承

  SASS 允许一个选择器继承另一个选择器。比如,现有 p1: 

.p1 {
    color: green;
}

  p2 要继承 p1 ,就要使用 @extend 命令: 

.p2 {
    @extend .p1;
    font-size: 20px;
}

  3.2 Mixin

  Mixin 有点像 C 语言的宏(macro),是可以重用的代码块。

  使用 @mixin 命令,定一个代码块:

@mixin right {
    float: right;
    width: 80px;
    height: 80px;
}

  使用 @include 命令,调用这个 mixin。

a {
    @include right;

  mixin的强大之处,在于可以指定参数和缺省值。 

@mixin border($value: 1px) {
    border: $value solid #000;
}

  使用的时候,根据需要加入参数。

a {
    @include border(2px);
}

  下面是一 个 mixin 的实例,用来生成浏览器前缀:

  @mixin rounded($vert, $horz, $radius: 10px) {
    border-#{$vert}-#{$horz}-radius: $radius;
    -moz-border-radius-#{$vert}-#{$horz}: $radius;
    -webkit-border-#{$vert}-#{$horz}-radius: $radius;
  }

  使用的时候,可以像下面这样调用:

#box {
    @include rounded(top, right);
}

a {
    @include rounded(bottom, left, 50px);
}

  3.3 颜色函数

  SASS提供了一些内置的颜色函数,以便生成系列颜色。

lighten(#cc3, 10%)  // #d6d65c
darken(#cc3, 10%)   // #a3a329
grayscale(#cc3)     // #808080
complement(#cc3)    // #33c 

  3.4 插入文件

  @import 命令,用来插入外部文件。 

@import "path/filename.scss";

  如果插入的是.css文件,则等同于css的import命令。

@import "path/filename.css";

四、高级用法

  4.1 条件语句

  @if 可以用来判断:

 p {
    @if 1 + 1 == 2 { border: 1px solid; }
    @if 5 < 3 { border: 2px dotted; }
  }

  配套的还有 @else 命令:

 @if lightness($color) > 30% {
    background-color: #000;
 } @else {
    background-color: #fff;
 }

  4.2 循环语句

  SASS支持 for 循环:

@for $i from 1 to 10 {
  .border-#{$i} {
      border: #{$i}px solid blue;
   }
 }

  也支持 while 循环:

 $i: 6;
 @while $i > 0 {
   .item-#{$i} { width: 2em * $i; }
   $i: $i - 2;
  }

  each 命令,作用与 for 类似:

  @each $member in a, b, c, d {
    .#{$member} {
      background-image: url("/image/#{$member}.jpg");
    }
  }

  4.3 自定义函数

  SASS允许用户编写自己的函数。

  @function double($n) {
    @return $n * 2;
  }
  #sidebar {
    width: double(5px);
  }
posted @ 2018-07-04 16:52  mCod  阅读(287)  评论(0编辑  收藏  举报