十分钟轻易学会Sass

文章目录

官网

引言

  • CSS3之前的CSS都大都是枚举属性样式,而编程语言强大的变量、函数、循环、分支等功能基本都不能在CSS中使用,Sass就是一种增强CSS编程的扩展语言

什么是Sass?

  • 世界上最成熟、最稳定、最强大的专业级CSS扩展语言
  • Sass是一门高于CSS的语言,它能用来 清晰的、结构化地描述文件样式,有着比普通CSS更加强大的功能.
  • 能够提供更简洁、更优雅的语法、同时提供多种功能来创建可维护和管理样式表
  • 它是css预处理器
  • 其它css预处理器: Sass(scss) 、 LESS 、 Stylus 、 DT CSS 、 Switch CSS 、 Turbine 、 Switch CSS 、 CSS Cacheer

Sass的原理

  • Sass本质就是在CSS的语法的基础上增加了自定义的变量、循环、分支、函数、mixin、继承、运算等功能,让CSS编程变得异常强大。
  • 当然浏览器是不认识Sass语法。开发人员写完了Sass的语法文件后需要通过工具转成原始的CSS代码。

安装

  • Sass基于Ruby语言开发而成,因此安装sass前需要安装Rub https://rubyinstaller.org/downloads/
  • 安装完成后需测试安装有没有成功,运行CMD输入以下命令:
    ruby -v (查看版本号)

    gem install sass (安装Sass)
    gem install compass (安装compass)

编译Sass

  • 单文件转换命令: sass input.scss output.css
  • 单文件监听命令: sass --watch input.scss:output.css
  • 如果你有很多的sass文件的目录,你也可以告诉sass监听整个目录:sass --watch app/sass:public/stylesheets

VS Code中使用Sass

1. 现在 VS Code 商店中,搜索 easy sass,然后安装
2. 修改VS Code 的配置, 点击管理,找到文本编辑器,点击 在settings.json中编辑

"easysass.compileAfterSave": true,
  "easysass.formats": [ //nested:嵌套缩进的 css 代码。//expanded:没有缩进的、
  //扩展的css代码。//compact:简洁格式的 css 代码。//compressed:压缩后的 css 代码
        {
            "format": "expanded",
            "extension": ".css"
        },
        {
            "format": "compressed",
            "extension": ".min.css"
        }
    ],
    "easysass.targetDir": "./css" 
    //保存编译时的路径,会在你编译的这个文件当前下的 css 文件中转换 css 文件,需要手动添加这个css 文件夹

使用

1.注释

//       单行注释(静默注释)不会被编译到 css 文件里面
/* */    多行注释 会在 xxx.css 中编译,  min.css 则不会
/*! */   强制注释,在任何版本下都会被保留

2.使用变量

1. 定义变量用 “$” 符替代


$color:yellow;
$a123:green;
$top:top;

2. 特殊变量,比如和css属性混在一起,为了能解析变量,把这个变量用 #{} 包起来

<style>
	div{
		width:100px;
		height:200px;
		border-#{$top}:12px solid green;  // $top 在上面定义变量时定义的
	}
</style>

3. 全局变量

<style>
	p{
		$abc:80px;
	}
	
	div{
		font-size:$abc; // 无法使用
	}
	
	在花括符内定义的变量在其它或括符内访问不到,如果想成为全局变量,
	在定义这个变量的后面加上 !global
	
	p{
		$abc:80px !global;
	}
</style>

3.默认变量值

  • 一般情况下,你反复声明一个变量,只有最后一处声明有效且它会覆盖前边的值
$link-color:blue;
$link-color:red;

<style>
	a {
		color: $link-color; // red
	}
</style>
  • 使用 !default 默认值
$bb:red !default;// 红色为默认值

<style>
	div {
		width:100px;
		height:100px;
		font-color:$bb; // red
		$bb:blue; // 此时,就把默认颜色改为 蓝色了
		font-color:$bb; // blue
	}
</style>

4.CSS

4-1.嵌套CSS 规则

  • css中重复写选择器是非常恼人的。如果要写一大串指向页面中同一块的样式时,往往需要 一遍又一遍地写同 一个ID:
#content article h1 { color: #333 }
#content article p { margin-bottom: 1.4em }
#content aside { background-color: #EEE }
  • 现在选择器嵌套
#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}
  • 特殊hover
article a {
  color: blue;
  &:hover { color: red }
}

4-2.群组选择器的嵌套

<style>
	.container {
  		h1, h2, h3 {margin-bottom: .8em}
	}
	
	.container h1, .container h2, .container h3 { 
		margin-bottom: .8em 
	}
	
	nav, aside {
  		a {
  			color: blue
  		}
	}

	nav a, aside a {
		color: blue
	}
</style>

4-3.子组合选择器和同层组合选择器:> +和~

article section { margin: 5px }  // 会选择article下的所有命中section选择器的元素

article > section { border: 1px solid #ccc } // 只会选择article下紧跟着的子元素中命中section选择器的元素。

header + p { font-size: 1.1em } // header元素后紧跟的p元素

article ~ article { border-top: 1px dashed #ccc } // 选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素

4-4.嵌套属性

nav {
  border: {
  	style: solid;
  	width: 1px;
  	color: #ccc;
  }
}

nav {
  border: 1px solid #ccc {
  	left: 0px;
  	right: 0px;
  }
}

nav {
  border-style: solid;
  border-width: 1px;
  border-color: #ccc;
}

5.混合 @mixin @include

  • @mixin 自定义一个名字 {代码块}
  • @include 接收@mixin定义的名字 (引用代码)
@mixin border{
	border:1px solid red;
}

#div{
	@include border;  // 在 #div 就可以使用了 @mixin 定义的代码
}

6.继承 @extend

.btn{
	width:100px;
}

.dd{
	@extend .btn;  // 继承了.tbn 里面的属性  width:100px;
	height:50px;
}

7.引入 @import

假如现在这是 a.scss 文件,我们在里面编辑以下代码:
// a.scss
@charset="utf-8";
*{
	padding:0px;
	margin:0px;
}



假如现在在b.scss文件中,我们可以引入 a.scss文件
// b.scss
@import "a.scss"

8.if判断

  • 在 if 前加上@符,省略或括符,直接判断
$a = red;

.box{
	@if $a == red{

	}@else if $a ==blue{
		
	}@else{

	}
}

9.循环

1. @for循环 (through包含结束位置 , to不包含结束位置)

$count: 12;
//包含结束位置
@for $i from 1 through $count{
    li:nth-child(#{$i}){
        width: 100px / 12 * $i;
    }
    // $i = 1,2,3,4,5,6,7,8,9,10,11,12
}


//不包含结束位置
@for $i from 1 to $count{
    li:nth-child(#{$i}){
        width: 100px / 12 * $i;
    }
    // $i = 1,2,3,4,5,6,7,8,9,10,11
}

2. @each

$icons: success warning error primary info;
@each $icon in $icons{
    #box li:nth-child(#{$icon}){
        background: url(images/#{$icon}.png) no-repeat;
    }
}

3. @while

$i : 6;
@while $i > 0 {
    li:nth-child(#{$i}){
        font-size: #{$i*16}px;
    }
     $i : $i - 1;
}

10.函数 @function

$colors:(red:red,light:white,dark:black);
@function color($key){
	@if not map-has-key($colors,$key){

		@warn "警告,gulp不会终端"
		@error "会终止监听"
	}
	@return map-get($colors,$key);
}

//函数调用
body{
	background-color:color(red);
}


上一篇:sass和scss区别?


下一篇:vue cli4.0 快速搭建项目详解