<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/, 有时间 再作整理;

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

  1. 在Vue中添加css扩展语言sass

    npm install vue-loader --save-dev npm install node-sass --save-dev npm install sass-loader --save-de ...

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

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

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

    编写css是前端工作中,一项普通而又频繁的劳动,由于css并不是一门语言,所以在程序设计上显得有些简陋.对于小型项目来说,css的量还不至于庞大,问题没有凸显,而如果要开发和持续维护一个较为大型的项目 ...

  4. CSS预处理器之SASS用法指南

    CSS预处理器之SASS用法指南 一.什么是SASS Sass是是一种基于ruby编写的CSS预处理器,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 诞生于200 ...

  5. css预处理语言--让你的css编写更加简单方便

    CSS预处理语言之一-------LESS Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Nod ...

  6. css预编译语言 sass scss(变量$var, css嵌套规则,@import规则,@extend,@mixin)

    什么是sass Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并且完全兼容 CSS 语法. Sass 有助于保持大型样式 ...

  7. laravel 中CSS 预编译语言 Sass 快速入门教程

    CSS 预编译语言概述 CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量.函数.继承等机制,因此很容易写出大量没有逻辑.难以复用和扩展的代码,在日常开发使用中,如果没 ...

  8. CSS预处理器(SASS和LESS)

    Sass框架应用Sass简介 Sass又名SCSS,是CSS预处理器之一,它能让你更好更轻松的工作.Sass官网是这样描述Sass的:**Sass是一门高于CSS的元语言,能用来清晰的.结构化地描述文 ...

  9. css预处理器 sass和stylus对比以及常用功能

    在众多的css预处理器语言中,sass和stylus算是十分优秀的两个.本文主要针对两者的常用功能做个简单的对比分析.在对比中了解二者的差异,同时帮助大家更好的掌握这两种预处理语言. 本文涉及到的sa ...

随机推荐

  1. IOS被遗忘的知识

    IOS ARC项目使用非ARC文件 1.自己的旧项目没有使用ARC,可是引入的第三方库却是使用了ARC的. 对于第一个情况,给採用了ARC的源文件,加入-fobjc-arc选项 2.自己的新项目使用了 ...

  2. dd命令简单易用,例如

    dd命令简单易用,例如 bs单位,count为写入的范围区间,例如以下举例: 例:使用dd清除vote disk和ocr(裸设备)  $dd if=/dev/zero of=/dev/rrac_ocr ...

  3. 定制openwrt的根文件

    都在package文件夹之中 1 ssh登陆欢迎文字,在package/base-files/files/etc/banner中 2 路由器的默认机器名字,在package/base-files/fi ...

  4. POJ Big Christmas Tree(最短的基础)

    Big Christmas Tree 题目分析: 叫你构造一颗圣诞树,使得 (sum of weights of all descendant nodes) × (unit price of the ...

  5. 1001 - Another A+B

    1001 - Another A+B Description Give you an integer a, you are to find two another integers which sum ...

  6. Twitter Bootstrap JavaScript插件

    Twitter Bootstrap JavaScript插件本文收集了10款非常不错的JavaScript Twitter bootstrap扩展插件,利用Boostrap开发者可以节省大量的时间修复 ...

  7. Ubuntu 14.04 字体设置

    ubuntu 14.04消息公布后,我迫不及待地安装和使用.不知道怎么搞的,整个系统彻底改变了字体.有罪,看. 后来.听说文泉驿米黑效果不错.就试了一下,确实还行. 以下是设置方法: 1.安装文泉驿米 ...

  8. Unit of work + Repository

    (Unit of work + Repository) 今日后开启进阶模式! 谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository) ...

  9. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

  10. Linux系统编程:dup2()重定向

    对于Dup2 的理解: 源代码: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #inclu ...