Sass变量、嵌套

声明变量
定义变量的语法
Sass 的变量包括三个部分:
  声明变量的符号“$”
  变量名称
  赋予变量的值
简单的示例,假设你的按钮颜色可以给其声明几个变量:

1 $brand-primary : darken(#428bca, 6.5%) !default;/* #337ab7*/
2 $btn-primary-color : #fff !default;
3 $btn-primary-bg : $brand-primary !default;
4 $btn-primary-border : darken($btn-primary-bg, 5%) !default;
5 /*如果值后面加上!default则表示默认值。*/

普通变量与默认变量
普通变量
定义之后可以在全局范围内使用

1 $fontSize: 12px;
2 body{
3     font-size:$fontSize;
4 }

编译后的CSS代码:

1 body{
2     font-size:12px;
3 }

默认变量
sass的默认变量仅需要在值的后面加上!default即可。

1 $baseLineHeight:1.5 !default;
2 body{
3     line-height: $baseLineHeight;
4 }

编译后的css代码:

1 body{
2     line-height:1.5;
3 }

sass 的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可。

1 $baseLineHeight: 2;
2 $baseLineHeight: 1.5 !default;
3 body{
4     line-height: $baseLineHeight;
5 }

编译后的css代码:

1 body{
2     line-height:2;
3 }

可以看出现在编译后的 line-height 为 2,而不是我们默认的 1.5。默认变量的价值在进行组件化开发的时候会非常有用。

局部变量和全局变量
如果已经存在同名的全局变量,从 3.4 版本开始,Sass 已经可以正确处理作用域的概念,并通过创建一个新的局部变量来代替。
全局变量与局部变量

 1 /*SCSS*/
 2 $color: orange !default;/*定义全局变量(在选择器、函数、混合宏...的外面定义的变量为全局变量)*/
 3 .block {
 4     color: $color;//调用全局变量
 5 }
 6 em {
 7     $color: red;//定义局部变量
 8     a {
 9         color: $color;//调用局部变量
10     }
11 }
12 span {
13     color: $color;//调用全局变量
14 }

css 的结果:

 1 /*CSS*/
 2 .block {
 3     color: orange;
 4 }
 5 em a {
 6     color: red;
 7 }
 8 span {
 9     color: orange;
10 }

在元素内部定义的变量不会影响其他元素。如此可以简单的理解成,全局变量就是定义在元素外面的变量,如下代码:

$color:orange !default;

$color  就是一个全局变量,而定义在元素内部的变量,比如  $color:red;  是一个局部变量。
全局变量的影子
当在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,局部变量就成为了全局变量的影子。基本上,局部变量只会在局部范围内覆盖全局变量。
上面例子中的 em 选择器内的变量 $color  就是一个全局变量的影子。

 1 /*SCSS*/
 2 $color: orange !default;//定义全局变量
 3 .block {
 4     color: $color;//调用全局变量
 5 }
 6 em {
 7     $color: red;//定义局部变量(全局变量 $color 的影子)
 8     a {
 9         color: $color;//调用局部变量
10     }
11 }

什么时候声明变量?
建议:创建变量只适用于感觉确有必要的情况下。不要为了某些骇客行为而声明新变量,这丝毫没有作用。只有满足所有下述标准时方可创建新变量:
  1、该值至少重复出现了两次;
  2、该值至少可能会被更新一次;
  3、该值所有的表现都与变量有关(非巧合)。
  4、基本上,没有理由声明一个永远不需要更新或者只在单一地方使用变量。

嵌套-选择器嵌套
Sass 中还提供了选择器嵌套功能,但这也并不意味着你在 Sass 中的嵌套是无节制的,因为你嵌套的层级越深,编译出来的 CSS 代码的选择器层级将越深
Sass 的嵌套分为三种:
  选择器嵌套
  属性嵌套
  伪类嵌套
1、选择器嵌套
假设我们有一段这样的结构:

1 <header>
2     <nav>
3         <a href=“##”>Home</a>
4         <a href=“##”>About</a>
5         <a href=“##”>Blog</a>
6     </nav>
7 <header>

想选中 header 中的 a 标签,在写 CSS 会这样写:

1 nav a {
2     color:red;
3 }
4 header nav a {
5     color:green;
6 }

那么在 Sass 中,就可以使用选择器的嵌套来实现:

1 nav {
2     a {
3         color: red;
4
5         header & {
6         color:green;
7         }
8     }
9 }

嵌套-属性嵌套
Sass中还提供属性嵌套,CSS有一些属性前缀相同,只是后缀不一样,比如:border-top/border-right,与这个类似的还有margin、padding、font等属性。
例:

1 .box{
2     border-top: 1px solid red;
3     border-bottom: 1px solid green;
4 }

在Sass中可以这样写:

1 .box{
2     border:{
3         top: 1px solid red;
4         bottom: 1px solid green;
5     }
6 }

嵌套-伪类嵌套
伪类嵌套和属性嵌套非常类似,只不过他需要借助“&”符号一起配合使用。
就拿经典的“clearfix”为例吧:

 1 .clearfix{
 2     &:before,&:after {
 3         content:"";
 4         display: table;
 5     }
 6     &:after {
 7         clear:both;
 8         overflow: hidden;
 9     }
10 }

编译出来的 CSS:

1 clearfix:before, .clearfix:after {
2     content: "";
3     display: table;
4 }
5 .clearfix:after {
6     clear: both;
7     overflow: hidden;
8 }

避免选择器嵌套:
选择器嵌套最大的问题是将使最终的代码难以阅读。开发者需要花费巨大精力计算不同缩进级别下的选择器具体的表现效果。
选择器越具体则声明语句越冗长,而且对最近选择器的引用(&)也越频繁。在某些时候,出现混淆选择器路径和探索下一级选择器的错误率很高,这非常不值得。
为了防止此类情况,我们应该尽可能避免选择器嵌套。然而,显然只有少数情况适应这一措施。

时间: 2024-09-29 22:13:20

Sass变量、嵌套的相关文章

关于CMD中延迟环境变量嵌套的实现方法

在我昨天做的一个bat中(自动按日期重命名文件名)涉及到这方面的问题 以前涉及到这里时就想别的办法替代过去,今天好好扒出来说说: 实现变量嵌套的2种方法: 1,使用call实现变量嵌套 变量嵌套:即在变量中嵌套变量,将变量的值作为另外一个变量的名字(或一部分名字) 这种用法很多语言都支持,如PHP的$$p,如C语言的**p二级指针,但在BAT中这是第一次涉及 如:(需要通过a输入10) set a=1&set b1=10 call,echo %%b%a%%% call 这里实际是对命令行进行重新

shell 变量嵌套取值 ,判断变量为空

1.变量嵌套取值 bitrate1=100 numbers=1 eval echo \$bitrate${numbers} >tmpbit tmpbitrate=`cat tmpbit` 2.判断变量为空 if [ ! -n $bitrate ];then echo null;fi

sass的嵌套

sass的嵌套包括两种: 1.选择器的嵌套.(最常用到) 指的是在一个选择器中嵌套另一个选择器来实现继承,从而增强了sass文件的结构性和可读性. 在选择器嵌套中,可以使用&表示父元素选择器 scss.style css.style 2.属性嵌套 指的是有些属性拥有同一个开始单词,如border-width,border-color都是以border开头. scss.style css.style 原文地址:https://www.cnblogs.com/lishch/p/9658077.htm

2.Sass变量

1.Sass中,我们声明变量使用的是 $ 美元符号开头,注意一下,定义一个Sass变量必须用“$”开头,不然编译的时候是无法识别的. 语法: 2.Sass中,对于变量的取值有两种方式: 1>一般值:在Sass中,变量的一般值,指的是我们常见的变量值,这个值可以是数字.字符串            等. 例如:$width:10px;        $color:white;        $bgColor:red;         div{           font-size:$width;

Ansible变量嵌套解析

有时候需要用到ansible的变量的嵌套解析,就是“变量中嵌套变量”.例子如下: 假设有一个外部传递的变量,system_code = CRM,而我们同时有一系列类似的变量,如: ABS_port=10000 ETL_port=5678 CRM_port=1234 想通过system_code变量来决定我要用哪个xxx_port,所以需要变量嵌套. ansible yaml写法如下,在ansible 2.2中通过.(在2.5版本后有新的写法) - hosts: remote_node vars:

Sass 变量的作用域

变量是最基础也最常用的东西,例如一段 CSS 中有很多相同的颜色值(例如 #050709),传统的 CSS 中,你就需要不断的去复制这个值,而在 Sass 中,你就可以先在对应文件头部(一般会有一个 var.scss 文件专门用来放置变量等)声明一个变量 $co : #050709 然后在后面需要使用这个颜色值的时候,就可以直接写上 color: $co; 就可以了. 不仅仅需要输入的字符少了,而且根据规则起变量名让人更加易懂,此外后期需要修改这一种颜色的时候,只需要修改一下变量值即可全部修改,

sass变量引入全局

https://www.jianshu.com/p/ab9ab999344b(copy) 本文以Sass做案例,Less的参考,基本配置大同小异.假如我们有一个Sass的全局变量common.scss文件,路径 ../style/common.scss 代码如下: @mixin t-button($color,$background) { color:$color; background:$background; padding:5px 10px; } 现在我们想在一个vue文件里引用这个全局样

jmeter-抓取数据库数据,循环请求1000次(变量嵌套变量)

场景:数据库返回1000个数据,用这1000个数据去做请求 数据库请求结果为: 添加while控制器 添加BeanShell 预处理程序,${__counter(FALSE,Vcount)} 为自增函数 添加http请求 重点!! 我需要传的item_id为数据库的B列,B_#,期望传入B_1,B_2.......B_1000 ${Times}为预处理程序中写好的自增函数:vars.put("Times","${__counter(FALSE,Vcount)}");

Sass学习笔记 -- 变量及变量作用域历史遗留问题

sass有两种后缀名文件: 一种后缀名为sass,写选择器时不能使用大括号和分号 一种后缀名为scss,使用大括号和分号 //后缀名为sass的语法,不能出现大括号和分号 $highlight-color: #abcdef .selected   border: 1px $highlight-color solid    //后缀名为scss的语法,跟css一样,需要大括号和分号 $highlight-color: #abcdef; .selected{   border:1px solid $