Sass: @mixin vs placeholder vs @function

学习 Sass 的时候总会发现这三个东西很像,因为他们都是用来统一代码来达到复用的目的的。这篇文章将用一个小例子来对比他们的不同之处。

例子

我们要做的就是两个一大一小的两个 div,一个宽高100px,另一个宽高 300px。

<div class="box smallBox"></div>
<div class="box bigBox"></div>

CSS 代码可以写成这样:

.smallBox {
  width: 100px;
  height: 100px;
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}

.bigBox {
  width: 300px;
  height: 300px;
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}

很明显这代码太过于复杂,很多代码都很类似的。

Mixin

Mixin 可以传入参数,直接复制属性到每个选择器里。

@mixin box($width: 100px, $height: 100px) {
  width: $width;
  height: $height;
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}

.smallBox {
  @include box(100px, 100px);
}

.bigBox {
  @include box(300px, 300px);
}

生成的 CSS 如下,可以看到 Mixin 只不过是将一块代码做了复制。

生成 CSS 结果

Placeholder

Placeholder 与 Mixin 差不多,但是不能传入参数。而且他不是直接复制代码块,而是将共有的属性提到前面,然后使用这两个 div 的选择器一起去调用。

%box {
  box-shadow: 0px 0px 5px black;
  margin: 10px;
}

.smallBox {
  @extend %box;
  width: 100px;
  height: 100px;
}

.bigBox {
  @extend %box;
  width: 300px;
  height: 300px;
}

生成的 CSS 代码如下:

生成 CSS 结果

可以看到这比 Mixin 要省很多代码,因为不会将代码块每次都做复制,所以一般推荐这种写法。

@function

Sass 的函数主要用于属性值的复用,如一起变大,一起变小。如下面的的可以一起将原来的值一都变成 2 倍大。

@function px($value) {
  @return $value * 2 + px
}

.smallBox {
  width: px(50);
  height: px(50);
}

.bigBox {
  width: px(150);
  height: px(150);
}

函数主要用于:

  1. 使得属性值可以复用
  2. 如数值的统一计算
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 再谈CSS 预处理器2016-09-09 Justineo JavaScript转自:http://efe.bai...
    抓住时间的尾巴吧阅读 1,604评论 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,758评论 1 45
  • 前言 什么是CSS预处理器 定义:CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增...
    SA_Arthur阅读 3,144评论 0 18
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 786评论 0 3
  • 醉花间【清明】 花纷雨,杏林雨。阴翠江南处。 谁此不多愁?户外春光路。 溪边轻柳絮。万古飞天遇。 桃红李艳依,荒冢...
    柏荣生阅读 700评论 14 45