Sass语法介绍进阶篇

变量的操作分为两种:一、直接操作变量(即变量表达式);二、通过函数。

函数又分为两种:一、跟代码块无关的函数,多是自己的内置函数,称functions;二、可重用的代码块,称mixin,类似于C语言中的宏。

mixin又细分为两种概念:一、使用时以赋值拷贝的方式存在的,通过@include方式调用;二、使用时以组合声明的方式存在的,通过@extend的方式调用。

变量表达式和functions

两者的使用范围都较窄,歪果仁关于表达式变量的例子经常是下面这个样子的:

p {
  height: (500px / 2);
}

从这个例子中可以看出两点:一、歪果仁的数学不咋地;二、变量表达式的运算可以带单位。

Sass官网上列出了所有的functions,看这里 。比如hsl(),HSL是CSS3新增的颜色表示模式,HSL就是色调(Hue)、饱和度(Saturation)和亮度(Lightness)的缩写。Sass是CSS的超集,所以当然也支持这种模式。可以通过@functions声明函数。

mixin:@include

定义

mixin的定义以@mixin开头,如下:

@mixin col-6 {
  width: 50%;
  float: left;
}

也可以增加参数信息使mixin更具有可配置性,如下:

@mixin col($width) {
  width: $width;
  float: left;
}

当然,mixin也支持默认参数,如下:

@mixin col($width:50%) {
  width: $width;
  float: left;
}

使用

也许你会说,mixin代码块的定义是如此简单,那么,你可能会觉得代码块的使用更简单,只需要使用@include引入即可,如下:

@include col-6();
@include col(25%);

mixin:@extend

场景介绍

首先考虑一个样式正交性的问题,设想这样一个场景,假设你有下面两个div:

<div class="error">今天没有学习!!!!</div>
<div class="serious-error">这两天都没有学习!!!</div>

现在你想让error类显示红色的字体,而serious-error类除了字体为红色之外,还要有一个红色的边框,那么你可能会这样设计两个类的样式,然后再给serious-error的div增加一个error类名。

.error {
  color: #f00;
}
.serious-error {
  border: 1px solid #f00;
}

或者这样设计类的样式:

.error {
  color: #f00;
}
.serious-error {
  color: #f00;
  border: 1px solid #f00;
}

显然,这两种做法都不太好,冗余,不好维护。

extend登场

Sass的extend属性可以帮助我们解决这个问题,明确指定一个类去继承另一个类的样式。

.serious-error {
  @extend .error;
  border: 1px solid #f00;
}

编译生成的css文件如下:

.error, .serious-error {
  color: #f00;
}
.serious-error {
  border: 1px solid #f00;
}

extend工作的原理很简单,就是把继承者的选择器(.serious-error)插入到被继承者的选择器(.error)出现的地方。

继承多个和连续继承

继承多个类的情况下,可以写多个extend,每个后面跟一个类名,也可以写一个extend,后面的类名以逗号分隔。

连续继承也很简单,如下,存在多个继承和连续继承的情况:

.error {
  color: #f00;
}
.normal {
  font-size: 15px;
}
.serious-error {
  @extend .error, .normal;
  border: 1px solid #f00;
}

.dead-error {
  @extend .serious-error;
  border-color: #000;
}

extend的两个知识点

  1. extend不可以继承选择器系列

    .A .B { 
      color: #f00;
    }
    .C { 
      @extend .A .B; //错误的
    }
    

    但是这样做却是可以的,虽然你可能并不想要这样的效果。

    .A .B { 
      color: #f00;
    }
    .C { 
      @extend .B;
    }
    .D {
      @extend .A;
    }
    

    生成的CSS代码如下:

    .A .B, .D .B, .A .C, .D .C {
      color: #000;
    }
    
  2. 可以使用%,用来构建只用来继承的选择器。

    %error {
      color: #f00;
    }
    .serious-error {
      @extend %error;
      border: 1px solid #f00;
    }
    

    error的样式不会输出到生成的css文件里。


文字资料来自慕课网课程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容