美文网首页
入门Sass——文档笔记

入门Sass——文档笔记

作者: 俗三疯 | 来源:发表于2017-09-06 10:18 被阅读12次
    • 将局部变量转换为全局变量可以添加!global声明
    • SassScript支持CSS的两种字符串类型:有引号字符串和无引号字符串,只有一种情况例外,使用#{}时,有引号字符串会被便宜为无引号字符串,便于再mixin中引用选择器名:
      @mixin firefox-message($selector) {
      body.firefox #{$selector}:before {
      content: "Hi, Firefox users!";
      }
      }
      @include firefox-message(".header");
      编译为
      body.firefox .header:before {
      content: "Hi, Firefox users!"; }
    • 用 () 表示不包含任何值的空数组(在 Sass 3.3 版之后也视为空的 map)。空数组不可以直接编译成 CSS
    • 如果需要使用变量,同时又要确保 / 不做除法运算而是完整地编译到 CSS 文件中,只需要用 #{} 插值语句将变量包裹。
      p {
      $font-size: 12px;
      $line-height: 30px;
      font: #{$font-size}/#{$line-height};
      }
      编译为
      p {
      font: 12px/30px; }
    • 颜色值的运算是分段计算进行的,也就是分别计算红色,绿色,以及蓝色的值:
      p {
      color: #010203 + #040506;
      }
      计算 01 + 04 = 05 02 + 05 = 07 03 + 06 = 09,然后编译为
      p {
      color: #050709; }
    • 需要注意的是,如果颜色值包含 alpha channel(rgba 或 hsla 两种颜色值),必须拥有相等的 alpha 值才能进行运算,因为算术运算不会作用于 alpha 值。
    • 颜色值的 alpha channel 可以通过 opacify 或 transparentize 两个函数进行调整。
      $translucent-red: rgba(255, 0, 0, 0.5);
      p {
      color: opacify($translucent-red, 0.3);
      background-color: transparentize($translucent-red, 0.25);
      }
      编译为
      p {
      color: rgba(255, 0, 0, 0.8);
      background-color: rgba(255, 0, 0, 0.25); }
    • 注意,如果有引号字符串(位于 + 左侧)连接无引号字符串,运算结果是有引号的,相反,无引号字符串(位于 + 左侧)连接有引号字符串,运算结果则没有引号。
      p:before {
      content: "Foo " + Bar;
      font-family: sans- + "serif";
      }
      编译为
      p:before {
      content: "Foo Bar";
      font-family: sans-serif; }
    • 在有引号的文本字符串中使用 #{} 插值语句可以添加动态的值:
      p:before {
      content: "I ate #{5 + 10} pies!";
      }
      编译为
      p:before {
      content: "I ate 15 pies!"; }
    • 通过 #{} 插值语句可以在选择器或属性名中使用变量:
      $name: foo;
      $attr: border;
      p.#{$name} {
      #{$attr}-color: blue;
      }
    • 可以在变量的结尾添加 !default 给一个未通过 !default 声明赋值的变量赋值,此时,如果变量已经被赋值,不会再被重新赋值,但是如果变量还没有被赋值,则会被赋予新的值。
      $content: "First content";
      $content: "Second content?" !default;
      $new_content: "First time reference" !default;
      #main {
      content: $content;
      new-content: $new_content;
      }
      编译为
      #main {
      content: "First content";
      new-content: "First time reference"; }
    • 导入文件也可以使用 #{ } 插值语句,但不是通过变量动态导入 Sass 文件,只能作用于 CSS 的 url() 导入方式:
      $family: unquote("Droid+Sans");
      @import url("http://fonts.googleapis.com/css?family=#{$family}");
      编译为
      @import url("http://fonts.googleapis.com/css?family=Droid+Sans");
    • Sass 中 @media 指令与 CSS 中用法一样,只是增加了一点额外的功能:允许其在 CSS 规则中嵌套。如果 @media 嵌套在 CSS 规则内,编译时,@media 将被编译到文件的最外层,包含嵌套的父选择器。这个功能让 @media 用起来更方便,不需要重复使用选择器,也不会打乱 CSS 的书写流程。
      .sidebar {
      width: 300px;
      @media screen and (orientation: landscape) {
      width: 500px;
      }
      }
      编译为
      .sidebar {
      width: 300px; }
      @media screen and (orientation: landscape) {
      .sidebar {
      width: 500px; } }
    • @media 甚至可以使用 SassScript(比如变量,函数,以及运算符)代替条件的名称或者值:
      $media: screen;
      $feature: -webkit-min-device-pixel-ratio;
      $value: 1.5;
      @media #{$media} and ($feature: $value) {
      .sidebar {
      width: 500px;
      }
      }
      编译为
      @media screen and (-webkit-min-device-pixel-ratio: 1.5) {
      .sidebar {
      width: 500px; } }
    • @extend 的作用是将重复使用的样式 (.error) 延伸 (extend) 给需要包含这个样式的特殊样式(.seriousError),刚刚的例子:
      .error {
      border: 1px #f00;
      background-color: #fdd;
      }
      .error.intrusion {
      background-image: url("/image/hacked.png");
      }
      .seriousError {
      @extend .error;
      border-width: 3px;
      }
      编译为
      .error, .seriousError {
      border: 1px #f00;
      background-color: #fdd; }
      .error.intrusion, .seriousError.intrusion {
      background-image: url("/image/hacked.png"); }
      .seriousError {
      border-width: 3px; }
    • 暂时不可以将选择器列 (Selector Sequences),比如 .foo .bar 或 .foo + .bar,延伸给其他元素,但是,却可以将其他元素延伸给选择器列:
      #fake-links .link {
      @extend a;
      }
      a {
      color: blue;
      &:hover {
      text-decoration: underline;
      }
      }
      编译为
      a, #fake-links .link {
      color: blue; }
      a:hover, #fake-links .link:hover {
      text-decoration: underline; }
    • 在指令中使用 @extend 时(比如在 @media 中)有一些限制:Sass 不可以将 @media 层外的 CSS 规则延伸给指令层内的 CSS,这样会生成大量的无用代码。也就是说,如果在 @media (或者其他 CSS 指令)中使用 @extend,必须延伸给相同指令层中的选择器。

    相关文章

      网友评论

          本文标题:入门Sass——文档笔记

          本文链接:https://www.haomeiwen.com/subject/rukujxtx.html