如何制作 sass map-get return 完整的组合表达式

How to make sass map-get return full combined expression

我有一个这样的 scss 对象

$device-media-queries: (
  mobile: (max-width: 639px),
  tablet: (max-width: 1024px) and (min-width: 640px),
  desktop: (min-width: 1025px)
);

我在像

这样的混合中使用 map-get
$target-device-media-query: map-get($device-media-queries, $device-description);

然而,在 $device-descriptiontablet 的情况下,$target-device-media-query 仅成为子句中的最后一项,在本例中为 (min-width: 640px)

如何使 $target-device-media-query 等于两个表达式,所以: (max-width: 1024px) and (min-width: 640px) 这样我的媒体查询就不会搞砸,平板电脑样式也不会应用于桌面设备(由于 (min-width: 640px) 申请)?当我不使用 mixin 直接执行组合媒体查询时,一切正常。

您应该使用双引号,如下所示:

$device-media-queries: (
  mobile: "(max-width: 639px)",
  tablet: "(max-width: 1024px) and (min-width: 640px)",
  desktop: "(min-width: 1025px)"
);

$target-device-media-query: map-get($device-media-queries, tablet);

@media #{$target-device-media-query} {
  .element:before {
    content: $target-device-media-query;
  }
}

这里的问题是 () 是 sass 映射分隔符。您应该在每个媒体查询周围使用引号:

$device-media-queries: (
  mobile: '(max-width: 639px)',
  tablet: '(max-width: 1024px) and (min-width: 640px)',
  desktop: '(min-width: 1025px)'
);

@media #{map-get($device-media-queries, tablet)} { }