背景:

  初次接手公司的项目,虽然之前草草的看过一些sass的基础知识,但是因为久未征战,知识也早已随风飘散,现在小复习一下记下一些常识中的重点。。sass是使用ruby写的,所以使用前请先确保自己的机子中有了ruby的开发环境,在cmd下使用 ruby -v 命令可以查看当前的ruby版本,安装Ruby后我们要安装sass,按住键盘win+R,输入ruby打开命令行,输入gem install sass安装sass即可,如图所示:

需要注意的是:只要我们的项目中用到了sass都应该将环境配置全了,以防日后的其他依赖出现问题。

简介及概述:

  sass是css的 预处理工具,当我们的css代码量很大的时候可以简化我们的开发方便后续的维护。什么是预处理工具,简单的理解就是在产生真正css代码 之前 要做的工作,他融入了一些高级语言的特性,提高了我们css的书写效率,且sass也支持css3。

  还记得c语言中的预处理嘛?c语言中预处理的类型包括很多,其中最鲜为人知的是“宏定义”,宏定义的作用就是定义一个预设好的常量,然后将代码中出现这个常量的部分,全部使用这个常量预设好的值替换,例如 #define A 5 ,他的意思就是将下文代码中出现的所有A直接替换为5,而这些工作都是在代码编译以前就要进行的,所以宏定义为预处理的一种。

回到我们的上文,我们知道css的代码都要写在文件后缀为css的文件中才能进行编译解析,既然sass是预编译工具,可想而知sass的使用一定就会在产生css之前了,嗯,确实是这样的,sass最常用的书写方式有两种,他们分别对应着不同的后缀名 sass、scss,前者沿袭了ruby、python之类语言的语法,使用空格作为语言语法的一部分,而后者更加贴近于广大的前端爱好者,使用我们css中最常见到的花括号作为语法支持,对于同一段代码区别如下

sass写法: 使用空格作为语法的一部分,本应该是一个空格的地方若出现两个空格则语法报错,且不需要分号结尾
div
width:100px
height:100px scss写法:一如我们写css一般
div{
width:100px;
height:100px;
}

需要注意的是两种语法不可在同一文件中混写,但是可以利用工具进行相互的转换。

常用技巧:

1.类名嵌套

css代码:
.div1 .div2{
background-color:red;
} sass代码:
.div1{
.div2{
background-color:red;
}
}
可以看到sass使类名的嵌套更加清晰,类名的权重也会一目了然

2.变量

使用$定义一个变量
$mainColor:red; css写法:
.div1 .div2{
background-color:red;
} sass写法:
.div1{
.div2{
background-color:$mainColor;
}
}
更加方便维护和修改

3.伪类/伪元素写法

这个写法我当时猛的一看,确实不知道,还纳闷为什么这样用,后来一查资料,原来只是伪元素的写法而已   

css写法:
.clearfix::before{
content:"";
...
} sass写法:
.clearfix{
&:before{ //&称为父元素选择器,如果不加则代表选中.clearfix类下所有的元素
content:"";
...
}
}

这里有个小的注意点就是伪类和伪元素的区别:伪元素是css3中才出现的概念,用两个::来表示,伪类意为向某些选择器添加特殊的效果,而伪元素意为将某些特殊的效果添加到某些选择器上,常见的伪类如link、visited、hover、active这里值得一提的是大家一定要注意我的书写顺序,当这四个伪类要同时出现并使用的时候,他的书写顺序必须与我这个保持一致,否则无效,怎么记呢?lv包听过吗?他好不好?嗯!lvha。。开头字母记住整个单词也就差不多了。常用的伪元素就不用说了如after、before、first-letter、first-line等,所以大家一定要知道两点,第一何时写几个分号,第二当同时使用多个伪类时的顺序问题。

4.代码重用之继承

  看到这里,大家一定要想到上面写到的第2点,变量的定义是为了某个值的复用,想要复用一大段的代码该怎么做呢?可以使用现在要介绍的继承咯。sass中的继承有两对关键字 @mixin/@include和@extend,两者的工作原理也大不相同,@mixin为定义一个代码快,@include是将定义好的代码快引入,而@extend则是将现定义好的的类样式引入,熟悉c语言的同学都知道,include是c语言中宏定义的一种,在这里可以理解为同义,相当于代码拷贝, 所以当我们的sass解析到这个关键字会直接将@mixin中的代码进行拷贝,而@extend若出现在某个类中则是将当前类名并列到了要继承的类名中去也就是事例中的b的名字会出现在a中,最终的效果是.a,.b即类a类b都会有这个属性。继承是面向对象中的概念,sass中使用@extned关键字,意为拿来主义,简单的理解为你父亲的有的你就可以不要自己再有了,直接拿过来用就好,在我们sass中常用于重复代码引用,前天产品给我提了个需求,他说点击搜索框跳转到新的搜索页面进行搜索,新的页面的搜索框和主页的搜索框大部分相同只有字体的颜色不一致, 此刻难道我要将两部分css都重写一遍?聪明的童鞋想到了,把第一部分写好的继承过来,重写不同的即可。

css代码:
.a{
background-color:red
....
}
.b{
//假设b也需要背景为红色等
@extend .a;
font-size:24px;
}

在php中也有include等关键字,前端同学可以查阅相关资料补充自己的知识,如include和require在php中的不同

5.注释

  sass中的注释有两种,一种是我们在css中使用的/**/,一种是//注释,前者在编码阶段和编译后的阶段都会被保留,而后者只存在于编码阶段,也就是给程序看的咯~

6.文件定义

  sass中的文件定义也很简单,我们只需要知道一点就可以,以_开头的文件名不会被sass编译器编译成css文件,所以他有个见名知意的名字叫 局部文件 而以_下开头的文件中通常会被用作定义一些全部变量,如字体大小颜色等,至少我这个项目是这样做的,如_var.scss文件他的存在形式只会有一种,就是scss后缀结尾的文件,而aa.scss这样的文件,经过sass编译器就会被编译为css文件,我们知道浏览器的渲染引擎只认css文件。不过此刻问题又来了,那_var.scss该怎么使用呢?

7.sass中的import和css中import的区别

  _var.scss文件既然不会被编译为css文件,那就意味着他没有办法被浏览器解析,上文也提到过通常使用他来声明一些变量,那么这些变量将怎么被主文件引用呢?这里我们依旧使用的是css中就有的一个关键字@import指令,只是sass中的对这个指令进行的了一定的增强,这里需要大家明确一点,在sass中 *_var和var代表同一个文件* ,所以当引入_var这个文件的时候,只需要写var即可,sass中使用@import引入sass文件的时候只需要写上文件名而不需要后缀,这点就和node中使用require引入一个模块是类似的,例如@import "var",这里大家可能会有疑问怎么使用这个指令来引入曾经的css文件,其实我们上边已经说过@import是sass对css中同名指令的增强,所以当sass判断到@import指令后面出现后缀名、url函数、http等关键字时就会认为你使用的是css中原生的@import指令。

关于css中@import的最佳实践,在性能优化方面并不提倡大家在css中经常使用@import指令,我们知道当浏览器引擎拿到一个网页文件的时候是先生成dom树,其次构建渲染树进行渲染,而@import是内嵌在css中的,也就是他会比link标签中的css代码晚一步执行,所以使用这个指令会造成页面的卡顿留白。

8.属性的连写拆分

  在css中有个称之为属性连写的概念,如padding:5px,其实我们也可以分写成padding-left、padding-right等,可见这样分写冗余了一个padding关键字,那在sass中要怎样等价替换呢?

css代码
.a{
padding-left:2px;
padding-right:2px;
} sass代码
.a{
padding{
left:2px;
right:2px;
}
}

9.其他

  以上知识sass中最为简单常用的一部分,也是作为一个刚入门的新手必然要掌握的一部分内容,关于sass的其他技巧如可以进行带单位的计算、@if、@at-root等指令如若需要大家可以查阅相关的资料加以补充。

10.后处理

  预处理是在生成css代码之前,而后处理包括的内容则是代码的压缩混淆等,这就可以构成一个完整的css工作流了。

三言两语之简单上手sass的更多相关文章

  1. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  2. Tinker 热修复框架 简单上手教程

    当你们看到Tinker的时候是不是有点愣逼这个是什么东西? 简单来说就是不需要重新下载app和重新安装app 来进行更新app的技术框架. 看看这个吧,我也是才学习 ,先做个学习记录 参考:Tinke ...

  3. window64 PHP ffmpeg详解简单上手 音频amr转mp3

    从网上找了一大堆关于window 64 ffmpeg的信息,都是又长又不关键,让人难消化. 我只要简单的amr转MP3格式而已. 终于搞明白.自己总结了下! 希望能帮助到喜欢言简意赅,一眼上手的同学. ...

  4. Airtest简单上手讲解

    Airtest是网易开发的手机UI界面自动化测试工具,它原本的目的是通过所见即所得,截图点击等等功能,简化手机App图形界面测试代码编写工作. 安装和使用 由于本文的目的是介绍如何使用Airtest来 ...

  5. 简单上手nodejs调用c++(c++和js的混合编程)

    因为项目的原因,最近经常使用node.js搭RESTful接口. 性能还是很不错啦,感觉比Spring Boot之类的要快.而且在不错的性能之外,只要程序结构组织好,别让太多的回调把程序结构搞乱,整体 ...

  6. 腾讯云主机及CentOS7.2简单上手体验

    前段时间拜读了崔庆才老师的<Python③网络爬虫开发实战>受益良多,对于初学爬虫的新手来说,本书真可谓是通俗易懂,非常适合新手入门.但是受制于没有服务器环境,书中很多例子难以模拟!最近正 ...

  7. 【dataX】阿里开源ETL工具——dataX简单上手

    一.概述 1.是什么? DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase. ...

  8. 进击的RecyclerView入门一(简单上手)

    虽然RecyclerView面世有一段时间了,但由于它的学习成本相对较高,很多码友只是粗略的认识了一下而没有细致的品味RecyclerView的真谛. 那么从现在开始我将带你装逼带你飞,一起领略Goo ...

  9. moment.js插件的简单上手使用

    开发过程中看长篇幅的技术文档是件多么影响多发效率的事情丫,哼哼,人家明明只是想用个简单的功能而已丫,下面文档很好的解决了这个问题,yeah~~~ 一.monent.js时间插件 1.Moment.js ...

随机推荐

  1. Alpha阶段第二次Scrum Meeting

    情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起始时间 2016/10/21 00:00 敏捷开发终止时间 2016/10/22 00:00 会议基本内容摘要 汇报了已经完成的任务 ...

  2. BZOJ3489: A simple rmq problem

    设$i$的前驱为$p_i$,后继为$q_i$,把询问看成点$(L,R)$,有贡献的$i$满足$L\in(p_i,i]$且$R\in[i,q_i)$,询问的就是覆盖这个点的矩形的最大值.那么可以用可持久 ...

  3. web前端基础知识-(二)CSS基本操作

    1. 概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. 存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点. 语法:style ...

  4. Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl

    [Bug笔记]Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl 标签: bugjartomcat服务器互联 ...

  5. 浅谈MVC中路由

    引言 学习ASP.NET MVC 路由这一关是肯定必不可少的.这一节,我们就来简单介绍下MVC中的路由机制.简单的路由机制相信大家都已了解,这一节主要介绍路由中很少使用的部分. 使用静态URL片段 在 ...

  6. [UML]UML系列——用例图Use Case

    用例图的概念 用例图是描述用例.参与者以及它们之间关系的图. 用例图的作用 用例图是从用户的角度来描述对信息系统的需求,分析产品的功能和行为. 用例图定义和描述了系统的外部可见行为,是分析.设计直至组 ...

  7. Javascript的setTimeOut()和setInterval()的定时器用法

    Javascript用来处理延时和定时任务的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请 ...

  8. 大熊君大话NodeJS之------(Url,QueryString,Path)模块

    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析.废话不多说了,请看下面文档: (1),"Url模块&qu ...

  9. JS中数组Array的用法{转载}

    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^var arr = new Array();arr[0] = "aaa";arr[1] ...

  10. Mac Pro 软件安装/个性化配置 汇总

    苹果产品维修 一.Spotlight 搜索程序和文档 Spotlight是最最常用的东西, 类似Windows开始菜单中的搜索.  可以用来搜索文档,也可以搜索本机的程序, 这样可以快速启动. 点击右 ...