<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. MVC+Jqgrid

    基于MVC+Jqgrid的列表页面 2014-12-08 12:01 by 刘尼玛, 1583 阅读, 20 评论, 收藏, 编辑 一.前言 “尼玛哥,上周你教我改了下OA系统UI,黄总看了很满意呀. ...

  2. PHP 6:PHP 基本数据类型

    原文:PHP 6:PHP 基本数据类型 本章将介绍PHP基本类型.相信我们已经熟悉了C/C++,C#或者Java里的任意一种语言.本章会以C#为比较语言.OK,如果你想学PHP,你最先考虑的是什么呢? ...

  3. 【 D3.js 进阶系列 — 5.0 】 直方图

    直方图用于描写叙述概率分布,D3 提供了直方图的布局 Histogram 用于转换数据. 假设有数组 a = [10, 11, 11.5, 12.5, 13, 15, 19, 20 ],如今把10~2 ...

  4. 探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量

    IntelliJ IDEA在业界被公认为最好的Java开发平台之一,JetBrains公司将在12月正式发布IntelliJ IDEA 13版本. 现在,小编将和大家一起探秘密IntelliJ IDE ...

  5. POJ 3602 Typographical Ligatures

    [题意简述]:题意就是输入一串字符串,问我们有多少种不同的字符,也就是说出现过一次的字符,下次就不记到种数中了,特别的有  ff, fi ,fl ,ffi ,ffl,'',``, 这几个每一个算是一种 ...

  6. 关于TD邮件功能不能发到认证邮箱的解决之法

    [原创] 关于TD邮件功能不能发到认证邮箱的解决之法 认证邮箱, 邮件服务器, 用户, 邮件系统 鉴于不少同行询问TD发邮件的问题,今天重新更新一下说明 解决问题的原则如下一.在TD服务器上安装一个邮 ...

  7. QTP脚本不能录制怎么办?

    QTP是基于VBS脚本语言的,大部分VBS脚本都能在QTP上运行,只是在一些细节上略有不同,比如说VBS上停止用sleep,QTP上用wait.QTP的强大之处在于对程序窗口的操作,有很多针对窗体的属 ...

  8. JSON之FastJson

    FastJson是什么? 从网上查到--- 官网地址:http://code.alibabatech.com/wiki/display/FastJSON/Overview(已关闭) FastJSOn是 ...

  9. 使用EasyUI的树控件构建Web界面

    最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...

  10. -协同IResult

    Caliburn.Micro学习笔记(五)----协同IResult   今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows cust ...