scss Sass:使用Map #sass键入值工厂和验证器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scss Sass:使用Map #sass键入值工厂和验证器相关的知识,希望对你有一定的参考价值。

.test {
  dir: (-type: "dir", -value: top);
  border-top: 1px solid #000;
  padding-top: 1em;
}
// ----
// Sass (v3.4.1)
// Compass (v1.0.1)
// ----

// Sass: Typed value factory & validator using Map

// Direction type that accepts only top, right, left, bottom
// Direction type factory
@function dir-new($dir) {
    $is-valid: -dir-validate($dir);

    // do something
    // e.g. transform the arguments into proper form.

    $value: (
        -type : 'dir',
        -value: $dir
    );

    @return $value;
}

// Direction type validator
@function -dir-is-valid($dir) {
  $valid-values: ('top', 'right', 'bottom', 'left');

  @return index($valid-values, $dir) != null;
}

// Validate a value as Direction type
@function -dir-validate($dir) {
  @if -dir-is-valid($dir) {
    @return true;
  }
  
  @error 'Cannot convert the value `#{inspect($dir)}` into Direction.';
}

// Typed Map factory (API)
@function new($type, $values...) {
    $factory  : $type + '-new';

    @if not function-exists($factory) {
      @error 'The type `#{$type}` doesn\'t exist.';
    }

    $value: call($factory, $values...);

    @return $value;
}

// Check the type of a value (API)
@function is-type($type, $value) {
  @if map-get($value, '-type') == $type {
    @return true;
  }
  
  @return false;
}

// Validate a value as a type (API)
@function validate($type, $value) {
  @if is-type($type, $value) {
    @return true;
  }
  
  @error 'The value `#{inspect($value)}` isn\'t a #{$type}.';
}

// Typed Map Getter (API)
@function get($map) {
  @return map-get($map, '-value');
}

// Use case
@mixin border($dir) {
  $is-valid : validate('dir', $dir);
  $dir-value: get($dir);

  border-#{$dir-value} : 1px solid #000;
  padding-#{$dir-value}: 1em;
}

$dir: new('dir', top);

.test {
  dir : inspect($dir);

  @include border($dir);
}

以上是关于scss Sass:使用Map #sass键入值工厂和验证器的主要内容,如果未能解决你的问题,请参考以下文章

gulp 与 gulp-ruby-sass:错误:../style.css.map:3:1:未知单词

禁用 SASS 上的地图文件

scss SaSS使用@each循环并列出#sass

为啥我们使用 SASS,甚至我们使用 SCSS? [复制]

如何使用 grunt-sass 编译多个 scss 文件

css、scss、sass 和 less 有啥区别? [复制]