@media x @mixin x @content

作者: 写代码的海怪 | 来源:发表于2019-01-05 15:52 被阅读0次

说到媒体查询我想到的就是麻烦,要写很多代码,而且难懂。当 Sass 推出了 @mixin 和 @content 后一切就感觉很舒服了。

例子

我们从一个例子说起。比如我们想在宽度不同时候去变化背景色。

  • 0px ~ 500px 绿色
  • 501px ~ 1024px 红色
  • 1025 以上都是蓝色

使用 CSS 的媒体查询会写成这样:

@media (max-width: 500px) {
    .container {
        background: green;
    }
}
@media (min-width: 501px) and (max-width: 1024px) {
    .container {
        background: red;
    }
}
@media (min-width: 1025px) {
    .container {
        background: blue;
    }
}

要是代码多起来完全不知道这个 max-width: 500px 是个什么鬼。

Sass 重写

Sass 提供了 @mixin 语法,其本质上和函数差不多,可以理解成返回的东西是 CSS 代码(当然 Sass 也有函数 @function 一说,这里不过是做一下类比)。如下面就是将 background: $bgColor 代码写到 .container 里。

@mixin setBackgroundColor($bgColor) {
    background: $bgColor
}

.container {
    $bgColor: 'blue';
    @include setBackgroundColor($bgColor)
}

Sass 同时还引进了 @content,这就让媒体查询变得更容易理解了。上面的代码可以写成这样:

@mixin phone {
  @media (max-width: 500px) {
    @content;
  }
}

@mixin ipad {
  @media (min-width: 501px) and (max-width: 1024px) {
    @content;
  }
}

@mixin pc {
  @media (min-width: 1025px) {
    @content;
  }
}

body {
  @include phone {
    background: green;
  }
  @include ipad {
    background: red;
  }
  @include pc {
    background: blue;
  }
}

@content 就像是变量,这个变量表示了 @include 花括号里的代码。这样就可以不用每个 @media 里都写一遍 CSS 代码了,直接在 CSS 代码里 @include 对应的 Mixin 就好了。而且易读性很高,这样的代码傻子都能看懂,phone 是 xxx 样式,ipad 是 yyy 样式,pc 是 zzz 样式,一目了然。

相关文章

网友评论

    本文标题:@media x @mixin x @content

    本文链接:https://www.haomeiwen.com/subject/cdarrqtx.html