Spec-Zone.ru › Sass

Списки

Разделы страницы

  • Список, разделённый слешами
  • Использование списков
    • Обзор
    • Индексы
    • Доступ к элементу
    • Выполнение действия для каждого элемента
    • Добавление в список
    • Поиск элемента в списке
  • Неизменяемость
  • Список аргументов
Совместимость (квадратные скобки):
Dart Sass
✓
LibSass
с версии 3.5.0
Ruby Sass
с версии 3.5.0
➤

Более ранние реализации LibSass и Ruby Sass не поддерживали списки с квадратными скобками.

Списки содержат последовательность других значений. В Sass элементы списков могут разделяться запятыми (Helvetica, Arial, sans-serif), пробелами (10px 15px 0 0) или слешами ([line1 line2]), при условии, что это согласовано внутри списка. В отличие от большинства других языков, списки в Sass не требуют специальных скобок; любые выражения (grid-template-columns), разделенные пробелами или запятыми, считаются списком. Однако разрешается записывать списки с квадратными скобками ((<expression>,)), что полезно при использовании [<expression>].

Списки Sass могут содержать один или даже ноль элементов. Список с одним элементом может быть записан либо (), либо [], а список с нулевыми элементами — либо font: 12px/30px, либо font-size. Кроме того, все функции работы со списками (line-height) будут обрабатывать отдельные значения, которые не входят в списки, как списки, содержащие это значение, что означает, что вам редко нужно явно создавать списки из одного элемента.

Пустые списки без скобок не являются допустимыми CSS, поэтому Sass не позволит вам использовать их в значении свойства.

Списки, разделённые слешами

В Sass списки могут разделяться слешами, чтобы представлять значения, например, сокращённую запись hsl(80 100% 50% / 0.5) для задания / и math.div() или синтаксис list.slash() для создания цвета с заданным значением непрозрачности. Однако в настоящее время списки, разделённые слешами, не могут быть записаны буквально. Sass исторически использовал символ list.nth($list, $n) для обозначения деления, поэтому, хотя существующие стили переходят на использование

@use 'sass:list';

@debug list.nth(10px 12px 16px, 2); // 12px
@debug list.nth([line1, line2, line3], -1); // line3
, списки, разделённые слешами, могут быть записаны только с помощью
// SASS
@use 'sass:list'

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

Дополнительные сведения см. в разделе Breaking Change: Slash as Division.

Использование списков

Sass предоставляет несколько функций, которые позволяют использовать списки для создания мощных библиотек стилей или для улучшения читаемости и поддержки файла стилей вашего приложения.

Индексы

Многие из этих функций принимают или возвращают числа, называемые индексами, которые ссылаются на элементы в списке. Индекс 1 указывает на первый элемент списка. Обратите внимание, что это отличается от многих языков программирования, где индексы начинаются с 0! Sass также упрощает ссылку на конец списка. Индекс -1 относится к последнему элементу списка, -2 — ко второму с конца и так далее.

Доступ к элементу

Списки не очень полезны, если вы не можете извлечь из них значения. Вы можете использовать @each функцию, чтобы получить элемент с заданным индексом в списке. Первый аргумент — сам список, а второй — индекс значения, которое вы хотите получить.

$sizes: 40px, 50px, 80px;

@each $size in $sizes {
  .icon-#{$size} {
    font-size: $size;
    height: $size;
    width: $size;
  }
}
// SASS
$sizes: 40px, 50px, 80px

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

Выполнение действия для каждого элемента

Это не фактически использует функцию, но это всё ещё один из самых распространённых способов использования списков. Правило

/* CSS */
.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)
@debug append(10px 12px 16px, 25px); // 10px 12px 16px 25px
@debug append([col1-line1], col1-line2); // [col1-line1, col1-line2]
// 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) принимает список и значение и возвращает копию списка с добавленным значением в конец. Обратите внимание, что поскольку списки Sass неизменяемы (

@use 'sass:list';

@debug list.index(1px solid red, 1px); // 1
@debug list.index(1px solid red, solid); // 2
@debug list.index(1px solid red, dashed); // null
), это не изменяет исходный список.

// SASS
@use 'sass:list'

@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
list.index()

Если значение вообще нет в списке, @if возвращает if(). Поскольку

@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
@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}."


  // ...
с
@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
или
// SASS
@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
, чтобы проверить, содержит ли список данное значение или нет.

meta.keywords()
@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,
)

Неизменяемость

Списки в Sass являются неизменяемыми, что означает, что содержимое значения списка никогда не меняется. Все функции работы со списками Sass возвращают новые списки, а не изменяют исходные. Неизменяемость помогает избежать множества скрытых ошибок, которые могут возникать, когда один и тот же список используется в разных частях файла стилей.

Тем не менее, вы всё ещё можете обновлять состояние со временем, присваивая новые списки той же переменной. Это часто используется в функциях и миксинах для сбора нескольких значений в один список.

// SASS
@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)
/* CSS */
pre span.stx-string {
  color: #080;
}

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

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

Списки аргументов

Когда вы объявляете миксин или функцию, которая принимает произвольные аргументы, получаемое значение — это специальный список, известный как список аргументов. Он действует как список, содержащий все переданные аргументы миксину или функции, с одной дополнительной особенностью: если пользователь передал аргументы с именами, к ним можно получить доступ как к карте, передав список аргументов в ###NON_TRANSLATABLE_42### функцию.

###NON_TRANSLATABLE_43###
###NON_TRANSLATABLE_44###
###NON_TRANSLATABLE_45###

© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/values/lists

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API