引入

  什么是sass?sass是css预处理器。

那预处理器又是什么?css本身不是一种编程语言,而预处理器是用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。

如今主流的预处理器分Less、Sass 和 Stylus三种, 我用过的就是less和sass,less和sass有很多语法上的不同,但是最根本的不同点是less是基于javascript的,而sass是基于ruby开发的。

预处理器编译工具

  鱿鱼引入提到的,sass文件最终还是要编译成正常的css文件才能为页面提供样式,所以这里需要一个sass的编译工具koala,一只可爱的小考拉。 

它可以实时编译less、sass、coffeScript和compass,编译后还可以进行代码压缩,当然还有其他很多的功能,可以到官网上去look look~

  

  使用方法简介:

  只要在项目文件夹(比如文件夹名为work)内创建基本的结构,有一个sass文件,里面放入.scss文件,然后将文件夹work拖入koala界面内,就会自动生成一个css文件夹,文件夹里有编译好的css文件。ps:别忘了在.html文件里引入你的css文件喔~这样你就可以放心地在你的.scss文件里写你的样式了,koala会帮你实时编译成.css文件的喔~就是这么强大~!~

如果博主的解释你还是木有懂的话~这里给大家提供一个图文并茂的链接,如果你还是没有看懂,就让你会使用koala的好gay蜜教一教你吧(然后问问自己484傻)~

   ps:使用sublime的可以到这里下载sass高亮插件和插件配置方法 --> 猛戳

装完插件后,我的世界已经成功从灰白变成了彩色~(o゜▽゜)o☆ duangduangduang ~

scss和sass的区别

  在进行语法介绍之前,要先提一下scss和sass的区别,因为刚开始我自己学sass也有些晕,明明是sass为什么有时候要以.scss结尾再进行编译呢?

  所以我google了一下,才发现scss和sass其实是同一种东西

  • scss以.scss后缀为扩展名 ; sass是以.sass后缀为扩展名
  • scss更贴近css的写法 ; 而sass更贴近ruby的语法,是以严格的缩进式语法规则来书写,不带大括号({})和分号(;) ,这是最重要的不同

所以也可能是因为很多程序猿不习惯sass这种写法,所以用less的程序猿才比sass多的吧,但是总的来说还是sass比less更强大

变量的使用

   1.变量声明: $

   2.定 义 域 : 在{}规则块中定义的只能在{}中使用,不能在其他的地方使用。而在{}外的变量可以在其他的{}内使用,有点类似js里的局部变量。

  

//定义变量,类似全局变量 
$nav-color: #F90;
$height:800px;
nav {
$width: 100px; //定义变量,类似局部变量,只能在此规则块中使用
width: $width; //使用局部变量
background-color: $nav-color;
height:100px;
} section{
height:$height;//使用局部变量
width:200px;
background-color:red;
} // .son可以引用nav里定义的变量$width,但是.box不可以,这就是因为sass里的代码是从上到下解析的

        3.变量的引用 :

        

$nav-color: #F90;
$section-border:10px solid $nav-color; //与边框有关的变量引用了与颜色有关的变量nav-color *{
margin:;
} .box{
height:100px;
width:100px;
border:10px solid $nav-color;
} section{
height:100px;
width:100px;
border:$section-border;
}

   4.变量名:中划线(-)和下划线(_)互通 :也就是说变量名取为red-rose,和取为red_rose达到的效果是相同的

 关于sass变量更详细的分析还可以从w3cplus上探寻 ---> 猛戳

嵌套css规则

      1.基本用法:像俄罗斯套娃一样,容器元素的样式规则会被单独抽离出来,而嵌套元素的样式规则会像容器元素没有包含任何属性时那样被抽离出来。

                           !但是此处不能添加伪类  

//scss代码:
$nav-color: #F90;
$section-border:10px solid $nav-color; *{
margin:;
} .box{
height:100px;
width:100px;
border:10px solid $nav-color;
.son{
height:60px;
width:60px;
background-color:yellow;
.sonson{
height:30px;
width:30px;
background-color:blue;
}
}
} //编译成css后

  .box {height: 100px;width: 100px;border: 10px solid #F90; }
  .box .son {height: 60px;width: 60px;background-color: yellow; }
  .box .son .sonson {height: 30px;width: 30px;background-color: blue; }

 

2.使用伪类

       标识符:&   

此处的标识符就我的理解来看,它类似于js里的this,是对当前元素的操作,在这里是对.sonson的操作,虽然.sonson有许多父级但并不影响它的父级

.box{
height:100px;
width:100px;
border:10px solid $nav-color;
.son{
height:60px;
width:60px;
background-color:yellow;
.sonson{
height:30px;
width:30px;
background-color:blue;
&:hover{
background-color:red;
cursor:pointer;
}
}
}
} //编译成.css后

.box .son .sonson:hover {background-color: red; cursor: pointer;}

3.  群组选择器

           这样就可以减少很多重复的代码了,有没有简化很多?

//scss文件

$nav-color: #F90;
  $section-border:10px solid $nav-color;

.box1,.box2{
h1{
border:$section-border;
width:300px;
}
} //编译成.css文件后

.box1 h1, .box2 h1 { border: 10px solid #F90; width: 300px; }

 

   4.子组合选择器和同层组合选择器:

子组合选择器

      >  :  选择一个元素的直接子元素

同层组合选择器

      +  :  选择一个元素后紧跟的一个元素

~  :  选择一个元素后的所有元素

   5.嵌套属性

     下面拿border来举例,boder有border-style、border-width、border-color等属性,还可以分为border-left、border-top、border-bottom...等等等等~

所以现在就有这样一种用法:

//.scss文件
.box{
height:100px;
width:100px;
margin:100px auto;
border:1px solid black{
top:0px;
}
} //编译成.css文件后

  .box {
    height: 100px;
    width: 100px;
    margin: 100px auto;
    border: 1px solid black;
    border-top: 0px; 

  }

导入sass文件

  1.基本用法: @import"文件名" (不需要加后缀)

  

  2.默认变量

    写法:!default

    定义:如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。

    好处:可以用于css组件开发

        如果要进行组件开发,要使用局部文件,局部文件名前要加下划线_,但是在引用局部文件的时候可以不写下划线和后缀名,

如局部文件名为_fruit.scss,导入的时候就可以写成@import "fruit"

    小栗子:

  

$color:red;
$color:blue !default;
p{
color:$color;//red
}

由于sass是至上而下执行的,所以会发生代码覆盖的情况。但是上面小栗子证实了如果使用了默认变量,就会直接使用赋过值的那个变量(eg.$color:red;)

    

  3.导入文件

    写法:@import '文件名'

    使用场合:

    3.1 可以在scss文件里导入其他的scss文件,文件名要以_为开头,导入时可以不加_和后缀

//main.scss
@import 'body';
@import 'a';

$width:100px;
$color:#ccc;
.box{
height:300px;
width:$width;
div{
height:$width;
width:$width;
background-color:$color;
}
} //_body.scss
body{
background-color:pink;
} //_a.scss
.aaa{
height:100px;
width:100px;
background-color:#ccc;
&:hover{
background-color:red;
cursor:pointer;
}
}

  3.2也可以在别的元素里导入别的scss文件

//HTML结构:
<div class="box">
<div></div>
<div></div>
</div> //main.scss
$width:100px;
$color:#ccc;
.box{
height:300px;
width:$width;
@import "a";
} //_a.scss 给.box下的div加样式
div{
height:10px;
width:200px;
background-color:yellow;
border:1px solid black;
}

混合器

标识符

    定义混合器 @mixin

    使用混合器 @include

 使用场合:需要不停重复滴使用同一段样式

小栗子:这样就可以解决很多css3繁琐的兼容写法了

$width:100px;
$color:#ccc; @mixin border-style{
border:10px solid black;
border-radius:25px;
-moz-border-radius:25px;
-webkit-border-radius:25px;
} .box{
height:300px;
width:$width;
@include
border-style;
}

   混合器传参:混合器中还可以传递参数

  - 定义然后传参: 就像函数传参一样,先定义函数,然后向函数中传递参数

@mixin div-style($width,$color,$border,$border-radius,$bgcolor){ //类似定义函数
border:$border;
width:$width;
height:200px;
border-radius:$border-radius;
-moz-border-radius:$border-radius;
-webkit-border-radius:$border-radius;
background:$bgcolor;
} .box{
@include div-style(100px,red,10px,20px,red); //类似传递参数
} //或者而写成这样,会更清楚地显示出每个参数的值,就不用对应顺序了

  .box{
    @include div-style(
      $width:100px,
      $color:red,
      $border:1px solid black,
      $border-radius:10px,
      $bgcolor:#ccc
    );
  }

    

选择器继承    

  标识符:@extend

  使用场合:需要重复使用代码时

类似于js里的继承~

 .box{
height:100px;
width:100px;
background-color:red;
div{
@extend .box;
height:40px;
background-color:blue;
}
} //编译成css后

.box, .box div { height: 100px;width: 100px;background-color: red; }
    .box div { height: 40px; background-color: blue; }

 

静默注释   

  简单说也就是在.scss文件里的注释分为两种

    // : 编译成.css后不会出现在.css文件中

    /*..*/:编译成.css后会出现在.css文件中

其他

    以上的一些介绍都是关于sass的一些介绍和基本语法,当然sass还有很多其他的功能,和less一样可以在样式中进行计算啦,还有很多有用的函数,那样就需要深入去学习了~好吧这篇又有点太书面化了,知识点有点繁琐,不过已经尽力简化了,参考的资料有很多太书面化都不知道在说些啥,只好又参考很多资料来理解,不过发现有了JavaScript的基础来理解sass就很容易了,比如&和js里的this来对比,选择器的继承和js里的继承来对比,收获很大~

参考资料: http://blog.jobbole.com/24671/

http://www.sass.hk/sass-course.html

关于sass的介绍和基本语法的更多相关文章

  1. less和sass的介绍和差异

    ● 混入(Mixins)——class中的class: ● 参数混入——可以传递参数的class,就像函数一样: ● 嵌套规则——Class中嵌套class,从而减少重复的代码: ● 运算——CSS中 ...

  2. 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写, ...

  3. sass和less、stylus语法(2)

    6.运算符(Operations)CSS预处理器语言还具有运算的特性,其简单的讲,就是对数值型的Value(如:数字.颜色.变量等)进行加减乘除四则运算.这样的特性在CSS样式中是想都不敢想的,但在C ...

  4. Sass的使用和基础语法

    sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...

  5. MySql数据库基本介绍和基本语法

    一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...

  6. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  7. 【css预处理器】------css预处理器及sass基本介绍------【巷子】

    001.什么是css预处理器? css预处理器定义了一种新的语言.用一种专门的编程语言,为css增加了一些编程的特性,将css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作.(通俗点说“” ...

  8. 2、Web基本介绍及Html语法介绍

    1.1 Web基本介绍 1.web就是world wide web的缩写.称之为全球广域网,俗称www.2.我们可以将web理解为就是当前的一种互联网.对于我们来说更多的就是网站服务.3.网站我们可以 ...

  9. Python学习手册之Python介绍、基本语法(二)

    在上一篇文章中,我们介绍了Python的一些基本语法,现在我们继续介绍剩下的Python基本语法.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/987193 ...

随机推荐

  1. Python 学习---------Day4

    第十章 Python语句简介Python的代码书写要求,以及换行等语句可以扩越多行,只要将其封闭在圆括号内,方括号内或大括号内即可,可以使用分号终止.用\可以允许我们跨越多行一个简单的交互式循环whi ...

  2. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  3. video标签无法使用的问题

    原因:IIS的MIME中未注册MP4.ogg.webm相关类型,导致IIS无法识别 解决方法:在IIS中注册MP4.ogg.webm类型,以下以MP4为例,ogg和webm以此类推: windows ...

  4. zabbix3.2安装graphtree3.0.4

    下载graphtree3.0.4 wget https://raw.githubusercontent.com/OneOaaS/graphtrees/master/graphtree3-0-1.pat ...

  5. Google one联合联发科,国内低端智能机方案怎么办?

    欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=46 Google在Google I/O大会, 发布的Android One,由于看重的是 ...

  6. Python札记 -- 使用easy_install进行模块/包管理

    今天在阅读以前项目代码时,发现里面使用的第三方模块的参数相当诡异,总是对不上.经过分析之后,发现是自己安装的第三方模块跟项目使用的版本不一致.在Python中进行模块/包管理的话,就不得不提到easy ...

  7. sql server 写性能优化

    潜在的方案是: (1)2014版本的内存表 (2)表分区,将表数据存放在多个硬盘上. (3)采用SSD磁盘阵列. (4)不重要的表关闭事务日志.??

  8. python Scrapy

    由于项目要使用新闻,大量的数据所以想到了python的scrapy 下面大致讲一讲如何安装使用,直到整个新闻采集模块完成,网址什么的自己找 这里只是示范这里的项目环境是python 2.66 cent ...

  9. Javascript aop(面向切面编程)之around(环绕)

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被 ...

  10. hadoop rpc基础

    第一部分: hadoop rpc基础 RPC,远程程序调用,分布式计算中C/S模型的一个应用实例. 同其他RPC框架一样,Hadoop分为四个部分: 序列化层:支持多种框架实现序列化与反序列化 函数调 ...