zoukankan      html  css  js  c++  java
  • sass

    教程

    http://www.haorooms.com/post/sass_css 20160801看了一遍

    http://www.w3cplus.com/sassguide/syntax.html

     

    安装:

    mac本来就安装了ruby,直接安装sass就行,要使用国内的镜像;

    win7下ruby装在C盘了,

    gem update sass

    sass -v

    sass -h

    * nested:嵌套缩进的css代码,它是默认值。
    * expanded:没有缩进的、扩展的css代码。
    * compact:简洁格式的css代码。
    * compressed:压缩后的css代码。
    
    生产环境当中,一般使用最后一个选项。
    sass --style compressed test.sass test.css
    
    你也可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。
    // watch a file
    sass --watch input.scss:output.css
    // watch a directory
    sass --watch app/sass:public/stylesheets
    

    基本用法

    变量

    $side : left;   //变量以$开头;变量值后加!default,表示默认值,用来设置默认值;覆盖,在之前重赋值就行
     .rounded {
    	border-#{$side}-radius: 5px;    // 嵌套在字符串中#{}
    }
    

    所有变量以$开头
    如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中

    body {
        margin: (14px/2);   //运算 ()
        top: 50px + 100px;
        right: $var * 10%;   //10 * 150% = 1500%; 10px * 150% error;
      }
    

    多值变量

    list:类似js中的数组,可通过空格,逗号或小括号分隔,有很多函数

    //一维数据
    $px: 5px 10px 20px 30px;
    
    //二维数据,相当于js中的二维数组
    $px: 5px 10px, 20px 30px;
    $px: (5px 10px) (20px 30px);
    

    map:类似js中的对象;  

    $heading: (h1: 2em, h2: 1.5em, h3: 1.2em);
    

    全局变量:只是想法,现在没有局部变量,选择器中声明的变量会覆盖外面声明的全局变量;

    变量值后加!global  

    可以使用计算公式

    运算符前留个空格

    三目运算

    if(true, 1px, 2px) => 1px
    

    嵌套

    div h1 {
        color : red;
      }
    //可以写成:
      div {
        hi {
          color:red;
        }
      }
    //属性也可以嵌套,比如border-color属性,可以写成:
      p {
        border: {    //属性嵌套 加:,一般不常用
          color: red;
        }
      }
    //注意,border后面必须加上冒号。
    
    //在嵌套的代码块内,可以使用$引用父元素。比如a:hover伪类,可以写成:
    a {
        &:hover { color: #ffb3ff; }  //引用父元素,使用&
      }
    

    跳出嵌套:@at-root【@at-root(with:rule)】只会跳出选择器嵌套,不能跳出@media @support

    //单个选择器跳出
    .parent-2 {
      color:#f00;
      @at-root .child {
        200px;
      }
    }
    
    //多个选择器跳出
    .parent-3 {
      background:#f00;
      @at-root {
        .child1 {
          300px;
        }
        .child2 {
          400px;
        }
      }
    }
    

    @at-root(without:media):共有四个值:all,rule,media,suopport  support还无法广泛使用

    注释

    标准的CSS注释 /* comment / ,会保留到编译后的文件。
    
    单行注释 // comment,只保留在SASS源文件中,编译后被省略。
    
    在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
    
    /*! 
        重要注释!
    */

    一下比较好记
    // sass
    /* css */
    /*! compressed */

    继承

    .class2 {
        @extend .class1;
        font-size:120%;
      }
    

    站位选择器%  没看懂

    Mixin:可以选择性的传入参数:使用参数名和参数值同时传入;如果一个参数可以有多组值,则需要在形参后加三个点

    @mixin left($value: 10px) {
        float: left;
        margin-right: $value;
      }
    使用的时候,根据需要加入参数:
    
    div {
        @include left(20px);
      }
    

    @content解决css3的@media问题

    传参数用@mixin,非传递参数类用继承

    颜色函数

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

    插入文件

    @import:导入scss,不用加后缀,会合并;导入css,不会合并;基础的文件命名以_开头,导入的时候不用加_

    条件语句

    @if  @else

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

    循环语句

    for循环有两种形式,分别为:@for $var from <start> through <end>@for $var from <start> to <end>。$i表示变量,start表示起始值,end表示结束值,这两个的区别是关键字through表示包括end这个数,而to则不包括end这个数。

    @for $i from 1 to 10 {
        .border-#{$i} {
          border: #{$i}px solid blue;
        }
      }
    
    $i: 6;
      @while $i > 0 {
        .item-#{$i} {  2em * $i; }
        $i: $i - 2;
      }
    
    @each $member in a, b, c, d {
        .#{$member} {
          background-image: url("/image/#{$member}.jpg");
        }
      }
    

    自定义函数

    @function double($n) {
        @return $n * 2;
      }
      #sidebar {
         double(5px);
      }
    

    相等:==

    写了那么多,基本用法有以下几部分:

    变量:嵌套在字符串中

    计算:/ + *

    嵌套:属性,父元素

    注释:3种

    继承

    mixin

    颜色

    文件

    条件:循环

    自定义函数

    自己敲了一遍。

    看了那么多,自己用的很少,所以不好理解。  http://www.w3cplus.com/sassguide/syntax.html

    tobe koala 调试

    sass无法编译中文

    解决办法:
    1.koala可视化编译工具,
    找到安装目录里面sass-3.3.7模块下面的engine.rb文件,例如下面路径:
    C:/Program Files (x86)/Koala/rubygems/gems/sass-3.3.7/lib/sass
    在这个文件里面engine.rb,添加一行代码
    Encoding.default_external = Encoding.find('utf-8')
    放在所有的require XXXX 之后即可。
    2.命令行工具同理
    找到ruby的安装目录,里面也有sass模块,如这个路径:
    C:/Ruby/lib/ruby/gems/1.9.1/gems/sass-3.3.14/lib/sass
    在这个文件里面engine.rb,添加一行代码(同方法1)
    Encoding.default_external = Encoding.find('utf-8')
    放在所有的require XXXX 之后即可。
    

    mac下解决办法,scss文件前加@charset "UTF-8";

    重装系统后,sublime text 3无法保存编译scss文件:

    解决办法:需要安装ruby,淘宝的源有时不好用,可以用 http://gems.ruby-china.org/;再把需要的插件全都重装下。

    路径名有中文 编译出错

    用法一、使用variables.scss来保存用到的变量,通过@import "common.scss"; 这样,改变variables.scss就可以编译为不同的颜色。

    20160801 打算把sass重新看一遍,简单的编译为css,不够强大和灵活。把bootstrap好好研究下,希望以后,用到bootstrap的,直接customize less;不用bootstrap的,按照bootstrap的来写less,最后编译为css。这算是一个提高。

    [SASS入门教程及用法指南](http://www.haorooms.com/post/sass_css)
    **现在用不到,但是重要的**
    1、在nodejs中,通过sass命令和编译scss:
    `sass --style compressed test.scss test.css`
    四种编译风格
    * nested:嵌套缩进的css代码,它是默认值。
    * expanded:没有缩进的、扩展的css代码。
    * compact:简洁格式的css代码。
    * compressed:压缩后的css代码。

    2、sass可以watch file,但是一般用gulp更普遍些
    3、内置的颜色函数
    * lighten
    * darken
    * grayscale
    * complement
    4、条件 循环

    [sass语法](http://www.w3cplus.com/sassguide/syntax.html)
    1、后缀名:
    .sass:没有{},和;
    .scss:跟css差不多,推荐
    2、导入
    >sass的导入(@import)规则和CSS的有所不同,编译时会将@import的scss文件合并进来只生成一个CSS文件。但是如果你在sass文件中导入css文件如@import 'reset.css',那效果跟普通CSS导入样式文件一样,导入的css文件不会合并到编译后的文件中,而是以@import方式存在。
    所有的sass导入文件都可以忽略后缀名.scss。一般来说基础的文件命名方法以_开头,如_mixin.scss。这种文件在导入的时候可以不写下划线,可写成@import "mixin"。BS就是这样用的。

    3、多值变量 list map
    4、全局变量,当前版本用不了;现在的机制:在选择器中声明的变量会覆盖外面全局声明的变量。(这也就人们常说的sass没有局部变量)
    5、跳出嵌套
    >默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support,如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support,因为@support目前还无法广泛使用,所以在此不表)。我们默认的@at-root其实就是@at-root (without:rule)。

    6、@keyframes **看不懂**
    7、mixin
    传递多组值参数
    8、**@content**
    9、建议传递参数的用@mixin,而非传递参数类的使用下面的继承%
    10、如果不调用则不会有任何多余的css文件,避免了以前在一些基础的文件中预定义了很多基础的样式,然后实际应用中不管是否使用了@extend去继承相应的样式,都会解析出来所有的样式。占位选择器以%标识定义,通过@extend调用。
    **这个特别好呀**
    11、三目判断
    if(true, 1px, 2px) => 1px

    _variables.scss

    @charset 'utf-8';
    
    /* 默认变量的使用和覆盖*/
    $color : steelblue;
    $color : red !default;
    $side  : left;
    

    style.scss

    @charset "UTF-8";
    
    @import 'variables.scss';
    
    .font-size-12{
      font:{
        size: 12px;
      }
    }
    
    @mixin left($value: 10px){
      float: left;
      margin: {
        left: $value;
      }
    }
    
    %clearfix{
      color: transparent;
    }
    
    @function double($n){
      @return $n * 2;
    }
    
    .container{
      /* 局部变量机制 */
      $color: black;
      color: $color;
      /* macro*/
      /* 与继承的区别是,macro可以指定缺省值和参数*/
      @include left(20px);
      /* 继承*/
      @extend .font-size-12;
      .test{
        /* 通过sass命令 才有效*/
        /*! 重要注释*/
        /* //, 只在sass中*/
        /* 计算*/
         100px+50px;
        height: 100px;
        /* 属性嵌套*/
        background: {
          color: $color;
        }
        /* 变量放在字符串中*/
        border-top-#{$side}-radius: double(5px);
        /* &引用父元素,伪类需要*/
        &:hover{
          background:{
            color: $color;
          }
        }
        /* 内置的颜色函数,一般都是自定义的*/
        color: lighten(#cc3, 10%);
        /* 跳出选择器,可多个跳出,跳出所有的parent; 与&不同。*/
        @at-root .parent &{
          .test{
            color: red;
          }
        }
      }
      @extend %clearfix;  
    }
    

      

    bootstrap-sass

    _bootstrap-compass.scss

    _bootstrap-mincer.scss

    _bootstrap-sprockets.scss

    不知道是做什么用的? 

    问题

    1、/

    font-size: 20/14em; 错误
    font-size: (20em / 14); 正确
    

      

     

      

      

      

  • 相关阅读:
    使用C++ 实现的 websocket 客户端 (基于easywsclient)
    ant打包报错 JRE version less than 1.8 is not suppored
    离线安装SVN 4.2.3
    maven项目使用oracle11g
    springboot 新工程报错 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    IP与域名绑定
    web项目如果省略端口
    Linux源码安装Python3.7服务
    Linux yum软件包安装、管理与使用
    RPM软件包管理与使用
  • 原文地址:https://www.cnblogs.com/wang-jing/p/4813574.html
Copyright © 2011-2022 走看看