如何将映射合并为sass中的现有映射?
我目前正在使用_config分部中的sass映射来定义我的断点,例如:
$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;
}
}理想情况下,我希望能够在现有映射中添加新的断点:
@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“的地图。
发布于 2014-12-11 01:44:15
您要寻找的函数是map-merge(),而不是join()。join()函数用于将列表连接在一起,并使映射转换为列表列表。
$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;
}
}输出:
@media screen and (min-width: 110rem) {
.foo {
color: red;
}
}https://stackoverflow.com/questions/27413854
复制相似问题