百科狗-知识改变命运!
--

地图(Maps) - scss 数据值

乐乐1年前 (2023-11-21)阅读数 23#技术干货
文章标签地图

地图(Maps)

Sass 中的映射包含键和值对,并且可以通过对应的键轻松查找值。他们格式::, :。表达式的前面是键,后面的是与该键关联的值。键必须是唯一的,但值可能会重复。与列表不同,映射必须用括号括起来。写了一张没有对的地图()

精明的读者可能会注意到,空地图与空列表的写法相同。那是因为它既是地图又是列表。事实上,所有地图都算作列表!每个映射都算作一个列表,其中包含每个键/值对的两个元素列表。例如,(1: 2, 3: 4)计为(1 2, 3 4)。

地图(Maps) - scss 数据值

Maps 允许将任何 Sass 值用作它们的键。运算符==,用于判断两个键是否相同。

⚠️注意!
大多数时候,使用带引号的字符串而不是不带引号的字符串作为映射键是个好主意。这是因为某些值(例如颜色名称)可能看起来像未加引号的字符串,但实际上是其他类型。为了避免混淆问题,只需使用引号!


使用地图

由于地图不是有效的 CSS 值,它们自己不会做任何事情。这就是为什么 Sass 提供了一堆函数来创建映射并访问它们包含的值。

查找值

映射都是关于关联键和值的,因此自然有一种方法可以获取与键关联的值:map.get($map,$key)函数!此函数返回映射中与给定键关联的值。如果地图不包含密钥,则返回null

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.get($font-weights, "medium"); // 500
@debug map.get($font-weights, "extra-bold"); // null

为每一对做点什么

这实际上并没有使用函数,但它仍然是使用地图的最常见方式之一。该@each规则为映射中的每个键/值对评估一组样式。键和值被分配给变量,因此可以在块中轻松访问它们。

scss 语法css 语法
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");

@each $name, $glyph in $icons {
  .icon-#{$name}:before {
    display: inline-block;
    font-family: "Icon Font";
    content: $glyph;
  }
}
@charset "UTF-8";
.icon-eye:before {
  display: inline-block;
  font-family: "Icon Font";
  content: "";
}

.icon-start:before {
  display: inline-block;
  font-family: "Icon Font";
  content: "";
}

.icon-stop:before {
  display: inline-block;
  font-family: "Icon Font";
  content: "";
}

添加到地图

将新对添加到映射或替换现有键的值也很有用。该map.set($map,$key,$value)函数执行此操作:它返回$map的副本,其值$key设置为$value

@use "sass:map";

$font-weights: ("regular": 400, "medium": 500, "bold": 700);

@debug map.set($font-weights, "extra-bold", 900);
// ("regular": 400, "medium": 500, "bold": 700, "extra-bold": 900)
@debug map.set($font-weights, "bold", 900);
// ("regular": 400, "medium": 500, "bold": 900)

您也可以使用map.merge($map1,$map2),合并两个现有地图,而不是一一设置值。

@use "sass:map";

$light-weights: ("lightest": 100, "light": 300);
$heavy-weights: ("medium": 500, "bold": 700);

@debug map.merge($light-weights, $heavy-weights);
// ("lightest": 100, "light": 300, "medium": 500, "bold": 700)

如果两个映射具有相同的键,则在返回的映射中使用第二个映射的值。

@use "sass:map";

$weights: ("light": 300, "medium": 500);

@debug map.merge($weights, ("medium": 700));
// ("light": 300, "medium": 700)

请注意,因为 Sass 映射是不可变的,所以map.set()map.merge()不要修改原始列表。


不变性

Sass 中的映射是不可变的,这意味着映射值的内容永远不会改变。Sass 的地图函数都返回新地图而不是修改原始地图。不变性有助于避免在样式表的不同部分共享同一个映射时可能出现的许多偷偷摸摸的错误。

不过,您仍然可以通过将新地图分配给同一变量来随着时间的推移更新您的状态。这通常用于函数和 mixin 中以跟踪地图中的配置。

@use "sass:map";

$prefixes-by-browser: ("firefox": moz, "safari": webkit, "ie": ms);

@mixin add-browser-prefix($browser, $prefix) {
  $prefixes-by-browser: map.merge($prefixes-by-browser, ($browser: $prefix)) !global;
}

@include add-browser-prefix("opera", o);
@debug $prefixes-by-browser;
// ("firefox": moz, "safari": webkit, "ie": ms, "opera": o)

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)