sass 学习笔记

Sass

安装Sass

  1. 安装Ruby:
  2. 安装Sass: gem install sass
  3. 安装Compass:sudo gem install compass

创建工程

  1. 使用Sass创建: 随便创建个文件夹就是使用sass创建了个工程
  2. 使用Compass创建: compass create <ProjName>

使用命令行

  1. 编译Scss: sass demo.scss demo.css
  2. 监视Sass文件: sass --watch demo.scss:demo.css
  3. 监视文件夹: sass --watch <sass folder>:<css folder>
  4. 编译Sass: compass compile [--force]
  5. 监视文件夹: compass watch
  6. 四种输出风格(style): nested expanded compact compressed
    • sass <sass file> <css file> --style
      eg: compass compile [--force] -s compressed

定义变量

  1. 变量:
    div {
        $color: red; 
        color: $color
     }```
    
  2. 全局变量:
    $color: red !global; 
    div {
        color:$color
     }```
    
  3. 默认变量:
    $fontSize: 16px !default; 
    div {
        font-size:$fontSize
     }```
    
  4. 多指变量:
    $paddings: 2px 3px 4px 5px; 
    div {
        padding: $paddings; 
        padding-left: nth($paddings,1)
     }
     $mapcolors:(redcolor:red, bluecolor:blue);
     div {
         color: map-get($mapcolors, redcolor)
     }
    
  5. 变量特殊用法:
    $classname: container;
    .#{$classname} {
         color: red
     }
    

导入样式文件

  1. 部分文件:
    命名'_'开头 eg:_demo.scss(编译时不会被生成css文件)
  2. 嵌套导入:
  • @import '_ddemo.scss'
    or
    @import 'ddemo'
  1. 原生CSS导入
    • 被导入文件的名字以.css结尾:
      @import 'demo.css';
    • 被导入文件的名字是一个url地址:
      @import 'http://xxx/demo.css';
    • 被导入文件的名字是CSS的url()值:
      @import url(demo.css);

嵌套

  1. 选择器嵌套
    div {
         span{
             color: red
         }
     }
    
  2. 属性嵌套
     div {
         background: {
             color: red;
             size: 100% 50%;
         }
     }
    
  3. & -- 引用父选择器
     a {
         color: red;
         &:hover {
             color: blue
         }
         &.content {
             color: green
         }
     }
    
  4. @at-root 跳出嵌套
    默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support,如果要跳出这两种,则需使用@at-root(without: media),@at-root(without: support).这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support)。默认@at-root其实就是@at-root(without:rule)
     div {
         @at-root span {
             color: yellow
         }
         @media screen and (max-width: 600px) {
             @at-root (without: media) {
                 .container {
                     background: red;
                 }
             }
         }
         @media screen and (max-width: 600px) {
             @at-root (without: media rule) {
                 .container {
                     background: red;
                 }
             }
         }
     }
    
  5. @at-root与& 综合使用
     .text-info {
         color: red;
         @at-root nav & {
             color: blue
         }
     }
    

继承

  1. 简单继承
    .div {
        background: red
    }
    
    .span {
        @extend .div;
        color: blue
    }
    
  2. 多继承
  • 多个@extend
    .dbody {
        font-size: 16px
    }
    
    .ddiv {
        background: red
    }
    
    .dspan {
        //@extend .dbody,.ddiv;
        @extend .dbody;
        @extend .ddiv;
        color: blue
    }
    
  1. 链型继承
     .dbody {
         font-size: 16px
     }
    
     .ddiv {
         @extend .dbody;
         background: red
     }
    
     .dspan {
         @extend .ddiv;
         color: blue
     }
    
  2. 继承的局限性
  • 包含选择器、相邻兄弟选择器 不能被继承
  • 如果被继承的元素是a,恰巧这个元素a又有hover状态的形式,那么hover状态也会被继承
  1. 继承交叉合并:避免使用,结果不可预期
     span a {
         font-size: 18px;
     }
    
     div .content {
         @extend a;
         color: red
     }
    
  2. 继承的作用域
     .one {
         color: red
     }
    
     @media screen and (max-width: 600px) {
         <!-- .one {      //is wrong
             color: blue
         } -->
         .two {
             color: blue
         }
         .test {
             // @extend .one     //is wrong;
             @extend .two //is right 
         }
     }
    

占位选择器 %

```css
%allsty {
    margin: 0;
    padding: 0
}

.one {
    @extend %allsty;
    color: red
}
```

数据类型

  1. 数字类型
    $n1: 1.2;
    $n2: 12;
    $n3: 12px;
    p {
        font-size: $n3
    }
    
  2. 字符串类型
    $s1: container;
    $s2: 'container';
    $s3: "container";
    p {
        font-size: $s1
    }
    
  3. boolean类型
    $bt: true;
    $bf: false;
    p {
        @if $bt {
            color: red
        }
    }
    
  4. null类型
    $isnull: null;
    p {
        @if $isnull==null {
            color: red
        }
    }
    
  5. color类型
    $c1: red;
    $c2: #fff;
    $c3: rgba(255, 255, 255, .5);
    p {
        color: $c2
    }
    
  6. map类型
    $mapcolor: (sblue: blue, sred: red, syellow: yellow);
    p {
        color: map-get($mapcolor, sblue)
    }
    
  7. list类型
    $list:(#b4d455, 42, "awesome");
    p {
        color: nth($list, 1)
    }
    

变量操作:== != < > <= => + - * / %

```css
$width1: 10px;
$width2: 15px;
p {
    width: $width2 - $width1
}

a:hover {
    cursor: e + -resize
}

a::before {
    content: "ab" + c
}

a::before {
    content: a + "bc"
}

$version: 3;
p::before {
    content: "sass version #{$version}"
}

p {
    font-size: (20px * 10);
    font-size: (20px / 10);
    font-size: (20px + 10px);
    font-size: (20px - 10);
}
```

mixin

  1. 简单示例
    @mixin colors {
        color: red
    }
    
    div {
        @include colors()
    }
    
    @mixin inst($color:red, $size:16px) {
        color: $color;
        font-size: $size
    }
    
    div {
        @include inst(blue, 18px)
    }
    
    div {
        @include inst($size: 18px)
    }
    
    div {
        @include inst()
    }
    
  2. 多值参数
    @mixin paddings($pv...) {
        padding: $pv
    }
    
    div {
        @include paddings(5px, 6px, 7px, 8px)
    }
    
  3. 传递内容
    @mixin style-for-oo($pv...) {
        div {
            @content
        }
    }
    
    @include style-for-oo {
        font-size: 18px
    }
    
    @include style-for-oo {
        color: red;
        font-weight: 200
    }
    

函数

  1. 内置函数
    p {
        z-index: str-length($string: "abcdefg");
    }
    
    p {
        z-index: str-index($string: "abcdefg", $substring: "cde");
    }
    
  2. 自定义函数
    @function double($width) {
        @return $width * 2
    }
    
    p {
        width: double(10px)
    }
    

调试指令

  ```css
@debug 'this is debug';
@warn 'this is warn';
@error 'this is error'
```

控制指令和表达式

  1. if语句
    if( expression, value1, value2 )
    
    eg:
    div {
        color: if(1+1==2, red, blue)
    }
    
  2. @if语句
    @if expression {
    // CSS codes
    } @else if condition {
    // CSS codes
    } @else {
    // CSS codes
    }
    
    eg:
    $type: audi;
    p {
        @if $type==benz {
            color: red;
        }
        @else if $type==mahindra {
            color: blue;
        }
        @else if $type==audi {
            color: green;
        }
        @else {
            color: black;
        }
    }
    
  3. @for语句
    @for $var from <start> through <end>
    
    eg:
    @for $i from 1 through 4 {
        .p#{$i} { padding-left : $i * 10px; }
    }
    
    @for $var from <start> to <end>
    
    eg:
    @for $i from 1 to 4 {
        .p#{$i} { padding-left : $i * 10px; }
    }
    
  4. @each语句
    @each $var in <list or map>
    
    eg:
    @each $color in red, green, yellow, blue {
        .p_#{$color} {
            background-color: #{$color};
        }
    }
    
    
    @each $var1, $var2, $var3 ... in <list>
    
    eg:
    @each $color, $border in (aqua, dotted),(red, solid),(green, double){
        .#{$color} {
            background-color : $color;
            border: $border;
        }
    }
    
    
    @each $var1, $var2 in <map>
    
    eg:
    @each $header, $color in (h1: red, h2: green, h3: blue) {
        #{$header} {
            color: $color;
        }
    }
    
  5. 语句
    while(condition) {
    // CSS codes
    }
    
    eg:
    $i: 50;
    @while $i>0 {
        .paddding-#{$i} {
            padding-left: 1px * $i;
        }
        $i: $i - 10;
    }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变...
    陈小陌丿阅读 469评论 0 0
  • 安装运行 1.下载ruby并安装 2.安装之后打开命令行执行gem命令,检查是否已经安装好 安装完ruby之后,在...
    wshining阅读 714评论 0 1
  • SASS学习笔记 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种是scss...
    EL_PSY_CONGROO阅读 261评论 0 0
  • ​ Sass是使用Ruby语言编写的css预处理语言,诞生于2007年。Sass, LESS, stylus等...
    智明书阅读 252评论 0 1
  • 前二天知道了上学期末和开学考的排名,期末年级90名,比期中下滑57名,这过山车滑得也太快了一点。期初63名,又...
    上善若水2004阅读 136评论 0 0