Sass(Syntactically Awesome Style Sheets) ,是一种css预处理器和一种语言, 它可以用来定义一套新的语法规则和函数,以加强和提升CSS. 它有很多很好的特性,但是它有类似Ruby的语法,没有花括号,没有分号,遵循严格的缩进

它在书写规则,变量命名方面和CSS代码有着很大的区别。于是,后来官方在2010年推出了一个全新的语法,叫做SCSS, 意思是 Sassy CSS. 这个语法带来了对CSS友好的语法,试图弥合Sass和CSS之间的差别.

那么,它到底有哪些特性呢,我们来看一下:

1. 嵌套

我们可以看一个简单的例子

.footer {
background-color: red;
padding: 10px 20px;
.navigation{ border: solid 5px black;
a {
text-decoration: underline;
padding: 10px; }
} .social-buttons { background-color: white;
float: right;
a {
color: white;
margin-right: 15px; } }
}

上面的代码中,就出现了多层嵌套

2. 变量

在CSS文件中,我们经常会用到颜色color, 可能好几个元素的CSS样式都会用到同样的一种颜色,因为网站往往是一个统一的风格。 这样,我们如果一旦要更改这个颜色,我们就要更改整个css文件中的所有地方。而变量解决了这个问题,我们可以把一个颜色值赋给一个变量,所有用到这个颜色的地方,都用这个变量替代。这样,需要更改颜色时,只需要修改这个变量的值就可以了. 当然,CSS中的宽度,长度等也可以类似这样,使用统一的变量来进行.

我们来看下面的例子

$pageHeight: 100%;
$pageWidth: 100%;
$containerWidth: 950px;
$containerHeight: 700px; $white: #FFFFFF;
$black: #000000;
$grey: #E3E3E3;
$blue: #1f605b;

上面的例子中,定义了8个变量,前面4个事宽度和高度,后面4个是颜色。 以后在CSS文件中需要用到这些变量值时,只需要用这个变量名代替就可以。

3. 局部

Sass可以通过使用局部系统来把样式表分成多份文件,根据不同的需求组织不同部分的样式表,形成不同的css文件

比如,把页眉样式写在页眉样式表中,类似的有  页脚样式表,导航样式表,按钮样式表....我们公司在开发多个项目时,都采用了这种方法,形成多个scss文件,比如有

colours.scss, typography.scss, layout.scss, footer.scss, header.scss, navigation.scss, blocks.scss, forms.scss, slider.scss, buttons.scss, margins.scss,icons.scss, tables.scss.....

最后有一个style.scss 类容如下

@import "colours";
@import "typography"; // Import css components
@import "layout";
@import "footer";
@import "navigation";
@import "blocks";
@import "forms";
@import "slider";
@import "buttons";
@import "margins";
@import "icons";
@import "tables";
@import "custom-bmd-model";

然后再使用gulp命令来生成最后的style.css文件

讲到@import命令,就再来说一说它的使用.

1) @import命令也可以用于在html文件中导入外部的css文件,但是这时,你需要注意,如果要使@import导入的css文件中的css规则起作用, import导入命令必须先于除了 @charset的其他任何CSS规则,我们来看下面的例子

<style type="text/css">
.myColor{
color: orange;
}
@import "test.css"; </style>
<p class="myColor">看看我的颜色</p> test.css文件如下 .myColor{ color: black;
}

执行之后,发现颜色是橘色 (orange), 而不是黑色(black).  在上面例子中,html文件中定义了.myColor 的CSS规则,然后接下来再导入test.css文件,该文件有一个完全同名的css规则。但是从最后的结果来看,它没有被运用。用的是它前面的html文件中的css规则

我们再换个位置看看

<style type="text/css">
@import "test.css";
.myColor{
color: orange;
} </style>
<p class="myColor">看看我的颜色</p> test.css文件如下 .myColor{ color: black;
}

这里,我们把@import命令置于其他css规则之前,发现就起作用了,字体颜色变成了黑色

所以特别注意  import规则一定要先于除了 @charset的其他任何CSS规则

2) 使用@import命令进行媒体查询

媒体查询是CSS3中出现的新特征,在css中使用media关键字来指定, 一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式范围的表达式组成,比如宽度,高度和颜色。 它允许内容的呈现针对一个特定范围的输出设备进行裁剪,而不必改变内容本身.

我们通常可以在style标记包括的CSS中使用媒体查询,如下:

<!-- Style标记的样式表中的CSS媒体查询-->
<style>
@media (max-width: 800px)
{ .media_test{ display: none;
}
} </style>

除了这种方式,我们也可以在link元素引用css文件时,采用媒体查询,如下所示:

<link rel="stylesheet" media="(max-width: 1000px)" href="test.css" />
<link rel="stylesheet" type="text/css" href="print.css" media="print" />

同样的,@import命令也可以用于媒体查询,而且使用@import进行媒体查询时,不需要使用media关键字

@import url("paint.css") print;
@import "common.css" screen,projection;
@import url('landscape.css') screen and (orientation: landscape);
@import url('mobile.css') (max-width: 780px);

有一点需要知道了解的是, 无论是通过使用link或者import方式,都会下载所有的css文件,然后再根据媒体media去选择执行应用的css文件。而不是根据用户使用的媒体media去选择性的下载css文件

4. 混合宏

使用Sass的一个很大的特性是,混合宏.  混合宏是很小的代码片段(类似局部), 使用@mixin标志来标识   你可以在文件中的任何部分,使用@include 标志来复用这个混合宏.

混合宏结合变量使用,是个很普遍的例子,  最常见的例子就是创建圆角按钮. 创建一段实现圆角代码的混合宏,用传入的变量来代替圆角值, 这样,可以根据传入变量值不同,实现不同的圆角按钮

例子如下

//Mixin
@mixin border-radius($radius)
{ -webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
} .test-element1{ @include border-radius(5px); } .test-element2{ @include border-radius(10px); }

我们在来看一个例子

//SCSS

@mixin box-size($width:50px,$height: 50px)
{
width: $width;
height: $height;
} .demo{ @include box-size; } .demo2{ @include box-size(100px,200px);
}

编译之后就是如下

/*css*/

.demo{

      width: 50px;
height: 50px; } .demo2{ width: 100px;
height: 200px; }

在公司项目中,前端css文件我们都是写SCSS文件,然后通过@import导入到style.scss文件中,最后通过gulp来生成style.css文件。

现在几乎所有Sass的工具,插件,demo等都是使用SCSS语法来开发。已经很难再找到一个Sass缩进语法的插件等,所以,强烈推荐使用SCSS来写css文件

另外,注意一点,就是Sass从来没有写成SASS, 无论指语法还是这个语言,都是使用Sass

而SCSS一直都是大写

CSS, Sass, SCSS 关系的更多相关文章

  1. CSS & SASS & SCSS & less

    CSS & SASS & SCSS & less less vs scss https://github.com/vecerek/less2sass/wiki/Less-vs. ...

  2. 前端编码规范(4)—— CSS 和 Sass (SCSS) 规范

    CSS and Sass (SCSS) style rules ID and class naming ID和class(类)名总是使用可以反应元素目的和用途的名称,或其他通用名称.代替表象和晦涩难懂 ...

  3. CSS预处理器Sass(Scss)、Less、Stylus

    CSS 预处理编译器能让我成程序化其的方式编写CSS代码,可以引入CSS中没有的变量.条件.函数等特性,从而让代码更简单易维护,但一般按预处理器语法编写的代码无法直接在浏览器中运行,需用通过工具比如g ...

  4. CSS预处理器 Less Sass,Scss 编译 Sourcemap调试

    sass.less和stylus的安装使用和入门实践     SASS用法指南    Sass Basics CSS预处理器 css preprocessor 预处理器即preprocessor,预处 ...

  5. sass/scss 和 less的区别

    一. Sass/Scss.Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量 ...

  6. vue2.0以上版本安装sass(scss)

    一.首先说明sass和scss的区别. 1.异同:1)简言之可以理解scss是sass的一个升级版本,完全兼容sass之前的功能,又有了些新增能力.语法形式上有些许不同,最主要的就是sass是靠缩进表 ...

  7. Less、Sass/Scss

    一.Less.Sass/Scss是什么? 1.Less: 是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量.继承.运算.函数. Less 既可以在客户端上运行 (支持IE 6+, Webki ...

  8. sass/scss 和 less对比

    一. Sass/Scss.Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量 ...

  9. 【Sass/SCSS】预加载器中的“轩辕剑”

    [Sass/SCSS]预加载器中的"轩辕剑" 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 随着前端 ...

随机推荐

  1. 在我的电脑右键 Manage 拒绝访问的解决方法

    为什么我的电脑右键里的“管理”会变成“manage”啦.原来是中文的,点了之后出来一个对话框,标题是“桌面”说是“拒绝访问” 是系统环境变量里少了 windir=C:\WINDOWS 方法是:打开系统 ...

  2. castle windsor学习-----Inline dependencies 依赖

    应用程序中的很多组件都会依赖其他的服务组件,很多依赖一些不合法的组件或者容器中没有的组件,例如int类型.string类型.TimeSpan类型 Windsor支持以上的场景,注册API有Depend ...

  3. 大话设计模式--策略模式 strategy -- C++实现实例

    1. 策略模式: 它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户. 用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合. 实例中策 ...

  4. java原生数据类型和引用类型

    java 中String 是个对象,是引用类型基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型, ...

  5. Luogu P1377 [TJOI2011]树的序:离线nlogn建二叉搜索树

    题目链接:https://www.luogu.org/problemnew/show/P1377 题意: 有一棵n个节点的二叉搜索树. 给出它的插入序列,是一个1到n的排列. 问你使得树的形态相同的字 ...

  6. spring学习(5)

    bean配置 启用注解 <context:annotation-config/> 使用spring的特殊bean 对bean BeanPostProcessor spring本身提供的特殊 ...

  7. spring boot: EL和资源 (一般注入说明(二) @Service注解 @Component注解)

    @Service用于标注业务层组件 : 将当前类注册为spring的Bean @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即 ...

  8. openlayers 3加载GeoServer发布的wfs类型服务

    转:https://blog.csdn.net/u013323965/article/details/52449502 问题产生:      openlayer3加载WFS存在跨域问题,需要用json ...

  9. hdu-5583 Kingdom of Black and White(数学,贪心,暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5583 Kingdom of Black and White Time Limit: 2000/1000 ...

  10. Convolutional Neural Networks for Visual Recognition 1

    Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程.这个课程重点介绍了deep learning里的一种比较流行的模型 ...