【问题标题】:how can i use @custom-media in sass mixins?我如何在 sass mixins 中使用@custom-media?
【发布时间】:2021-11-09 05:43:15
【问题描述】:

我正在尝试在 mixin 中生成 @custom-media 条目,源自 sass 映射,但收到媒体查询不是有效的 css 值的错误

例如

@use 'sass:map';

@mixin custom-media($breakpoints) {
  $breakpoint-names: map.keys($breakpoints);

  @each $breakpoint in $breakpoint-names {
    $media-query: null;
    $min: map.get($breakpoints, $breakpoint, width, min);
    $max: map.get($breakpoints, $breakpoint, width, max);

    @if ($min) { $min: (min-width: #{$min}); }

    @if ($max) { $max: (max-width: #{$max}); }

    @if ($min and $max) {
      $media-query: "#{$min} and #{$max}";
    }

    @else {
      $media-query: $min or $max;
    }

    @custom-media --#{breakpoint}-media-query #{$media-query};
  }
}
.root {
    @include custom-media((
        small: (
            width: (
                max: 40em,
            )
        ),
        medium: (
            width: (
                min: 40em,
                max: 80em,
            )
        ),
        large: (
            width: (
                min: 80em,
            )
        )
    ))
};

错误是(max-width: 40em) is'nt a valid css value.,尽管这正是我想要的值。 sass 不支持@custom-media 语法吗?

【问题讨论】:

    标签: css sass scss-mixins


    【解决方案1】:

    mixin 只能返回一个有效的 CSS 规则。 @custom-media ... 这不是有效的 CSS 规则。

    如果要自定义断点,请创建 CSS var。

    【讨论】:

    • 所以 css vars 是我最初开始的地方,但在媒体查询中不允许使用它们,这导致我使用了 github.com/postcss/postcss-custom-media 插件,但它仍然需要一些其他机制才能在媒体查询中使用它.我的所有断点值都有 css 变量,但似乎找不到将它们插入媒体查询的方法
    • 我实际上已经尝试过 postcss-media-variables、postcss-custom-media 和 postcss-css-variables,但失败程度不同 :) 也许媒体查询是我不能使用 css 变量的一件事为了?
    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 2021-08-07
    • 2018-08-25
    • 2018-03-18
    • 2012-12-26
    • 2020-01-27
    • 1970-01-01
    • 2014-04-29
    相关资源
    最近更新 更多