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

列表(Lists) - scss 数据值

梵高1年前 (2023-11-21)阅读数 20#技术干货
文章标签列表

列表(Lists)

列表包含一系列其他值。在 Sass 中,列表中的元素可以用逗号(例如:Helvetica, Arial, sans-serif)、空格(例如:10px 15px 0 0)或斜线分隔,只要它在列表中保持一致即可。与大多数其他语言不同,Sass 中的列表不需要特殊的括号。任何用空格或逗号分隔的表达式都算作一个列表。但是,您可以使用方括号(例如:[line1 line2])编写列表,这在使用网格模板列。

Sass 列表可以包含一个甚至零个元素。单元素列表可以写成(,)或[],零元素列表可以写成()或[]。此外,所有列表函数都会将不在列表中的单个值视为包含该值的列表,这意味着您很少需要显式创建单元素列表。

⚠️注意!
没有括号的空列表不是有效的 CSS,所以 Sass 不会让你在属性值中使用一个。



斜杠分隔列表

Sass 中的列表可以用斜杠分隔,以表示值,例如:font: 12px/30pxfont-sizeline-heighthsl(80 100% 50%/ 0.5)。但是,斜杠分隔的列表目前不能按字面意思编写。Sass 历史上使用/字符来表示除法,因此当现有样式表转化为数字的时候,使用math.div(),到使用斜杠分隔的列表时,只能使用list.slash()

列表(Lists) - scss 数据值


使用列表

Sass 提供了一些函数,可以使用列表来编写强大的样式库,或者使您的应用程序的样式表更简洁和更易于维护。

索引

其中许多函数采用或返回数字,称为索引,它们引用列表中的元素。索引 1 表示列表的第一个元素。请注意,这与索引从 0 开始的许多编程语言不同!Sass 还可以很容易地引用列表的末尾。索引-1 指的是列表中的最后一个元素,-2 指的是倒数第二个,依此类推。

访问元素

如果您无法从中获取值,列表就没有多大用处。您可以使用该list.nth($list,$n)函数获取列表中给定索引处的元素。第一个参数是列表本身,第二个参数是你想要取出的值的索引。

@debug list.nth(10px 12px 16px, 2); // 12px
@debug list.nth([line1, line2, line3], -1); // line3

为每个元素做点什么

这实际上并不使用函数,但它仍然是使用列表的最常见方式之一。该@each规则为列表中的每个元素评估一组样式,并将该元素分配给一个变量。

scss 语法css 语法
$sizes: 40px, 50px, 80px;

@each $size in $sizes {
  .icon-#{$size} {
    font-size: $size;
    height: $size;
    width: $size;
  }
}
.icon-40px {
  font-size: 40px;
  height: 40px;
  width: 40px;
}

.icon-50px {
  font-size: 50px;
  height: 50px;
  width: 50px;
}

.icon-80px {
  font-size: 80px;
  height: 80px;
  width: 80px;
}

添加到列表

将元素添加到列表中也很有用。该list.append($list,$val)函数接受一个列表和一个值,并返回列表的副本,并将值添加到末尾。请注意,因为 Sass 列表是不可变的,所以它不会修改原始列表。

@debug append(10px 12px 16px, 25px); // 10px 12px 16px 25px
@debug append([col1-line1], col1-line2); // [col1-line1, col1-line2]

在列表中查找元素

如果您需要检查一个元素是否在列表中或找出它所在的索引,请使用list.index($list,$value)函数。这需要一个列表和一个要在该列表中定位的值,并返回该值的索引。

@debug list.index(1px solid red, 1px); // 1
@debug list.index(1px solid red, solid); // 2
@debug list.index(1px solid red, dashed); // null

如果该值根本不在列表中,则list.index()返回null。因为null是falsey,您可以使用list.index()配合@ifif()来检查列表是否包含给定值。

@use "sass:list";

$valid-sides: top, bottom, left, right;

@mixin attach($side) {
  @if not list.index($valid-sides, $side) {
    @error "#{$side} is not a valid side. Expected one of #{$valid-sides}.";
  }

  // ...
}


不变性

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

不过,您仍然可以通过将新列表分配给同一变量来随着时间的推移更新您的状态。这通常在函数和 mixin 中使用,以将一堆值收集到一个列表中。

@use "sass:list";
@use "sass:map";

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

@function prefixes-for-browsers($browsers) {
  $prefixes: ();
  @each $browser in $browsers {
    $prefixes: list.append($prefixes, map.get($prefixes-by-browser, $browser));
  }
  @return $prefixes;
}

@debug prefixes-for-browsers("firefox" "ie"); // moz ms


参数列表

当你声明一个接受任意参数的 mixin 或函数时,你得到的值是一个特殊的列表,称为参数列表。它就像一个列表,其中包含传递给 mixin 或函数的所有参数,还有一个额外的功能:如果用户传递了关键字参数,则可以通过将参数列表传递给meta.keywords()函数来将它们作为映射访问。

scss 语法css 语法
@use "sass:meta";

@mixin syntax-colors($args...) {
  @debug meta.keywords($args);
  // (string: #080, comment: #800, variable: #60b)

  @each $name, $color in meta.keywords($args) {
    pre span.stx-#{$name} {
      color: $color;
    }
  }
}

@include syntax-colors(
  $string: #080,
  $comment: #800,
  $variable: #60b,
)
pre span.stx-string {
  color: #080;
}

pre span.stx-comment {
  color: #800;
}

pre span.stx-variable {
  color: #60b;
}

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

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

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

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