首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在映射中添加新元素后出现的“不是映射”错误

在映射中添加新元素后出现的“不是映射”错误
EN

Stack Overflow用户
提问于 2014-12-11 01:22:00
回答 1查看 2.7K关注 0票数 3

如何将映射合并为sass中的现有映射?

我目前正在使用_config分部中的sass映射来定义我的断点,例如:

代码语言:javascript
复制
$breakpoints: (
    small: 35rem,
    medium: 55rem,
    large: 75rem,
    xlarge: 90rem,
    element-breakpoint-1: 100rem,
    element-breakpoint-2: 110rem 
);

@mixin breakpoint($width) {
    @media screen and (min-width: map-get($breakpoints, $width)) {
        @content;
    }
}

.element {
    width: 100px;
    @include breakpoint(element-breakpoint-1) {
        width: 200px;
    }
    @include breakpoint(element-breakpoint-2) {
        width: 300px;
    }
}

理想情况下,我希望能够在现有映射中添加新的断点:

代码语言:javascript
复制
@function array-append($list, $value) {
    @return join($list, $value);
}

$breakpoints: array-append($breakpoints, (element-breakpoint-1: 100rem, element-breakpoint-1: 110rem));

问题是,断点混合器看不到$breakpoints列表中的新值,SASS抛出以下错误:

错误:$map:(“小”35雷姆,(“中型”55雷姆),(“大”75雷姆),("xlarge“90 get),(”元素-断点-1“100 get))不是”map -get“的地图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 01:44:15

您要寻找的函数是map-merge(),而不是join()join()函数用于将列表连接在一起,并使映射转换为列表列表。

代码语言:javascript
复制
$fix-mqs: false;
$breakpoints: (
    small: 35rem,
    medium: 55rem,
    large: 75rem,
    xlarge: 90rem
);

// map-merge here, not join
$breakpoints: map-merge($breakpoints, (element-breakpoint-1: 100rem, element-breakpoint-2: 110rem));

@mixin breakpoint($width) {
    @if $fix-mqs {
        @if $fix-mqs >= map-get($breakpoints, $width) {
            @content;
        }
    }
    @else {
        @media screen and (min-width: map-get($breakpoints, $width)) {
            @content;
        }
    }
}

@include breakpoint(element-breakpoint-2) {
  .foo {
    color: red;
  }
}

输出:

代码语言:javascript
复制
@media screen and (min-width: 110rem) {
  .foo {
    color: red;
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27413854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档