SCSS的具体详解和与less的区别

一、SCSS的四种输出格式与SCSS与Sass的区别

可以参考这位老哥的
简单来说
SCSS更简单一点,没有什么奇怪的语法与奇怪的缩进,与less相差不大,利于使用与学习(推荐)
Sass有更加严格的语法(反正我看起来怪怪的)
不过SCSS与Sass是同宗同族的,不过Sass是老大哥

二、注释

与less相同

关于/**/
多行注释,会在原生css文件里面保留注释,但在压缩时注释就会消失

/*下面是SCSS文件*/

/*
.container div:nth-child(odd){
  background-color: #eee;
}
.container div:nth-child(even){
  background-color: #ccc;
}*/


/*下面是对应的SCSS文件生成的css文件*/

/*
.container div:nth-child(odd){
  background-color: #eee;
}
.container div:nth-child(even){
  background-color: #ccc;
}*/

关于//
单行注释,不会在原生css文件里面保留注释,也不会在压缩的文件里面显示

/*下面是SCSS文件*/

//.container div:nth-child(odd){
//  background-color: #eee;
//}
//.container div:nth-child(even){
//  background-color: #ccc;
//}


/*下面是对应的SCSS文件生成的css文件*/

什么也没有

/*!*/
强制注释,会在原生css文件里面保留注释,也会在压缩的文件里面显示

/*下面是SCSS文件*/

/*!
.container div:nth-child(odd){
  background-color: #eee;
}
.container div:nth-child(even){
  background-color: #ccc;
}*/


/*下面是对应的SCSS文件生成的css文件*/

/*
.container div:nth-child(odd){
  background-color: #eee;
}
.container div:nth-child(even){
  background-color: #ccc;
}*/

三、变量

变量定义要使用$符号(less是@符号定义变量),也可给属性定义变量(不过less是使用@{name}的方式)

/*SCSS*/
$primary:#ccc;					/*定义变量*/
$b:border;
$bg:background;
$url:"image.jpg";
$primary-plus:1px solid $primary;	/*定义变量里面使用变量*/
.container div:nth-child(even){
  #{$bg}-color: $primary;	/*使用变量*/
}
.container div:nth-child(odd){
  background-color: #eee;
  #{$b}: $primary-plus;			/*使用变量*/
}
.box2{
  background-image: url($url);
}
/*CSS文件*/
.container div:nth-child(even) {
  background-color: #ccc;
}
.container div:nth-child(odd) {
  background-color: #eee;
  border: 1px solid #ccc;
}
.box2 {
  background-image: url("image.jpg");
}

四、嵌套

与less相同的地方

在这里插入图片描述

不过与less不同的是SCSS有属性的嵌套

在这里插入图片描述

五、伪类的使用

与less相同
在这里插入图片描述

六、混合(类似与函数,在语法上面与less不尽相同)

混合必须用@mixin来定义,@include来调用

固定值的混合

/*SCSS*/
@mixin a{							/*固定值的混合*/
  width: 100px;
  height: 100px;
}
ul{
  @include a;						/*混合的引用*/
  border: 1px black solid;
}
/*生成的css*/
ul {
  width: 100px;
  height: 100px;
  border: 1px black solid;
}

可变化值的混合

/*SCSS*/
@mixin a($with:100px,$color:red,$height){	/*带有变量有更好的机动性,且这些变量有一些有初始值*/
  width: $with;
  height: $height;
  background-color: darken($color,20%);			/*darken(v1,v2)颜色加深函数,v1代表需要加深的颜色,v2代表加深的百分比*/
}
ul{
  @include a($height:100px);					/*调用混合,当使用命名空间的时候混合里面的变量顺序就不重要了*/
  border: 1px black solid;
}
/*生成的css*/
ul {
  width: 100px;
  height: 100px;
  background-color: #990000;
  border: 1px black solid;
}

七、继承(作用与less相同,但语法与less不同)

它只能继承固定值的混合且会继承被继承者所有使用的选择器,可以增加代码的复用性,但灵活性不强

/*SCSS*/
.aa{
  width: 200px;
  height: 200px;
  border: 1px;
}
.aa .color{
  background-color: #0f0f0f;
}
.box:nth-of-type(1){
  @extend .aa;				/*继承*/
}
/*生成的css*/
.aa, .box:nth-of-type(1) {			/*继承了aa类的所有选择器*/
  width: 200px;
  height: 200px;
  border: 1px;
}

.aa .color, .box:nth-of-type(1) .color {
  background-color: #0f0f0f;
}

八、文件引入

/*ppp.scss文件*/
@import "ooo";				/*原文件名为_ooo.scss,这里允许这样的简写*/
/*_ooo.scss文件,注意文件必须要以_开头*/
*{
  padding: 0;
  margin: 0;
}

这里的引入的文件会被当成一个partials也就是说该文件不会被立即编译成css文件,只有在import的时候才会去编译_ooo.scss文件,但要注意的是文件必须要以_开头

九、Data Type

有number、string、list、map、color、boolean…
在这里插入图片描述

list类型的数据格式为:

$list:1px blue solid;
/*$name:value*/

map类型的数据格式为:

$map:(light:#ffffff,dark:#000000,border:1px blue solid);
/*$name:(key1:value1,key2:value2,key3:value3,...),这里的key不是css属性*/

color类型的数据格式为:

$color:#ffffff;
/*$name:value*/

boolean类型数据:

$bool:true;
/*$name:value*/

less里面没有type-of()方法

十、运算

与less里面有一定的区别

/*数字运算*/
width: (200px/2);						/*100px,这里要加括号,因为/是特殊字符*/				
width: (200px/2px);						/*100,这里的px会被抵消掉*/
width: 200px+200;						/*400px*/
width: (200px-150);						/*50px,这里要加括号,因为-是特殊字符*/
width: 20px*10px;						/*这里会发送错误,因为px*px了*/
width: 20px*10;							/*200px*/

/*string运算,结果分为带引号的字符串与不带引号的字符串*/
border: 3px bla+ck solid;				/*3px black solid*/
border: 3px "bla"+ck solid;				/*3px "black" solid*/
width: 150+'px';						/* '150px' */
width: 150+px;							/*150px*/
border: 3px bla-ck solid;				/*3px bla-ck solid*/
border: 3px bla\ck solid;				/*3px bla\ck solid*/

十一、函数

数字函数

/*number*/
abs(num)									/*绝对值*/
round(num)									/*四舍五入*/
ceil(num)									/*上取整*/
floor(num)									/*下取整*/
percentage(num)							/* 0<num<1,获得值的百分比*/
min(num)									/*最小值*/
max(num)									/*最大值*/

字符串函数

/*string*/
to-upper-case(str)							/*全部字母大写*/
to-lower-case(str)							/*全部字母小写*/
str-length(str)								/*字符串的长度*/
str-index(str,str1)							/*获取指定字符str1串在原字符串的位置*/
str-insert(str,str1,index)					/*插入指定字符串str1到原字符串的index位置(从1开始)*/

例子:
在这里插入图片描述

颜色函数

/*color*/
rgb(v1,v2,v3)								/*红绿蓝*/
rgba(v1,v2,v3,v4)							/*红绿蓝+透明度*/
hsl(v1,v2,v3)								/*色相,饱和度,明度*/
hsla(v1,v2,v3,v4)							/**色相,饱和度,明度+透明度*/
adjust-hue(v1,v2)							/*给v1颜色调整为v2度数的颜色*/
lighten(v1,v2)								/*给v1颜色增加v2的明度*/
darken(v1,v2)								/*给v1颜色减小v2的明度*/
saturate(v1,v2)								/*给v1颜色增加v2的饱和度*/
desaturate(v1,v2)							/*给v1颜色减小v2的饱和度*/
opacify(v1,v2)								/*给v1颜色增加v2的不透明度*/
transparentize(v1,v2)						/*给v1颜色增加v2的透明度*/

例子:
adjust-hue(v1,v2)
在这里插入图片描述
lighten(v1,v2)与darken(v1,v2)
在这里插入图片描述
saturate(v1,v2) 与desaturate(v1,v2)
在这里插入图片描述
opacify(v1,v2)与transparentize(v1,v2)
在这里插入图片描述

列表函数

/*list*/
length(list)										/*获得列表数据list的长度*/
nth(list,index)										/*获得列表数据list内的第index个数据(从一开始)*/
index(list,value)									/*获得在列表数据list内的值为value的数据的索引(从一开始)*/
append(list1,list2)									/*在列表数据list1的后面添加列表list2的数据*/
join(list1,list2,value)								/*把列表数据list1与list2连接起来,value是分隔符(value可以有也可以没有)*/

例子:
在这里插入图片描述

map函数

length(map)									/*返回map类型数据的个数*/
map-get(map,key1)							/*得到map类型数据内的key=key1的数据*/
map-keys(map)								/*得到map类型数据内的所有key值*/
map-values(map)								/*得到map类型数据内的所有value值*/
map-has-key(map,key1)						/*判断map类型数据内的是否存在对应的key1,返回true|false*/
map-merge(map1,map2)						/*把map1与map2合并*/
map-remove(map,key1,key2,...)				/*去除map内的key为key1,key2的项*/

例子:
在这里插入图片描述
在这里插入图片描述

自定义函数

@function 名字(形参1,形参2){
  .......
}

例子:
错误时的错误信息(提示信息会显示在css文件里面)
@error
在这里插入图片描述
错误时的警告信息(提示信息会显示在命令行上面)
@warn
在这里插入图片描述

十二、布尔值的判断

在这里插入图片描述

十三、控制指令

@if,@else if,@else

/*SCSS*/
$v:2;
@if $v>5 {
  border:5px blue solid;
}
@else if $v>2 {
  border:2px blue solid;
}
@else {
  border:1px blue solid;
}
/*CSS文件*/
border: 1px blue solid;

@for

@for $i from 1 to 3{				/*从1到3,不包括3,也支持从大到小遍历*/
    ...
  }
@for $i from 1 through 3{			/*从1到3,包括3,也支持从大到小遍历*/
  ...
}

@each(只能是list类型,不能是map类型的

/*SCSS文件*/
$icons:success error warning;				/*这是一个由不带引号的字符串组成的list*/
@each $icon in $icons{
  icon-#{$icon}{							/*这里使用#{$icon}的原因是因为它被包含在一个属性内*/
    background-image: url("../images/#{$icon}.jpg");	/*这里使用#{$icon}的原因是因为它被包含在一个字符串内*/
  }
}
/*CSS文件*/
icon-success {
  background-image: url("../images/success.jpg");
}

icon-error {
  background-image: url("../images/error.jpg");
}

icon-warning {
  background-image: url("../images/warning.jpg");
}

@while

/*SCSS*/
$n:6;
@while $n>0{
  .item-#{$n}{							/*这里使用#{$icon}的原因是因为它被包含在一个属性内*/
    background-image: url("../images/image0#{$n}.jpg");		/*这里使用#{$icon}的原因是因为它被包含在一个字符串内*/
  };
  $n:$n - 3;							/*$n减小,不能使用$n--,且减号两边必须有空格因为减号是特殊符号*/
}
/*CSS文件*/
.item-6 {
  background-image: url("../images/image06.jpg");
}

.item-3 {
  background-image: url("../images/image03.jpg");
}

本文只用于个人学习与记录

  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值