【css】Sass/Scss 和 Less的区别 + css全局变量

目录

Sass/Scss与Less区别

1.编译环境不一样

2.变量符不一样,Less是@,而Scss是$。

3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。

4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。

5. 引用外部CSS文件

6.Sass和Less的工具库不同

7.安装体验不同

8.注意事项 

9.嵌套CSS 规则 

css全局变量

1. 变量的声明

2. var()函数

3. 变量值的类型

4.作用域


Sass/Scss与Less区别

1.编译环境不一样

Sass是在服务端处理的,以前是Ruby,现在是Dart-Sass或Node-Sass,而Less是需要引入less.js来处理Less代码输出CSS到浏览器,也可以在开发服务器将Less语法编译成css文件,输出CSS文件到生产包目录,有npm less, Less.app、SimpleLess、CodeKit.app这样的工具,也有在线编译地址。

2.变量符不一样,Less是@,而Scss是$。

 

Less-变量定义
@color: #00c; /* 蓝色 */
#footer {
  border: 1px solid @color; /* 蓝色边框 */
}
scss-变量定义
$color: #00c; /* 蓝色 */

#footer {
  border: 1px solid $color; /* 蓝色边框 */
}

3.输出设置,Less没有输出设置,Sass提供4中输出选项:nested, compact, compressed 和 expanded。

输出样式的风格可以有四种选择,默认为nested

  • nested:嵌套缩进的css代码
  • expanded:展开的多行css代码
  • compact:简洁格式的css代码
  • compressed:压缩后的css代码

4.Sass支持条件语句,可以使用if{}else{},for{}循环等等。而Less不支持。

5. 引用外部CSS文件

scss@import引用的外部文件如果不想编译时多生成同名的.css文件,命名必须以_开头, 文件名如果以下划线_开头的话,Sass会认为该文件是一个引用文件,不会将其编译为同名css文件.

Less引用外部文件和css中的@import没什么差异。

6.Sass和Less的工具库不同

Sass有工具库Compass, 简单说,Sass和Compass的关系有点像Javascript和jQuery的关系,Compass是Sass的工具库。在它的基础上,封装了一系列有用的模块和模板,补充强化了Sass的功能。

Less有UI组件库Bootstrap,Bootstrap是web前端开发中一个比较有名的前端UI组件库,Bootstrap的样式文件部分源码就是采用Less语法编写。

7.安装体验不同

用npm 或者yarn 安装less非常容易;而安装sass, 在国内没有翻墙的话,要么费了九牛二虎之力才能安装成功,要么就一直报安装失败。安装体验磕磕绊绊,很差劲。

8.注意事项 

  • css引入了变量,可以把反复使用的css属性值 定义成变量,然后通过变量名来引用它们
  • 凡是css属性的标准值(比如说1px或者bold)可存在的地方,变量就可以使用
  • sass的变量名可以与css中的属性名和选择器名称相同,包括中划线和下划线。这完全取决于个人的喜好
  • 嵌套CSS 规则

9.嵌套CSS 规则 

在规则块中嵌套规则块

#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}

 既包含属性,又可以嵌套其他规则块

#content {
  background-color: #f5f5f5;
  aside { background-color: #eee }
}

:hover这种伪类时,你并不希望以后代选择器的方式连接

//错误
article a {
  color: blue;
  :hover { color: red }
}


//正确
article a {
  color: blue;
  &:hover { color: red }
}

父选择器标识符还有另外一种用法,你可以在父选择器之前添加选择器。举例来说,当用户在使用IE浏览器时,你会通过JavaScript<body>标签上添加一个ie的类名,为这种情况编写特殊的样式如下:

#content aside {
  color: red;
  body.ie & { color: green }
}

/*编译后*/
#content aside {color: red};
body.ie #content aside { color: green }

第一个选择器会选择article下的所有命中section选择器的元素。

第二个选择器会选择article下紧跟着的子元素中命中section选择器的元素。 

article section { margin: 5px }
article > section { border: 1px solid #ccc }

在下例中,你可以用同层相邻组合选择器+选择header元素后紧跟的p元素:

header + p { font-size: 1.1em }

你也可以用同层全体组合选择器~,选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素:

article ~ article { border-top: 1px dashed #ccc }

 在sass中,你只需敲写一遍border

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

对于属性的缩写形式,你甚至可以像下边这样来嵌套,指明例外规则:

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

这比下边这种同等样式的写法要好:

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

 嵌套导入

举例说明,有一个名为_blue-theme.scss的局部文件,内容如下:

aside {
  background: blue;
  color: white;
}

然后把它导入到一个CSS规则内,如下所示:

.blue-theme {@import "blue-theme"}

//生成的结果跟你直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。

.blue-theme {
  aside {
    background: blue;
    color: #fff;
  }
}

使用继承的最佳实践

不要在css规则中使用后代选择器(比如.foo .bar)去继承css规则。

 

快速入门,总结自https://www.sass.hk/guide/

css全局变量

1. 变量的声明

CSS变量声明是字母前加两个横线(--)

--Colors:#dfdfdf;

2. var()函数

var函数用来读取变量

color:var(--Colors); 

var()函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。

color: var(--Colors, #e5e5e5);

 第二个参数不处理内部的逗号或空格,都视作参数的一部分。

var(--fontF, "Roboto", "Helvetica");
var(--Margins, 15px 20px 25px);

可以用在变量声明中

div{
      --bgcolors:red;
      --fColor:var(--bgcolors)        
}

3. 变量值的类型

(1). 字符串,可以与其他字符串拼接

--far:'hello';
--foo:var(--far)',world';

(2). 数值,不可以拼接

--far:20;
--foo:var(--far)'px'; //无效

但可以通过calc()函数,将他们拼接起来

--far:20;
--foo:calc(var(--far)*1px);

(3). 变量值带单位,则不能写成字符串形式

--far:'20px';
margin-top:var(--far); //无效

--far:20px;
margin-top:var(--far); //有效

4.作用域

:root {
  --Colors1:#48A6EB;
  --Colors2:#ACEC4D;
  --Colors3:#FEFC56;
  --Colors4:#E79E42;
  --Colors5:#C82A29;
}

.tag-color1 {
  border-color: var(--Colors1);
  color: var(--Colors1);
}

通用的变量值,最好声明在:root{}内

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BMG-Princess

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值