谢谢你留下时光匆匆
CSS 与 SCSS 常用信息小结

最近一直在更新优化一些前端的小项目,这其中包括CSS样式表的代码重构。我选择将CSS代码转向SCSS,使得CSS代码更为简洁,结构更加清晰,方便后期的维护与开发。这里对CSS与SCSS基础的用法做一个简单的记录。

CSS

  • .class : class=”class” 的元素
  • #id : id=”id”的元素
  • tag : 的元素
  • element1,element2: element1 element2
  • element1 element2 : element1 下所有层级的 element2
  • element1>element2 : element1 下直接子级的 element2
  • element1~element2 : element1 平级所有后面的 element2
  • element1+element2 : element1 平级紧跟的 element2

还有很多伪类(如:鼠标放在元素上、第一个字母、元素之前的内容等等),可以参考 CSS 选择器 | 菜鸟教程

SCSS

嵌套规则

通过嵌套规则,使得CSS代码有了层次结构,大大提升了代码的简洁程度与可读性。

1
2
3
4
5
6
7
8
9
#main p {
  color: #00ff00;
  width: 97%;

  .redbox {
    background-color: #ff0000;
    color: #000000;
  }
}

在上面的例子中,.redbox 会被渲染成 #main p .redbox

父选择器 &

使用 & 指代父级元素。

1
2
3
4
5
6
a {
  font-weight: bold;
  text-decoration: none;
  &:hover { text-decoration: underline; }
  body.firefox & { font-weight: normal; }
}

在上面的例子中,&:hover 会被渲染成 a:hover

属性嵌套 (Nested Properties)

花括号前面加入冒号,进行属性嵌套。

1
2
3
4
5
6
7
.funky {
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

在上面的例子中,font: { … } 会被渲染成 font-family:

注释

SCSS语法支持单行注释

1
2
3
4
5
// This is a single line supported by SCSS

/*
This is a classical multiline comment support by both CSS and SCSS
*/

变量

SCSS 支持多种类型的变量,如带单位的数值、字符串、颜色、列表等。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$height: 5px;

$font: "Microsoft YaHei";
$font-without-quotation-mark: Microsoft YaHei;

$color1: #ffffff;
$color2: rgba(255, 255, 255,0 );

// use space or comma to seperate elements
$some-list: 1px 2px 3px 4px

运算

SCSS 支持常规加减乘除四则运算,但除法运算要特别小心,因为“/ 在CSS中通常起到分隔数字的用途”,/ 在不同情形下作用如下(摘自SASS中文网)

1
2
3
4
5
6
7
8
p {
  font: 10px/8px;             // Plain CSS, no division
  $width: 1000px;
  width: $width/2;            // Uses a variable, does division
  width: round(1.5)/2;        // Uses a function, does division
  height: (500px/2);          // Uses parentheses, does division
  margin-left: 5px + 8px/2px; // Uses +, does division
}

另外,像其它语言一样,可以使用圆括号改变运算顺序。

其它

  1. SASS还支持函数调用。SASS自带的函数,可以参考这个链接 Sass 函数
  2. SASS 字符串可以直接用加运算+连接,最终是否输出引号,取决于左端的值。
  3. 颜色变量也可以进行运算,运算定义是在3个通道分别运算基础上。
  4. 使用 #{$var} 插值语句,可以在选择器或属性名中使用变量;同时,在字符串内,也支持使用插值语句。
  5. SASS 还支持 @if @for 控制语句
  6. 可以在内层使用@media,编译时会自动解析到最外层,包含父选择器。

参考资料