Использование подстановочного знака в качестве значения

#css #sass

Вопрос:

Есть ли способ использовать подстановочный знак, чтобы записать все эти двадцать правил как одно:

 .margin-bottom-1rem {
  margin-bottom: 1rem;
}

.margin-bottom-2rem {
  margin-bottom: 2rem;
}

...

.margin-bottom-20rem {
  margin-bottom: 20rem;
}
 

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

Комментарии:

1. Используйте этот селектор *[class^="margin-bottom-"] для выбора элементов. Примечание: приоритет низкий. Невозможно извлечь значение ..rem имени класса. Для этого используйте Javascript.

2. Нет. Даже при использовании SCSS/LESS и т. Д. CSS все равно будет компилироваться по полному набору правил. предварительный процессор просто облегчает написание кода.

Ответ №1:

SCSS

 $sizes: 1rem, 2rem, 5rem, 10rem, 20rem;

@each $size in $sizes {
  .margin-bottom-#{$size} {
    margin-bottom: $size;
  }
}

 

нахальство

 $sizes: 1rem, 2rem, 5rem, 10rem, 20rem

@each $size in $sizes
  .margin-bottom-#{$size}
    margin-bottom: $size

 

Оба производят это:

 .margin-bottom-1rem {
  margin-bottom: 1rem;
}

.margin-bottom-2rem {
  margin-bottom: 2rem;
}

.margin-bottom-5rem {
  margin-bottom: 5rem;
}

.margin-bottom-10rem {
  margin-bottom: 10rem;
}

.margin-bottom-20rem {
  margin-bottom: 20rem;
}
 

Сделайте что-нибудь для каждого элемента

https://sass-lang.com/documentation/values/lists#do-something-for-every-element

Комментарии:

1. Ах, петли! sass-lang.com/documentation/at-rules/control/for

2. Это ответ на ваш вопрос?