强悍的 CSS 扩展语言 -- Sass

<div class = ‘testBorder‘>
   <p>
        <input/>
    </p>
</div>

假设上面这 3 个 DOM 元素有这样的需求, div 去边框, p 显示边框, input 只显示底部边框, 而且统一用 !important 关键字提高样式的优先权;

如果手写纯 CSS 会是这样:

.testBorder{
   border:none !important;
}
.testBorder p{
   border:1px solid !important;
}
.testBorder p input{
   border-width:0 0 1px 0 !important;
   border-style: solid !important;
}

会发现,有重复的代码".testBorder", ".testBorder p", "!important"。 这只是简单的需求,如果项目庞大对样式的需求复杂,这样手写 CSS 和搬砖真没区别;

而换用 Sass 来写:

$imp: !important; /*定义变量*/.testBorder{
   border:none $imp;
   p{
      border:1px solid $imp;
      input{
         border-width:0 0 1px 0 $imp;
         border-style:solid $imp;
      }
   }
}

代码可嵌套了;

CSS 是层叠样式表,不是语言,缺乏编程语言中强大的特性:变量、函数、运算、循环、判断、继承等;

而它的扩展语言 Sass 就支持这些特性,Sass 让我们用编程方式来写 CSS 代码从而提高效率节约程序员的时间;

Sass 的官网:http://sass-lang.com/,  里面文档非常精确齐全,都不用再看其它介绍文章了,显示得多余。文档虽然是鸡肠,但都是比较常用的单词,且还有例子,基本能看明白;

下面就最近自己常用的 Sass 知识点做下简要的记录,方便以后复习;

1.变量

定义变量 "$[name]: [value];"

$columnCount: 5; /*数字*/
$columnWidth: 100px;/*样式*/
$columnClassName: ‘column‘;/*字符串*/
$domTypeArr: (‘input‘,‘select‘,‘div‘);/*数组*/
$canExtend:true; /*布尔*/

2.函数、判断

定义函数: "@function [funcName]([parameters]){//doSth}"

调用方式: [functionName]([parameter]);

@function extendWidth($width){
   @if($width < 1){
      @return 50px;
   }@else{
      @return $width * 50px;
   }
}

上面加粗的代码就是判断,和 js 的判断一样,区别只是关键字前面要加 @字符,如 @if  @else

3.混合指令 @Mixin , 循环for

Mixin 不知怎么翻译,搜了一遍翻译为 "混合指令", 作用是把一串 css 包在一起,供调用;

定义: "@mixin [mixinName]([parameters]){//sth css}", ([parameter]) 括号和parameter 是可选的,即没有参数时可不加括号();

调用方式: @include [mixinName]([parameter])

@mixin push($pushWidth){
   $_extendPushWidth: $pushWidth + 10px; /*定义内部变量*/
   margin-left: $_extendPushWidth;
}

@mixin column($columnIndex,$pushWidth:null){
   float:left;/*css*/
   border:1px solid;
   width:floor(extendWidth($columnIndex)); /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
   @if($pushWidth != null){
      @include push($pushWidth); /*调用混合指令(mixin) push 生成 margin-left*/
   }
}

@mixin generateTable{
   .my-table{/*css class*/
      max-width:400px;
      @for $i from 1 through $columnCount{ /*$totalColumns 是上面的全局变量*/
          .#{$columnClassName}#{$i}{
         background-color:rgba(255,0,0,$i/10);
             @include column($i,5);/*调用mixin column 生成 column 样式*/
          }
      }
   }
}

.my-form{
   width:500px;
   @include generateTable();
}

注意: mixin 与函数的主要区别:mixin 相当于一段代码块,和函数一样可在其它地方重复调用,它不像函数那样返回一个值,它是返回一个代码块,调用前要加关键字 @include;

@for $i from 1 through $columnCount{ } 这是 for 循环,把 $i 从 1 开始递增到 $columnCount;

如果要循环一个数组或集合,要用到 @each $var in [array]{}

把上面三段代码 copy 到一个文件(如 test.scss), 在命令窗口中调用 sass 命令:

sass c:\test.sass c:\test.css

生成的 css :

@charset "GBK";
/*数字*/
/*样式*/
/*字符串*/
/*数组*/
/*布尔*/
.my-form {
  width: 500px; }
  .my-form .my-table {
    /*css class*/
    max-width: 400px;
    /*$totalColumns 是上面的全局变量*/
    /*$totalColumns 是上面的全局变量*/
    /*$totalColumns 是上面的全局变量*/
    /*$totalColumns 是上面的全局变量*/
    /*$totalColumns 是上面的全局变量*/ }
    .my-form .my-table .column1 {
      background-color: rgba(255, 0, 0, 0.1);
      float: left;
      /*css*/
      border: 1px solid;
      width: 50px;
      /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
      /*定义内部变量*/
      margin-left: 15px;
      /*调用混合指令(mixin) push 生成 margin-left*/
      /*调用mixin column 生成 column 样式*/ }
    .my-form .my-table .column2 {
      background-color: rgba(255, 0, 0, 0.2);
      float: left;
      /*css*/
      border: 1px solid;
      width: 100px;
      /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
      /*定义内部变量*/
      margin-left: 15px;
      /*调用混合指令(mixin) push 生成 margin-left*/
      /*调用mixin column 生成 column 样式*/ }
    .my-form .my-table .column3 {
      background-color: rgba(255, 0, 0, 0.3);
      float: left;
      /*css*/
      border: 1px solid;
      width: 150px;
      /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
      /*定义内部变量*/
      margin-left: 15px;
      /*调用混合指令(mixin) push 生成 margin-left*/
      /*调用mixin column 生成 column 样式*/ }
    .my-form .my-table .column4 {
      background-color: rgba(255, 0, 0, 0.4);
      float: left;
      /*css*/
      border: 1px solid;
      width: 200px;
      /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
      /*定义内部变量*/
      margin-left: 15px;
      /*调用混合指令(mixin) push 生成 margin-left*/
      /*调用mixin column 生成 column 样式*/ }
    .my-form .my-table .column5 {
      background-color: rgba(255, 0, 0, 0.5);
      float: left;
      /*css*/
      border: 1px solid;
      width: 250px;
      /*调用 extendWidth 用户函数计算宽度,再调用Sass 内置的数学函数 floor 获取整数*/
      /*定义内部变量*/
      margin-left: 15px;
      /*调用混合指令(mixin) push 生成 margin-left*/
      /*调用mixin column 生成 column 样式*/ }

效果:

<div class="my-form">
    <div class="my-table">
        <div class="column1">column1</div>
        <div class="column2">column2</div>
        <div class="column3">column3</div>
    </div>

4.导入其它sass 文件:

@import ‘test.scss‘;

很明显用 Sass 来写 css, 不但代码量倍数级减少,且优雅简洁易于维护和扩展;

其实 sass 语法有点像 js ,如果会 js,举一反三学起来很容易;

window 下的编译环境:

先按装 Ruby, 下载地址:http://rubyinstaller.org/downloads/

再安装 Sass,

gem install sass

就可以用 sass 命令进行编译了:

sass input.scss output.css

sass 还有一个好牛叉的插件: compass, 先看下官网:http://compass-style.org/, 有时间 再作整理;

时间: 2024-10-20 10:11:26

强悍的 CSS 扩展语言 -- Sass的相关文章

sass 成熟、稳定、强大的专业级CSS扩展语言

sass十分钟入门 变量 sass中可以定义变量,方便统一修改和维护. //sass style //----------------------------------- $fontStack: Helvetica, sans-serif; $primaryColor: #333; body { font-family: $fontStack; color: $primaryColor; } //css style //----------------------------------- b

9.14-9.18随笔之一(CSS扩展技术:LESS SASS)

less css是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性;SASS是对CSS3(层叠样式表)的语法的一种扩充,它可以使用巢状.混入.选择子继承等功能,可以更有效有弹性的写出Stylesheet. less是一种语法,使用需要编译器将其编为CSS才能使用,通过less 我们可以在编写css时设置变量(@变量名).运用继承.嵌套等,更方便CSS的编写和维护,我最为喜欢的便是这两种技术中可嵌套的编写方法,对于初学者来说尤为实用,在less中

CSS扩展“less&quot;和”sass“

css扩展技术是对css原生代码一种扩展,其中less和sass就是css扩展技术两种方式,通过扩展技术,可以使我们在写css代码时候,更加的方便和快捷. 首先要了解css扩展技术的含义:扩展技术并不是另外一种全新的技术,它是建立在css基础上进行扩展,实现一些css原生代码所不能实现的功能,其次less和sass不能单独在浏览器上运行,需要进行编译: less能实现同js一样的变量.函数.混合参数等功能,通常用@标志开始,后面接变量名字,具体如实例:@winth.@color.@height等

css预处理语言的模块化实践

编写css是前端工作中,一项普通而又频繁的劳动,由于css并不是一门语言,所以在程序设计上显得有些简陋.对于小型项目来说,css的量还不至于庞大,问题没有凸显,而如果要开发和持续维护一个较为大型的项目,那就需要对css进行管理和规范了,否则会发生不可挽回的后果(吓唬谁呢??). 背景上一节[从css谈模块化]我们通过规范的约束,将css的编写方式进行了优化和改进,形成一种可持续发展的路线.但还是遗留了一些问题:冗余.虽然我们通过定义公共模块和私有模块,来委婉地分担common的体积,但commo

css预处理器sass使用教程(多图预警)

css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可变.对于预处理器,广泛使用的有less和sass.在这不做对比,2者大同小异,sass基于Ruby语言编写,所以编译sass文件需要Ruby环境.我们使用sass并不需要过多了解Ruby语言,只需要安装Ruby环境即可,而less则主要是运行在node环境下,功能语法有类似之处.本文主要介绍Ruby

关于前端CSS预处理器Sass的小知识!

前面的话 ??"CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工具,提 供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护.本文将详细介绍sass的使用 定义 ??Sass是一门高于CSS的元语言,它能用来清晰地.结构化地描述文件样式,有着比普通CSS更加强大的功能.Sass能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样式

css框架之 ---- SASS

SASS是最早的CSS预处理语言,有比LESS更为强大的功能,不过其一开始的缩进式语法并不能为大众接受,不过由于强大的功能,还是有很多开发者选择了SASS. SASS是采用了Ruby语言编写的一款CSS预处理语言,(不用担心,我们并不用学习Ruby也可以使用全部功能)诞生于2007年,最初是为了配合HAML(缩进式HTML预编译器)而设计. 缩进式风格可以缩减代码量,强制代码风格,但不为大多数程序员接受,而且无法兼容已有的CSS代码,这也是SASS出现早,但是没有LESS普及广的原因之一. 但是

CSS 扩展技术

CSS扩展技术有两种: 1:LESS 2:SCSS/SASS less作为CSS的一种扩展,LESSCSS不仅向下兼容CSS的语法,而且连新增的特性也是使用CSS的语法.这样的设计使得学习LESS很轻松,而且你可以在任何时候回退到CSS. 申明变量的方法: @width:100px; @backgroundColor:blue; 其变量是“按需加载”(lazy loaded)的,因此不必强制在使用之前声明. 在 LESS 中可以定义一些通用的属性集为一个 class,然后在另一个 class 中

CSS预处理语言-less 的使用

Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Node 或浏览器端. Less的编译处理 作为一门CSS预处理语言,它并不像CSS一样能直接使用,而是需要编译后使用,如何编译呢,下面分node 和浏览器端两种情况解释. 浏览器端: 浏览器端使用less,只需要做如下两步: 1.引如Less 使用link标签引入less,需要注意的是 rel="stylesheet/less" <