前言:本文中所有sass文件都指后缀名为scss的文件。在此也建议使用后缀名为scss的文件,以避免sass后缀名的严格格式要求报错。

一、sass插件的安装:

gulp-sass-china

//  1.安装插件
npm install gulp-sass-china // 2.引入插件模块
let sass = require("gulp-sass-china"); // 3.定义指令
gulp.task("sass",()=>{
return gulp.src("sass/*.scss")
.pipe(sass().on("error",sass.logError))
.pipe(gulp.dest("css"))
.pipe(connect.reload());
}) // 4.监听文件更改
gulp.task("watch",()=>{
gulp.watch("sass/*.scss",["sass"])
}) // gulp-sass-china文档参考:
// https://www.npmjs.com/package/gulp-sass-china

二、sass介绍

    (1)sass是一种高效css编译模式,目前这种高效的css编译方式有两种:sass/less。
 
    (2)sass基于ruby语言,特点是没有大括号,换行需要用缩进表示,非常难受。
 
    (3)后来sass开发了两种后缀名文件:一种后缀名为sass,不使用大括号和分号。
    
    (4)另一种就是我们这里使用的scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号。
    
    (5)所有sass文件都指后缀名为scss的文件。在此也建议使用后缀名为scss的文件,以避免sass后缀名的严格格式要求报错。
    
    (6)sass是需要编译的,sass不能直接用于页面。它可以极大地提高编程效率(对于使用熟练的人来说)。
 
    (7)sass想要应用在项目中需要编译成css文件。这里使用gulp插件进行编译(gulp-sass-china)。
三、sass语法
(1)变量:
//    必须以$开头, 后面加上!default那就代表这个是当前变量的默认值。
$font-size:16px;
div{
font-size: $font-size;
}

 
(2)复杂变量的使用:

  nth()方法,第一个参数为复杂变量,第二个参数为复杂变量的第几个值,从1开始数一般我们都将变量当做属性值来使用,但是也有极特殊情况下我们会将变量当做class里的类来使用。这时候,我们必须以#($name)的方式来使用变量;

    $linkColor:#b6b6b6 #ddd!default;
div{
color: nth($linkColor,1);
&:hover{
color:nth($linkColor,2);
}
}
$name:top !default;
.class-#{$name}{
border-#{name}:1px solid #b6b6b6;
}

(3)多值变量:map 和 list(复杂变量):

// 多值变量代表的是多维数据的存储方式,换句话说,list相当于js中的数组map相当于js中的对象。
// list数据一般用空格分割, 但是也可以用 逗号 或者小括号分割多个值。 list:
$list:(20px 40px)(30px 20px)(40px 30px);//相当于多维数组,其他格式同理;
$list:20px 30px 40px 50px 60px;
$list:20px,30px,40px,50px,60px; // 使用:对于list的使用,可以使用 nth($list,num)去调用;
// 当然我们还可以去使用其他方式;
length($list) //返回list的长度
nth($list, $n) //返回索引的项目
set-nth($list, $n, $value) //设置list中第n个的值
join($list1, $list2, [$separator]) //将两个列表链接在一起
append($list1, $val, [$separator]) //追加一个值到列表最后
zip($lists…) //将几个列表组合成多维列表
index($list, $value) //返回一个列表中值的位置 $list:(top 20px 30px) (left 40px 50px) (right 60px 70px);
@each $name,$width,$height in $list{
.box-#{$name}{
width:$width;
height:$height;
}
} map:
// map的数据是以键值对形式出现的,期中value可以是list。格式为
$map:(key1:value1, key2:value2, key3:value3)。
// 最常用的取值方法就是用map-get($map,$key) 进行取值 // 关于map还有很多函数:
map-get($map, $key) //返回key值;
map-merge($map1, $map2) //合并两个$map;
map-remove($map, $keys…) //删除某个value并返回value值;
map-keys($map) //以list形式返回所有$map 的key;
map-values($map) //以list形式返回所有$map中的value;
map-has-key($map, $key) //查看当前的$map是否有这个key
keywords($args) //返回一个关键字 $headers:(h1:20px,h2:30px,h3:40px);
@each $key, $value in $headers{
#{$key}{
font-size: $value;
}
}
// 这里的each用法那和我们js中的for-in用法基本一致,只不过写法不同。
// $key 相当于for-in中的变量,$value 相当于for-in中的obj[i];

(4)嵌套

  // sass可以进行选择器的嵌套,表示层级关
// 选择器嵌套:
ul{
li{
list-style: none;
color:nth($linkColor,1);
}
}
// 属性嵌套:
.class{
border:{
style:solid;
left:none;
right:1px;
color:#b6b6b6;
}
}

(5)@at-root(不推荐使用):

//跳出当前选择器嵌套。
.class{
color:f10;
.child{
width:100px;
}
}
.class2{
@at-root .child{
color:#b6b6b6;
}
}
@at-root (without: ...) 和 @at-root (with: ...)
// 默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support
// 如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。
// 这个语法的关键词有四个:
// all(表示所有)
// rule(表示常规css)
// media(表示media)
// support(表示support,因为@support目前还无法广泛使用,所以对其忽略)。
// 我们默认的@at-root其实就是@at-root (without:rule)。
@media screen and (max-width:641px){
.parent{
color:#b6b6b6;
@at-root .child{
width:100px;
}
}
}
// 在这里.child只会跳出.parent 和.parent类作为同级,
// 而不会跳出@media 那么我们如何让他跳出@media那?
@media screen and (max-width:641px){
.parent{
color:#b6b6b6;
@at-root (without:media) {
.child{
width:100px;
}
}
}
}
// 这种编译模式会将我们的css编译成
@media screen and (max-width: 641px) {
.parent {
color: #b6b6b6;
}
}
.parent .child {
width: 100px;
}
// 也就是说,这时候我们的 .child 带着他的父级跳出了media嵌套。
@media screen and (max-width:641px){
.parent{
color:#b6b6b6;
@at-root (without:all) {
.child{
width:100px;
}
}
}
}
// 和刚才的执行结果有稍微的一点差异,变成了这个样子;
@media screen and (max-width: 641px) {
.parent {
color: #b6b6b6;
}
}
.child {
width: 100px;
}
// 注意:这次的跳出是不带父级的。
// 小技巧:@at-root 其实有很多的组合配合,和 &配合可以改变css的从属关系;
.parent{
@at-root .child &{
color:#b6b6b6;
}
}

(6)@mixin:

// mixin(混合)
// sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,
// 也可以给参数设置默认值。声明的@mixin通过@include来调用。sass中可用mixin定义一些代码片段,
// 且可传参数,方便日后根据需求调用。从此处理css3的前缀兼容轻松便捷。
// 无参数 mixin
@mixin marginCenter{
margin-left:auto;
margin-right:auto;
}
.cont{
@include marginCenter;
}
// 有参数 mixin
// 1)必须传参数的应用
@mixin transform($type){
-webkit-transform: $type;
-moz-transform: $type;
-ms-transform: $type;
-o-transform: $type;
transform: $type;
}
.box{
@include transform(scale(1.2))
}
// 2)设置默认情况的mixin(当你不传入参数直接使用的话那会调用默认值)
@mixin opacity($opacity:50){
opacity: $opacity/100;
filter:alpha(opacity=$opacity)
}
.box{
@include opacity()
}
// 多个参数 mixin
// 调用时可直接传入值,如@include传入参数的个数小于@mixin定义参数的个数,
// 、则按照顺序表示,后面不足的使用默认值,如不足的没有默认值则报错。
// 除此之外还可以选择性的传入参数,使用参数名与值同时传入。
@mixin line($border:1px border #ccc, $padding:10px){
border-bottom:$border;
padding-top:$padding;
padding-bottom:$padding;
}
.list ul{
@include line(1px solid #ccc);
}
.list p{
@include line($padding:15px);
}
// 多组值参数mixin
// 一个参数可以有多组值,如box-shadow、transition等,
// 那么需要在参数后加三个点表示,如$shadow...
@mixin box-shadow($shadow...) {
-webkit-box-shadow:$shadow;
box-shadow:$shadow;
}
.box{
border:1px solid #ccc;
@include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),
0 4px 4px rgba(0,0,0,.3));
}
//  扩展/继承 
// sass可通过@extend来实现代码组合声明,使代码更加优越简洁。
.active{
border:1px solid #b6b6b6;
padding:10px;
color: #333;
}
.success{
@extend .active;
width:100px;
}

(7)运算:

// sass可进行简单的加减乘除运算等,当我们拿到一张需要转换成百分比或rem布局的设计稿,这时候我们有福了
.container{
width: 100%;
}
//百分比
.aside{
width:(600px/960px)*100%;
}
//rem
.article{
width:(300px/960px)*1rem;
}

(8)函数:

// sass定义了很多函数可供使用,当然你也可以自己定义函数,以@fuction开始。
// 实际项目中我们使用最多的应该是颜色函数,而颜色函数中又以lighten减淡和darken加深为最,
// 其调用方法为lighten($color,$amount)和darken($color,$amount),
// 它们的第一个参数都是颜色值,第二个参数都是百分比。
$baseFontSize:10px;
$gray:#ccc;
@function pxToRem($px){
@return ($px/$baseFontSize)*1rem;
}
body{
font-size:$baseFontSize;
color:lighten($gray,10%);
}
.test{
font-size:pxToRem(16px);
color:darken($gray,10%);
}
// 这个和我们JS中的函数那非常的相似,可以和我们js中的函数一样使用。
// 同时注意,这里的返回值几乎是必须的所以请在每个函数结束时,使用@return去返回需要的返回值。

  

项目开发---使用node.js中sass语法的更多相关文章

  1. 配置node.js中的express框架

    玩node.js,不玩后台那就是杀鸡牛刀,今天没事整理一下以前开发node.js后台的心得 1.首先安装node.js以及cnpm,在这儿我就不说了,看我node.js中的另一篇文章node.js的安 ...

  2. Node.js中的不安全跳转如何防御详解

    Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个性能非常强劲的Java引擎,于是Google自己开发了一个高性能的 ...

  3. 前端走进机器学习生态,在 Node.js 中使用 Python

    这次给大家带来一个好东西,它的主要用途就是能让大家在 Node.js 中使用 Python 的接口和函数.可能你看到这里会好奇,会疑惑,会不解,我 Node.js 大法那么好,干嘛要用 Python ...

  4. Node.js 中的进程和线程

    线程和进程是计算机操作系统的基础概念,在程序员中属于高频词汇,那如何理解呢?Node.js 中的进程和线程又是怎样的呢? 一.进程和线程 1.1.专业性文字定义 进程(Process),进程是计算机中 ...

  5. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  6. Node.js中的Session,不要觉得简单哦。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...

  7. 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...

  8. [转]在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    本文转自:https://www.cnblogs.com/kongxianghai/p/5582661.html Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用Ja ...

  9. 浏览器中的 JS 和 Node.js 中的 JS

    一个是前端技术,一个是后端技术 浏览器中的 JavaScript ECMAScript  语言基础,如语法.数据类型结构.一些内置对象 BOM(Browser Object Model)  一些操作页 ...

随机推荐

  1. 十天快速入门Python

    课程导学 001 课程定位和目标 002 课程导学 第一部分 Python快速入门 第1天 Python基本语法元素 003 Python基本语法元素 004 程序设计基本方法 005 Python开 ...

  2. Python(Head First)学习笔记:四

    4 持久存储:文件存储.读写 数据保存到文件:在学习的过程中出现了一个问题,老是报一个错:SyntaxError: invalid syntax: 这个是语法错误,后来搜了下才知道是python2.7 ...

  3. apache ignite系列(三):数据处理(数据加载,数据并置,数据查询)

    ​ 使用ignite的一个常见思路就是将现有的关系型数据库中的数据导入到ignite中,然后直接使用ignite中的数据,相当于将ignite作为一个缓存服务,当然ignite的功能远不止于此,下面以 ...

  4. Hbase 统计表行数的3种方式总结

    有些时候需要我们去统计某一个Hbase表的行数,由于hbase本身不支持SQL语言,只能通过其他方式实现.可以通过一下几种方式实现hbase表的行数统计工作: 1.count命令 最直接的方式是在hb ...

  5. 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?

    我最近几年一直在做技术面试官,除了面试有一定工作经验的社会人员外,有时还会面试在校实习生和刚毕业的大学生.同时,我也在学校里做过兼职讲师,上些政府补贴课程(这些课程有补贴,学生不用出钱),所以我会在不 ...

  6. Linux 中 Xampp 的 https 安全证书配置

    博客地址:http://www.moonxy.com 一.前言 HTTP 协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的 HTTP 的 ...

  7. Centos利用脚本自动安装jdk

        在工作中还有自己的学习中,无论是使用tar包安装jdk,还是使用rpm安装,如果单台机器还能够接受,但是如果多台机器,就很困扰.所以,在自己配置环境的时候,根据网上各位前辈,沉淀了这样子一个脚 ...

  8. odoo Botton标签属性详解

    按钮属性 1)icon 按钮图标名,可用的按钮图标在 addons/web/static/src/img/下. 2)string 按钮的显示文字 3)type 动作执行类型.可能值是:workflow ...

  9. postgresql从库搭建

    1 复制类型 PostgreSQL支持物理复制(流复制)及逻辑复制2种.通过流复制技术,可以从实例级复制出一个与主库一模一样的实例级的从库.流复制同步方式有同步.异步两种. 另一种复制方式为逻辑复制, ...

  10. 2018年蓝桥杯java b组第四题

    标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机.各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许 ...