1. CSS预处理器

  • 定义了一种新的专门的编程语言,编译后成正常的CSS文件。为CSS增加一些编程的特性,无需考虑浏览器的兼容问题,让CSS更加简洁,适应性更强,可读性更佳,更易于代码的维护等诸多好处。
  • CSS预处理器语言:scss(sass)、LESS等;

2.Sass和SCSS的区别

  • 文件扩展名不同:“.sass”和“.scss”;
  • Sass是以严格缩进式语法规则来书写的,不带大括号和分号;而SCSS的语法和CSS书写语法类似。

3.Sass安装(Windows版)

 
Paste_Image.png
  • 安装sass:
  • 方法一(通过命令安装sass):打开命令终端,输入:gem install sass
  • 方法二(本地安装sass):从http://rubygems.org/gems/sass 下载sass安装包,然后在终端输入: “gem install <把下载的安装包拖到这里>” 然后直接额回车即可安装成功。

4.scss语法格式

css代码:

body {
font: 100% Helvetica, sans-serif;
color: #333;
}

使用scss代码:

$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}

tip:如果使用sass旧语法(sass语法),文件后缀名应为“.sass”;如果使用sass新语法(scss语法),文件后缀名应为".scss“语法,否则编译时编译不出来。

5. sass编译

5.1 sass编译的方法:

  • 命令编译
  • GUI工具编译
  • 自动化编译

5.1.1 sass命令编译(在命令终端输入sass指令来编译sass,最直接,最简单)

  • 单文件编译:
sass <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
  • 多文件编译:
sass sass/:css/

上面的命令表示将项目中“sass”文件夹中所有“.scss”(“.sass”)文件编译成“.css”文件,并且将这些 CSS 文件都放在项目中“css”文件夹中。

  • 缺点及解决方法:
    缺点:每次保存scss文件后都要重新编译太麻烦;
    解决方法:开启“watch”功能:
sass --watch <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
  • tip:文件路径不要带中文,如果有中文,watch功能无法正常使用。

6.sass嵌套输出方式nested

 
Paste_Image.png

只要在编译的时候带上参数“ --style nested”:

sass --watch test.scss:test.css --style nested

7.sass展开输出方式expanded

 
Paste_Image.png

在编译的时候带上参数“ --style expanded”:

sass --watch test.scss:test.css --style expanded

8.sass展开输出方式compact

 
Paste_Image.png

在编译的时候带上参数“ --style compact”:

sass --watch test.scss:test.css --style compact

9.sass展开输出方式compressed

 
Paste_Image.png

在编译的时候带上参数“ --style compressed”:

sass --watch test.scss:test.css --style compressed

10.sass变量声明

$+变量名+:+变量值;

$width:200px;

11.普通变量和默认变量

  • 普通变量声明后可以在全局范围内使用;
  • 默认变量仅需在值后面加上!default 即可;
  • 默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式是在默认变量之前重新声明下变量即可。默认变量的价值在进行组件化开发的时候会非常有用。
$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
body {
line-height: $baseLineHeight;
}

编译后的CSS代码:

body {
line-height:2;
}

12.局部变量和全局变量

  • 局部变量:在元素里面声明的变量;
  • 全局变量:在元素外面定义的变量;
  • 全局变量的影子:和全局变量名字相同的局部变量叫做全局变量的影子。
$color:green;//全局变量
$width:200px;//全局变量
$height:200px;//全局变量
body {
background-color:$color;//调用全局变量
}
div {
$color:yellow;//定义局部变量,全局变量$color的影子
.div {
background-color:$color;//调用局部变量
width:$width;//调用全局变量
height:$height;//调用全局变量
}
}

13.sass嵌套

13.1 选择器嵌套

<header>
<nav>
<a href="#">home</a>
<a href="#">page</a>
</nav>
</header>

css:

    nav a {
color:red;
}
header nav a {
color:green;
}

scss:

nav {
a {
color: red; header & {
color:green;
}
}
}

13.2 属性嵌套(有相同的属性前缀)

css:

.box {
font-size: 12px;
font-weight: bold;
}

scss:

.box {
font: {
size: 12px;
weight: bold;
}
}

13.3 伪类嵌套

scss:

.clearfix{
&:before,
&:after {
content:"";
display: table;
}
&:after {
clear:both;
overflow: hidden;
}
}

css:

clearfix:before, .clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
overflow: hidden;
}

14. sass混合宏

14.1 声明混合宏

@mixin border-radius {
-webkit-border-radius: 5px;
border-radius: 5px;
}

@mixin :声明混合宏的关键词;
border-radius:混合宏的名称;
大括号内:复用的样式代码;

14.2 调用混合宏

@mixin border-radius{
-webkit-border-radius: 3px;
border-radius: 3px;
}//声明混合宏border-radius
button {
@include border-radius;
}//调用混合宏border-radius

编译为CSS:

button {
-webkit-border-radius: 3px;
border-radius: 3px;
}

14.3 混合宏的参数

  • 不带任何值的参数
@mixin border-radius($radius){
-webkit-border-radius: $radius;
border-radius: $radius;
}//声明一个带有参数$radius的混合宏
.box {
@include border-radius(3px);//调用混合宏并给混合宏传参数“3px”
}
  • 传一个带值参数(传入一个默认值)
@mixin border-radius($radius:3px){
-webkit-border-radius: $radius;
border-radius: $radius;
}//声明一个传入了默认参数值的混合宏
.btn {
@include border-radius;//使用默认参数值的混合宏
}
.box {
@include border-radius(50%);//可以自己传入参数值
}

编译出来的CSS:

.btn {
-webkit-border-radius: 3px;
border-radius: 3px;
}
.box {
-webkit-border-radius: 50%;
border-radius: 50%;
}
  • 传多个参数值
@mixin size($width,$height){
width: $width;
height: $height;
}
.box-center {
@include size(500px,300px);
}

编译出来的css:

.box-center {
width: 500px;
height: 300px;
}

15.sass 继承

scss:

.btn {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
@extend .btn;
}

编译出来后:

.btn, .btn-primary {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
}

在sass中的继承,可以继承类样式块中所有样式代码,而且编译出来的css会将选择器合并在一起,形成组合选择器。

16.sass占位符%

用占位符声明的代码,如果不被@extend调用就不会被编译。

%mt5 {
margin-top: 5px;
}
%pt5{
padding-top: 5px;
}
.btn {
color:red;
}

编译后:

.btn {
color:red;
}//%占位符声明的代码没有被编译产生css代码

使用@extend调用:

%mt5 {
margin-top: 5px;
}
%pt5{
padding-top: 5px;
}
.btn {
@extend %mt5;//使用@extend调用占位符代码
@extend %pt5;
}
.block {
@extend %mt5;
span {
@extend %pt5;
}
}

编译后的css代码:

.btn, .block {
margin-top: 5px;
}
.btn, .block span {
padding-top: 5px;
}

通过@extend调用的占位符,编译出来的代码会将相同的代码合并在一起,代码变得十分简洁。

17.sass插值

$properties: (margin, padding);
@mixin set-value($side, $value) {
@each $prop in $properties {//对每个在$properties中的$prop,即$properties中的margin、padding
#{$prop}-#{$side}: $value;//$prop连接参数$side,值为参数$value
}
}
.login-box {
@include set-value(top, 14px);//调用混合宏
}

编译出来的css:

.login-box {
margin-top: 14px;
padding-top: 14px;
}

不可以:

$margin-big: 40px;
$margin-medium: 20px;
$margin-small: 12px;
@mixin set-value($size) {
margin-top: $margin-#{$size};
}
.login-box {
@include set-value(big);
}

也不可以:

@mixin updated-status {
margin-top: 20px;
background: #F00;
}
$flag: "status";
.navigation {
@include updated-#{$flag};
}

可以在使用@extend时使用插值:

%updated-status {
margin-top: 20px;
background: #F00;
}
.selected-status {
font-weight: bold;
}
$flag: "status";
.navigation {
@extend %updated-#{$flag};
@extend .selected-#{$flag};
}

18. sass 注释

  • /*注释内容*/ :会在编译出来的css文件中显示
  • //注释内容 :不会在编译出来的css文件中显示
//定义一个占位符
%mt5 {
margin-top: 5px;
}
/*调用一个占位符*/
.box {
@extend %mt5;
}

编译出来的css:

.box {
margin-top: 5px;
}
/*调用一个占位符*/

19. sass运算

19.1 sass 加法/减法

变量或属性中都可以做加法/减法运算

.box {
width: 20px + 8in;
height:20px - 5px;
}

编译出来的css:

.box {
width: 788px;
height:25px;
}

不用类型的单位做加法/减法会报错:

.box {
width: 20px + 1em;//不同类型单位不能做加法
}

19.2 sass 乘法

这样子会有问题:

.box {
width:10px * 2px;
}

应该这样子:

.box {
width: 10px * 2;
}

编译出来的css:

.box {
width: 20px;
}
  • 同加法减法一样,不同类型单位做乘法也会报错。

19.3 sass除法

  • 如果除式中没有变量或者不是在一个数学表达式中(有加法减法等),就要将除式运算用小括号括起来,否则“/”不会被当做除号运算。
p {
font: 10px/8px; // 纯 CSS,不是除法运算
$width: 1000px;
width: $width/2; // 使用了变量,是除法运算
width: round(1.5)/2; // 使用了函数,是除法运算
height: (500px/2); // 使用了圆括号,是除法运算
margin-left: 5px + 8px/2px; // 使用了加(+)号,是除法运算
}

编译出来的css:

p {
font: 10px/8px;//这种是无意义的css
width: 500px;
height: 250px;
margin-left: 9px;
}
  • 除法中相同单位相除不会报错,会产生一个无单位的值:
.box {
width: (1000px / 100px);
}

编译出来的css:

.box {
width: 10;
}

19.4 sass 变量计算

$content-width: 720px;
$sidebar-width: 220px;
$gutter: 20px;
.container {
width: $content-width + $sidebar-width + $gutter;
}

编译出来的css:

.container {
width: 960px;
}

19.5 sass数字运算

.box {
width: ((220px + 720px) - 11 * 20 ) / 12 ;
}

编译出来的css:

.box {
width: 60px;
}

19.6 sass颜色运算

所有算术运算都支持颜色值,并且是分段计算的。

p {
color: #010203 + #040506;
}

计算公式为 01 + 04 = 05、02 + 05 = 07 和 03 + 06 = 09, 并且被合成为:

p {
color: #050709;
}
  • 数字和颜色一起运算:
p {
color: #010203 * 2;
}

计算公式为 01 * 2 = 02、02 * 2 = 04 和 03 * 2 = 06, 并且被合成为:

p {
color: #020406;
}

19.7 sass 字符运算

  • 用“+”对字符串进行连接:
$content: "Hello" + "" + "Sass!";
.box:before {
content: " #{$content} ";
}

编译出来的css:

.box:before {
content: " Hello Sass! ";
}
  • 可以使用“+”直接连接字符:
div {
cursor: e + -resize;
}

编译出来的css:

div {
cursor: e-resize;
}
  • 有引号的字符串和没有引号的字符串相加,看哪个在“+”号的左边,如果有引号的在左边,结果为有引号的;如果没有引号的在左边,结果为没有引号的:
p:before {
content: "Foo " + Bar;
font-family: sans- + "serif";
}

编译出来的css:

p:before {
content: "Foo Bar";
font-family: sans-serif; }

原文:http://www.jianshu.com/p/fa379a309c8a

再说scss的更多相关文章

  1. Vue ES6 Jade Scss Webpack Gulp

    一直以来非常庆幸曾经有翻过<代码大全2>:这使我崎岖编程之路少了很多不必要的坎坷.它在软件工艺的话题中有写到一篇:"首先是为人写程序,其次才是机器(Write Programs ...

  2. Ruby安装Scss

    Ruby安装Scss 引言 已经许久不写HTML了,今天有点以前的东西要改.但是刚装的Windows10,已经没有以前的Web开发环境了.只好重新安装. 结果Webstorm装好后配置Scss出现错误 ...

  3. CSS预处理框架:less,scss

    CSS预处理器:less和sass:CSS 预处理器是一种语言用来为 CSS 增加一些编程的的特性,无需考虑浏览器的兼容性问题,例如你可以在 CSS 中使用 变量.简单的程序逻辑.函数等等在编程语言中 ...

  4. sass/scss 和 less的区别

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

  5. 关于webpack编译scss文件

    css加载器文件通常和extract-text-webpack-plugin一块使用,我们可以在源文件src目录下写scss文件,然后通过webpack编译成css文件到输出目录public,这个目录 ...

  6. Webstorm配置CSS/SCSS自动补全兼容前缀autoprefixer插件

    关于Autoprefixer Autoprefixer是一个后处理程序,不象Sass以及Stylus之类的预处理器.它适用于普通的CSS,可以实现css3代码自动补全.也可以轻松跟Sass,LESS及 ...

  7. webstorm 配置scss的问题

    第一种方法(ruby方法) 先安装ruby,在windows/system32目录下 1.先查询源是什么 gem sources 2.移除原有的源头 gem sources -r http://xxx ...

  8. scss编译

    SASS?SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. sass有两种后缀名文件: sass(不使用大括号和分号)---不建议使用 ...

  9. SCSS

    CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作. 通俗的说,“CSS ...

  10. Scss开发临时学习过程

    SCSS语法: 假设变量申明带有!default,那么如果在此申明之前没有这个变量的申明,则用这个值,反之如果之前有申明,则用申明的值. ‘...’传递多个参数: @mixin box-shadow( ...

随机推荐

  1. Java包装类之实体类不要使用基本类型

    [color=rgba(0, 0, 0, 0.75)]今天来记录一下,在项目中因为基本类型,所产生的bug.**U•ェ•*U** 包装类:8种基本类型的包装类 应用场景:数据库建立实体映射多用包装类 ...

  2. eclipse中maven项目failonmissingwebxml错误的修复(转)

    在使用eclipse创建maven项目的时候,有时候会出现这个问题: web.xml is missing and 'failOnMissingWebXml' is set to true我遇到这个问 ...

  3. navicat 导出查询结果

    请依照下列步骤:(Windows 版本) 例子:导出查询结果到一个文本文件 在执行查询之后,保存查询及在工具栏点击导出向导/导出. 按照导出向导的步骤指导你完成 设置导出文件格式(步骤 1) 设置目标 ...

  4. python多重逻辑排序

    python有自带的排序sorted函数,而且用reverse =True or False,来控制降序还是升序.但是如果有多个条件需要排序应该如何办呢? L = [(12, 12), (34, 13 ...

  5. hexo NexT主题首页title链接的优化

    在默认设置下,文章链接都会改变,不利于搜索引擎收录,也不利于分享 更改index.swig文件 文件路径是your-hexo-sitethemesnextlayout,将下面代码 1 {% block ...

  6. 解密JDK8 枚举

    写一个枚举类 1 2 3 4 5 6 public enum Season { SPRING, SUMMER, AUTUMN, WINTER } 然后我们使用javac编译上面的类,得到class文件 ...

  7. 每日背单词 - Jun.

    6月1日裸辞,计划休息到端午节后,这段时间玩的确实很开心,每天和朋友一起吹灯拔蜡:好不自在,可惜假期马上结束了,从今天开始恢复学习状态. 2018年6月1日 - 2018年6月14日 辞职休假 201 ...

  8. Java8-19-lambda 重构代码

    通过本书的前七章,我们了解了Lambda和Stream API的强大威力. 你可能主要在新项目的代码中使用这些特性.如果你创建的是全新的Java项目,这是极好的时机,你可以轻装上阵,迅速地将新特性应用 ...

  9. Python爬虫-百度模拟登录(一)

    千呼万唤屎出来呀,百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成.这个成功以后,我打算试试百度网盘的其他接口实现.看看能不能把服务器文件上传到网盘,好歹也有 ...

  10. C++扬帆远航——5(换分币)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:huanfenbi.cpp * 作者:常轩 * 完成日期:201 ...