zoukankan      html  css  js  c++  java
  • 比较三个 CSS 预处理器:Sass、LESS 和 Stylus(上)

    前沿 :  第一次写不够成熟,可能描述有所错误,还请大家修改指正,我会对已完成的文章进行修改。

    一、什么是CSS预处理器

      CSS预处理器定义了一种新的语言,基本的思想是用一种专门的编程语言,开发者只需要使用这种语言进行编码工作,减少枯燥无味的CSS代码的编写过程的同时,它能让你的CSS具备更加简洁、适应性更强、可读性更加、层级关系更加明显、更易于代码的维护等诸多好处。

      CSS预处理器种类繁多,本次就以Sass、Less、Stylus进行比较。

    二、语法

      在使用CSS预处理器之前最重要的是了解语法,我只写过stylus,就从网上找了下另外两种语法的格式,与大家对比分享。

      首先Sass和Less都是用的是标准的CSS语法,因此你可以很方便的把已完成的CSS代码转为预处理器识别的代码,Sass默认使用 .sass扩展名,而Less默认使用.Less扩展名。

    一下是两者的语法

    /* style.scss or style.less */
    h1 {
      color: #0982C1;
    }

    你注意到Sass同时也支持老语法,就是不包含花括号和分号的书写格式。

    /* style.sass */
    h1
      color: #0982c1

    然而Stylus支持的语法就更多样性,它默认使用.styl的文件扩展名,下面是Stylus语法。

    /* style.styl */
    h1 {
      color: #0982C1;
    }
     
    /* omit brackets */
    h1
      color: #0982C1;
     
    /* omit colons and semi-colons */
    h1
      color #0982C1

    三、变量

      你可以在CSS预处理中声明变量,并在整个样式单中使用,支持任何类型的变量,例如:颜色、数值(是否包含单位)、文本。然后你可以任意的调取和使用该变量。Sass的变量是必须$开始,然后变量名和值要冒号隔开,跟CSS属性书写格式一致。

    $mainColor: #0982c1;
    $siteWidth: 1024px;
    $borderStyle: dotted;
     
    body {
      color: $publicColor;
      border: 1px $borderStyle $mainColor;
      max-width: $siteWidth;
    }

    而Less的变量名使用@符号开始:

    @mainColor: #0982c1;
    @siteWidth: 1024px;
    @borderStyle: dotted;
     
    body {
      color: @publicColor;
      border: 1px @borderStyle @mainColor;
      max-width: @siteWidth;
    }

      Stylus对变量名没有任何限定,你可以是$开始,也可以是任意字符,而且与变量值之间可以用冒号、空格隔开,需要注意的是 Stylus (0.22.4) 将会编译 @ 开始的变量,但其对应的值并不会赋予该变量,换句话说,在 Stylus 的变量名不要用 @ 开头。  

    mainColor = #0982c1
    siteWidth = 1024px
    $borderStyle = dotted
     
    body
      color mainColor
      border 1px $borderStyle mainColor
      max-width siteWidth

    上面三种不同的CSS写法,最终将会生成相同结果:

    body {
      color: #0982c1;
      border: 1px dotted #0982c1;
      max-width: 1024px;
    }

      最容易体现它的好处的是,假设你在CSS中使用同一种颜色数十次,如果你要修改显色,需要找到并修改十次相同的代码,而有了CSS预处理器,修改一个地方就够了。

    四、嵌套

      如果你需要在CSS中相同的parent引用多个元素,你需要一遍一遍的去写parent。例如:

    section {
      margin: 10px;
    }
    section nav {
      height: 25px;
    }
    section nav a {
      color: #0982C1;
    }
    section nav a:hover {
      text-decoration: underline;
    }

    然而如果用CSS预处理器,就可以少些很多单词,而且父节点关系一目了然。

    section {
      margin: 10px;
     
      nav {
        height: 25px;
     
        a {
          color: #0982C1;
     
          &:hover {
            text-decoration: underline;
          }
        }
      }
    }

    stylus还可省略花括号,书写更加方便,根据个人喜好还可删除中间冒号。

    section 
      margin: 10px;
      nav 
        height: 25px;
        a 
          color: #0982C1;
          &:hover 
            text-decoration: underline;

    最终生成CSS结果是:

    section {
      margin: 10px;
    }
    section nav {
      height: 25px;
    }
    section nav a {
      color: #0982C1;
    }
    section nav a:hover {
      text-decoration: underline;
    }

    目前了解就这些,若有描述不正确地方还请大家指正,后续还会更新。

    注:参考  张鑫旭Stylue中文文档http://www.zhangxinxu.com/jq/stylus/selectors.php

          开源中国社区:https://www.oschina.net/question/12_44255

  • 相关阅读:
    ethcoax_net 模型学习笔记(翻译自OPNET help)
    第一堂课学习
    (2)Dojo学习之模块化
    金融业的电子商务之路
    浅谈PE(私募股权)业务及系统建设:01. 业务介绍
    Don’t Be Afraid to Break Things
    基于Asp.net MVC的系统架构
    思考项目成功的关键因素
    金融业务系统中的数据库事务:01. 五类问题
    金融业务系统中的数据库事务:02. 解决问题
  • 原文地址:https://www.cnblogs.com/wyd168/p/6605225.html
Copyright © 2011-2022 走看看