zoukankan      html  css  js  c++  java
  • 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么?

    Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写,而且更容易阅读。Sass语法类似与Haml,属于缩排语法(makeup),用意就是为了快速写Html和Css。

    Less一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)。less英文站需要翻墙,也可以访问中文站

    Sass与Scss有什么差别

    Sass原先跟Haml一样的缩排语法,对于写惯Css的前端来说是很不直观的,也不能将原来的Css加到Sass里面,因此Sass改良了语法,Sass 3就变成了Scss(Sassy CSS)。与原来的语法兼容,只是用{}取代了原来的缩进。

    Sass

    .content
      margin:10px auto
      h1
        font-size:24px;

    Scss

    .content{
      margin:10px auto
      h1{
        font-size:24px;
      }
    }
    

    二. Sass/Scss&Less区别?

    1.Sass是基于Ruby的,是在服务端处理的,而Less是需要引入less.js来处理Less代码输出Css到浏览器,也可以在开发环节使用Less,然后编译成Css文件,直接放到项目中,也有 Less.appSimpleLessCodeKit.app这样的工具,也有在线编译地址。

    2.变量符不一样,less是@,而Scss是$,而且变量的作用域也不一样,后面会讲到。

    3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。

    4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。

    /* Sample Sass "if" statement */
     
    @if lightness($color) > 30% {
      background-color: #000;
    } @else {
      background-color: #fff;
    }
     
    /* Sample Sass "for" loop */
    @for $i from 1 to 10 {
      .border-#{$i} {
        border: #{$i}px solid blue;
      }
    }

    三. Sass/Scss&Less的共同特征

    1.变量

    允许我们单独定义通用的样式,这样可以在css中调用。

    Less 变量

    @color:#4d926f;
    #header{
      color:@color;
    }
    h2{
      color:@color;
    }

    Scss 变量

    $color:#4d926f;
    #header{
      color:$color;
    }
    h2{
      color:$color;
    }

    编译后的css

    #header{color:#4d926f;}
    h2{color:#4d926f;}

    2.混合

    混合可以将一个定义好的class A轻松的引入到另一个class B中,从而简单实现class B继承class A中的所有属性。我们还可以带参数地调用,就像使用函数一样。

    Less 混合

    .rounded-corners (@radius: 5px) {
      border-radius: @radius;
      -webkit-border-radius: @radius;
      -moz-border-radius: @radius;
    }
     
    #header {
      .rounded-corners;
    }
    #footer {
      .rounded-corners(11px);
    }

    Scss 混合

    @mixin rounded-corners ($radius: 5px) {
      border-radius: $radius;
      -webkit-border-radius: $radius;
      -moz-border-radius: $radius;
    }
     
    #header {
      @include rounded-corners;
    }
    #footer {
      @include rounded-corners(11px);
    }

    编译后的css

    #header{
      border-radius:5px;
      -webkit-border-radius:5px;
      -moz-border-radius:5px;
    }
    #footer{
      border-radius:11px;
      -webkit-border-radius:11px;
      -moz-border-radius:11px;
    }

    3.嵌套

    我们可以在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。

    Less 嵌套

    #header {
      h1 {
        font-size: 26px;
        font-weight: bold;
      }
      p { font-size: 12px;
        a { text-decoration: none;
          &:hover { border- 1px }
        }
      }
    }

    Scss 嵌套

    #header {
      h1 {
        font-size: 26px;
        font-weight: bold;
      }
      p { font-size: 12px;
        a { text-decoration: none;
          &:hover { border- 1px }
        }
      }
    }

    编译后的css

    #header h1 {
      font-size: 26px;
      font-weight: bold;
    }
    #header p {
      font-size: 12px;
    }
    #header p a {
      text-decoration: none;
    }
    #header p a:hover {
      border- 1px;
    }

    3.函数&运算

    运算提供了加,减,乘,除操作;我们可以做属性值和颜色的运算,这样就可以实现属性值之间的复杂关系。

    Less 函数运算

    @the-border: 1px;
    @base-color: #111;
    @red:        #842210;
    #header {
      color: @base-color * 3;
      border-left: @the-border;
      border-right: @the-border * 2;
    }
    #footer {
      color: @base-color + #003300;
      border-color: desaturate(@red, 10%);
    }

    Scss-函数运算

    $the-border: 1px;
    $base-color: #111;
    $red:        #842210;
    #header {
      color: $base-color * 3;
      border-left: $the-border;
      border-right: $the-border * 2;
    }
    #footer {
      color: $base-color + #003300;
      border-color: desaturate($red, 10%);
    }

    编译后的css

    #header {
      color: #333;
      border-left: 1px;
      border-right: 2px;
    }
    #footer {
      color: #114411;
      border-color: #7d2717;
    }

    4.color函数

    提供了一系列的颜色运算函数. 颜色会先被转化成 HSL 色彩空间, 然后在通道级别操作:

    lighten(@color, 10%);
    /* return a color which is 10% *lighter* than @color */
    darken(@color, 10%);
    /* return a color which is 10% *darker* than @color */
     
    saturate(@color, 10%);
    /* return a color 10% *more* saturated than @color */
    desaturate(@color, 10%);
    /* return a color 10% *less* saturated than @color */
     
    fadein(@color, 10%);
    /* return a color 10% *less* transparent than @color */
    fadeout(@color, 10%);
    /* return a color 10% *more* transparent than @color */
     
    spin(@color, 10);
    /* return a color with a 10 degree larger in hue than @color */
    spin(@color, -10);
    /* return a color with a 10 degree smaller hue than @color */

    Scss同样也支持color函数,只需要将@改为$即可。

    5.作用域

    Less-作用域

    @color: #00c; /* 蓝色 */
    #header {
      @color: #c00; /* red */
      border: 1px solid @color; /* 红色边框 */
    }
    #footer {
      border: 1px solid @color; /* 蓝色边框 */
    }

    Less-作用域编译后

    #header{border:1px solid #cc0000;}
    #footer{border:1px solid #0000cc;}

    scss-作用域

    $color: #00c; /* 蓝色 */
    #header {
      $color: #c00; /* red */
      border: 1px solid $color; /* 红色边框 */
    }
    #footer {
      border: 1px solid $color; /* 蓝色边框 */
    }

    Less-作用域编译后

    #header{border:1px solid #c00}
    #footer{border:1px solid #c00}

    我们可以看出来,less和scss中的变量会随着作用域的变化而不一样,上面的例子能很好的解释这点。

    6.Importing

    文件引入

    Less-import

    @import "lib.less";
    @import "lib";

    在Scss中,也是可以import。

    scss-import

    //需要被 import 的文件必须以 _开头命名,如 _rounded.scss
    @import "rounded";

    四. Sass/Scss安装

    Scss的安装需要Ruby环境

    $ gem install sass

    安装后就可以直接编译Sass了

    $ sass --watch style.scss:style.css

    还有一个利器就是大名顶顶的Compass,后面我会用一篇博文来介绍下。

    五. Less安装使用

    1.在客户端使用

    引入你的 .less 样式文件的时候要设置 rel 属性值为 “stylesheet/less”:

    <link rel="stylesheet/less" type="text/css" href="styles.less">

    然后在Less官网下载 less.js, 在 中引入:

    <script src="less.js" type="text/javascript"></script">

    注意你的less样式文件一定要在引入less.js前先引入。

    2.在服务端安装使用

    * 安装

    在服务器端安装 LESS 的最简单方式就是通过 npm(node 的包管理器), 像这样:

    $ npm install less

    如果你想下载最新稳定版本的 LESS,可以尝试像下面这样操作:

    $ npm install less@latest

    * 使用

    在命令行下使用

    你可以在终端调用 LESS 解析器:

    $ lessc styles.less

    上面的命令会将编译后的 CSS 传递给 stdout, 你可以将它保存到一个文件中:

    $ lessc styles.less > styles.css

    如何你想将编译后的 CSS 压缩掉,那么加一个 -x 参数就可以了.

    还有些编译工具上面也有讲过,那些更加的方便。

    参考资料

    http://coding.smashingmagazine.com/2011/09/09/an-introduction-to-less-and-comparison-to-sass/

    http://www.lesscss.org

    http://www.lesscss.net

    http://sass-lang.com

    VIA:iUX Blog,转载时请注明出处

  • 相关阅读:
    树莓派debian配置lamp[解决Apache不显示php网页]
    centos7 mysql数据库安装和配置
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
    Linux从git上下东西
    在Debian/Ubuntu上面安装升级nginx到最新版
    今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的解决了这个问题。
    JavaScript 弹出框:警告(alert)、确认(confirm)的简单写法
    sql 语句实现可用户名、邮箱、手机号登录系统
    留言功能问题
    手机访问pc版网站自动跳转为手机版页面
  • 原文地址:https://www.cnblogs.com/webvision/p/3795990.html
Copyright © 2011-2022 走看看