sass笔记

2023/01/30 FrontEnd 共 2884 字,约 9 分钟

sass 笔记

Sass (英文全称:Syntactically Awesome Stylesheets) 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言。

Sass 是一个 CSS 预处理器。

Sass 是 CSS 扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间。

Sass 完全兼容所有版本的 CSS。

Sass 扩展了 CSS3,增加了规则、变量、混入、选择器、继承、内置函数等等特性。

Sass 生成良好格式化的 CSS 代码,易于组织和维护。

Sass 文件后缀为 .scss。

Sass 实例

/* 定义变量与值 */
$bgcolor: lightblue;
$textcolor: darkblue;
$fontsize: 18px;

/* 使用变量 */
body {
  background-color: $bgcolor;
  color: $textcolor;
  font-size: $fontsize;
}

为什么使用 Sass?

CSS 本身语法不够强大,导致重复编写一些代码,无法实现复用,而且在代码也不方便维护。

Sass 引入合理的样式复用机制,增加了规则、变量、混入、选择器、继承、内置函数等等特性。

Sass 是如何工作的?

浏览器并不支持 Sass 代码。因此,你需要使用一个 Sass 预处理器将 Sass 代码转换为 CSS 代码。

在命令行输入下面命令,即将 .scss 文件转化的 css 代码:

$ sass runoob-test.scss

我们可以在后面再跟一个 .css 文件名,将代码保存到文件中:

$ sass runoob-test.scss runoob-test.css

这是会在当前目录下生成 runoob-test.css 文件,代码如下:

@charset "UTF-8";
/* 定义变量与值 */
/* 使用变量 */
body {
  background-color: lightblue;
  color: darkblue;
  font-size: 18px;
}

/*# sourceMappingURL=runoob-test.css.map */

其实就是变量进行了替换。

Sass 变量

变量用于存储一些信息,它可以重复使用。

Sass 变量可以存储以下信息:

  • 字符串
  • 数字
  • 颜色值
  • 布尔值
  • 列表
  • null 值

Sass 变量使用 $ 符号:

$variablename: value;

Sass 变量的作用域只能在当前的层级上有效果,如下所示 h1 的样式为它内部定义的 green,p 标签则是为 red。

$myColor: red;

h1 {
  $myColor: green; // 只在 h1 里头有用,局部作用域
  color: $myColor;
}

p {
  color: $myColor;
}

当然 Sass 中我们可以使用 !global 关键词来设置变量是全局的:

$myColor: red;

h1 {
  $myColor: green !global; // 全局作用域
  color: $myColor;
}

注意:所有的全局变量我们一般定义在同一个文件,如:_globals.scss,然后我们使用 @include 来包含该文件。

Sass 嵌套规则与属性

Sass 嵌套 CSS 选择器类似于 HTML 的嵌套规则。

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li {
    display: inline-block;
  }
  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

实例中,ul, li, 和 a 选择器都嵌套在 nav 选择器中

将以上代码转换为 CSS 代码,如下所示:

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
nav li {
  display: inline-block;
}
nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}

属性也能嵌套

font: {
  family: Helvetica, sans-serif;
  size: 18px;
  weight: bold;
}

嵌套复杂例子

在Sass中,可以使用类或者id选择器进行嵌套。下面是一个示例:

.container {
  #header {
    background-color: red;
    .logo {
      float: left;
    }
    #nav {
      ul {
        list-style: none;
        li {
          display: inline-block;
          a {
            text-decoration: none;
            color: #fff;
            &:hover {
              text-decoration: underline;
            }
          }
        }
      }
    }
  }
  #content {
    background-color: blue;
  }
  #footer {
    background-color: green;
  }
}

在这个示例中,使用了id选择器#header、类选择器.logo和嵌套的类选择器.container #header .logo等。

HTML应该是这样的:


<div class="container">
  <div id="header">
    <div class="logo"></div>
    <div id="nav">
      <ul>
        <li><a href="#">Link 1</a></li>
        <li><a href="#">Link 2</a></li>
        <li><a href="#">Link 3</a></li>
      </ul>
    </div>
  </div>
  <div id="content"></div>
  <div id="footer"></div>
</div>

转换成CSS代码如下:

.container #header {
  background-color: red;
}
.container #header .logo {
  float: left;
}
.container #header #nav ul {
  list-style: none;
}
.container #header #nav ul li {
  display: inline-block;
}
.container #header #nav ul li a {
  text-decoration: none;
  color: #fff;
}
.container #header #nav ul li a:hover {
  text-decoration: underline;
}
.container #content {
  background-color: blue;
}
.container #footer {
  background-color: green;
}

指令

@import

引入其它 scss 文件

@minin 和@include

@mixin 定义混入,作用在选择器上,混入上会有各种 css 属性定义,定义后,其它地方@include 可以把混入的属性继承过来。

混入还支持参数,像函数一样。

@extend

继承另一个选择器的属性。

Search

    Table of Contents