SASS指南针

Wesley13
• 阅读 817
/**配置sass-用gulp自动编译sass变量计算功能嵌套注释代码重用    -继承    -Mixin    -颜色函数插入文件高级用法    -条件语句    -循环语句    -自定义函数 */

一、配置sass-用gulp自动编译sass

SASS是Ruby语言写的,必须安装Ruby,再安装SASS,

基于gulp编写编译sass要安装gulp-sass

npm install gulp-sass --save-dev

gulpfile.js中写两个任务:

  • sass编译任务

  • sass文件自动编译任务

    const gulp = require('gulp');const sass = require('gulp-sass');gulp.task('sass',function () { return gulp.src('scss//*.scss') .pipe(sass()) .pipe(gulp.dest('css'));});gulp.task('watch-sass', function(donw) { gulp.watch('scss//*.scss',gulp.series('sass')); console.log("====== watching sass files... =====");});

这样就完成了sass文件的实时编译了。下面开始sass之旅~

二、变量

所有变量以$开头,如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中

$blue:#1875e7;div {  color: $blue;}$side:left;.rounded {  border-#{$side}-radius:5px;}

对应的css:

div {    color: #1875e7;}.rounded {    border-left-radius: 5px;}

三、计算功能

在sass中使用算式

$var:1;body {  margin: (14px/2);  top: 50px + 100px;  right: $var * 10%;}

对应的css:

body {    margin: 7px;    top: 150px;    right: 10%;}

四、嵌套功能

SASS允许选择器嵌套、属性嵌套、在嵌套代码内,可用&引用父元素

/*选择器嵌套*/div {  h1 {    color: red;  }}/*属性嵌套*/p {  border:{    color:red;  }}/*嵌套代码内,可使用&引用父元素*/a {  &:hover {color:#fff}}

对应的css:

/*选择器嵌套*/div h1 {    color: red;}/*属性嵌套*/p {    border-color: red;}/*嵌套代码内,可使用&引用父元素*/a:hover {    color: #fff;}

五、注释

SASS共有两种注释风格。

标准的CSS注释 /*comment*/ ,会保留到编译后的文件。*

单行注释 // comment,只保留在SASS源文件中,编译后被省略。

在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。

/*comment1*/// comment2/*!  comment3 */

css:

/*comment1*//*!  comment3 */

六、代码的重用

6.1 继承

SASS允许一个选择器,继承另一个选择器,比如下面的class2继承了class1,要使用@extend命令:

.class1 {  border: 1px solid #ddd;}.class2 {  @extend .class1;  font-size: 120%;}

.class1, .class2 {    border: 1px solid #ddd;}.class2 {    font-size: 120%;}

6.2 Mixin

minxin是可以重用的代码块。

  • 使用@mixin命令,定义一个代码块;使用@include命令,调用这个minxin。

  • mixin还可以指定参数和缺省值,使用的时候可以根据需要加入参数

    /mixin定义一个代码块/@mixin left { float: left; margin-left: 10px;}div { @include left;}/mixin可以指定参数和缺省值, 使用的时候可以根据需要加入参数/@mixin right($value: 10px){ float: right; margin-left: $value;}div { @include right;}div2 { @include right(20px);}/用mixin生成浏览器前缀/@mixin rounded($vert, $horz, $radius: 10px) {     border-#{$vert}-#{$horz}-radius: $radius;     -moz-border-radius-#{$vert}#{$horz}: $radius;     -webkit-border-#{$vert}-#{$horz}-radius: $radius;}#navbar li { @include rounded(top, left); }#footer { @include rounded(top, left, 5px); }

    /mixin定义一个代码块/div { float: left; margin-left: 10px; }/mixin可以指定参数和缺省值, 使用的时候可以根据需要加入参数/div { float: right; margin-left: 10px; }div2 { float: right; margin-left: 20px; }/用mixin生成浏览器前缀/#navbar li {     border-top-left-radius: 10px;     -moz-border-radius-topleft: 10px;     -webkit-border-top-left-radius: 10px; }#footer {     border-top-left-radius: 5px;     -moz-border-radius-topleft: 5px;     -webkit-border-top-left-radius: 5px; }

6.3 颜色函数 - sass中的内置函数

SASS提供了一些内置的颜色函数,以便生成系列颜色。

内置的意思就是不需要自己去定义。

div {  color: darken(#cc3,10%);}

div {  color: #a3a329; }

6.4 插入外部文件

@import用来插入外部文件

@import "test2";/*在test.scss中引入test2.scss*/

/*我写在test2.scss中*/.csx {  color: red; }

生成后的test.css如下:将test2.scss中写的也生成到了test.css中了

,这个和CSS的 @import引入不一样,css不会将两个文件进行合并处理。

七、高级用法

7.1 条件语句

@if 、@else命令

/*条件语句*/p {  @if 1 + 1 == 2 {    border:1px solid;  } @else {    border: 2px dotted;  }}

p {border: 1px solid; }

7.2 循环语句

支持for循环

@for $i from 1 to 5 {   .border-#{$i} {      border: #{$i}px solid blue;    }}

 .border-1 {  border: 1px solid blue; } .border-2 {  border: 2px solid blue; } .border-3 {  border: 3px solid blue; } .border-4 {  border: 4px solid blue; }

while循环

$a: 6;@while $a > 0 {  .item-#{$a} { width:2em * $a; }  $a:$a-2;}

.item-6 { width: 12em; }.item-4 {width: 8em; }.item-2 { width: 4em; }

each命令 和for命令类似

@each $member in a, b, c, d {  .#{$member} {    background-image: url("/image/#{$member}.jpg");  }}

.a { background-image: url("/image/a.jpg");}.b { background-image: url("/image/b.jpg");}.c { background-image: url("/image/c.jpg");}.d {background-image: url("/image/d.jpg");}

7.3 自定义函数

/*自定义函数*/@function double($base) {  @return $base * 2;}.sidebar {  margin-left: double(5px);}

/*自定义函数*/.sidebar { margin-left: 10px; }

八、注意事项

变量运算时,符号两边要加空格,没加空格,编译就会失败

$a:$a - 2; // - 号两边要有空格

SASS指南针

Demo地址:https://github.com/pluscai/blog/tree/master/sass-demo

本文分享自微信公众号 - BUG架构师(pluscai1057756095)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
SASS和LESS等优缺点对比,使用方法总结 (笔记大全)
sass优点:用户多,更容易找到会用scss的开发,更容易找到scss的学习资源;可编程能力比较强,支持函数,列表,对象,判断,循环等;相比less有更多的功能;Bootstrap/Foundation等使用scss;丰富的sass库:Compass/Bourbon;sass缺点:在公司内部安装nodesass会失败,需
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
SASS基础
特点:1.在css基础上增加特性:变量、嵌套(nesting)、混合(@mixin)、继承(@extend);2.通过函数进行颜色值与属性值的运算;3.提供控制指令等高级功能;4.自定义输出指令;数据类型:Sass和JavaScript语言类似,也具有自己的数据类型,在Sass中包含以下几种数据类型:1\
Stella981 Stella981
3年前
CSS预编译器:Sass(入门),更快的前端开发
Sass扩展了CSS3,增加了规则、变量、混入、选择器、继承等等特性。Sass生成良好格式化的CSS代码,易于组织和维护。SASS是对CSS3(层叠样式表)的语法的一种扩充,它可以使用巢状、混入、选择子继承等功能,可以更有效有弹性的写出Stylesheet。Sass最后还是会编译出合法的CSS让浏览可以使用,也就是说它本身的语法并不太容易让浏览
Stella981 Stella981
3年前
Sass预编译
sass基于Ruby       ruby的模块管理器叫gem 正规的安装方式是geminstallsass        调用命令  sass  sass文件  css文件webpack编译sass    需要的模块styleloader cssloader sas
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Stella981 Stella981
3年前
React入门教程第三课
上节课中我提到了,在gulpfile中编写task编译js和sass的task。然后在项目中使用时发现,当项目内容越写越多时,编译速度会越来越久。看了一下编译过程。上次gulpfile中的定义是当监听文件改变时就执行编译全部js文件。查阅资料gulp编译加速在出来的结果中首条信息是博客园的如何在Gulp中提高Browserify的打包速度
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这