Sass, использующий строку для вызова var

#sass

#sass

Вопрос:

Необходимо вызвать var по имени, которое построено. Вот что у меня есть

 $font-size-small:3rem;
$line-height-base:2rem;

$font-size-h1:1rem;
$font-size-h2:2rem;
$font-size-h3:3rem;
$font-size-h4:4rem;
$font-size-h5:5rem;
$font-size-h6:6rem;



@for $i from 1 through 6 {
    $tag: h#{$i};
    $var: font-size-h#{$i};
    $sized: (100% * $font-size-small / #{$var});

    #{$tag}.small, .#{$tag}.small, #{$tag} small {
        font-size: $sized;
    }
}
  

он выводит как

 h1.small, .h1.small, h1 small {
  font-size: 300% / font-size-h1;
}

h2.small, .h2.small, h2 small {
  font-size: 300% / font-size-h2;
}

h3.small, .h3.small, h3 small {
  font-size: 300% / font-size-h3;
}

h4.small, .h4.small, h4 small {
  font-size: 300% / font-size-h4;
}

h5.small, .h5.small, h5 small {
  font-size: 300% / font-size-h5;
}

h6.small, .h6.small, h6 small {
  font-size: 300% / font-size-h6;
}
  

но что мне нужно, так это

 h1.small, .h1.small, h1 small {
  font-size: 300% / 1rem;
}

h2.small, .h2.small, h2 small {
  font-size: 300% / 2rem;
}

h3.small, .h3.small, h3 small {
  font-size: 300% / 3rem;
}

h4.small, .h4.small, h4 small {
  font-size: 300% / 4rem;
}

h5.small, .h5.small, h5 small {
  font-size: 300% / 5rem;
}

h6.small, .h6.small, h6 small {
  font-size: 300% / 6rem;
}
  

Я не нахожу ничего, что не использует map. Проблема в том, что существует множество целых стилей, которые являются ссылочными, ____-6 где это 6 будет похоже на 1-6. Так почему бы просто не создать имя var и не вызвать его.

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

1. Почему вы используете $var inside $sized , если вам не нужно его значение? Чтобы получить результат, который вам нужен, используйте $i вместо $var этого : $sized: (100% * $font-size-small / #{$i}); . font-size: size / size В противном случае недопустимый синтаксис в CSS

2. Отличный вопрос, если вы добавите единицу, это не сработает. Вот почему у них есть единицы измерения rem . Мне нужно вызвать var со строкой его имени, как и в большинстве других языков. Родственник JS, где var test="foo" может быть вызван window[ "f" "00" ] . Я подчеркиваю, что это строка с этим объединением

Ответ №1:

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

SASS

 $font-size-small: 3rem;
$line-height-base: 2rem;

$map:(
font-size-h1: 1rem,
font-size-h2: 2rem,
font-size-h3: 3rem,
font-size-h4: 4rem,
font-size-h5: 5rem,
font-size-h6: 6rem
);

@function strip-unit($number) {
    @return $number / ($number * 0   1);
}

@for $i from 1 through 6 {
    $tag: h#{$i};
    $var: map-get($map, font-size-h#{$i});
    $sized: (100% * strip-unit($font-size-small) / #{$var}  );

    #{$tag}.small, .#{$tag}.small, #{$tag} small {
        font-size: $sized;
    }
}
  

Вывод

 h1.small, .h1.small, h1 small {
  font-size: 300% / 1rem;
}

h2.small, .h2.small, h2 small {
  font-size: 300% / 2rem;
}

h3.small, .h3.small, h3 small {
  font-size: 300% / 3rem;
}

h4.small, .h4.small, h4 small {
  font-size: 300% / 4rem;
}

h5.small, .h5.small, h5 small {
  font-size: 300% / 5rem;
}

h6.small, .h6.small, h6 small {
  font-size: 300% / 6rem;
}
  

PS: Я настаиваю на том, что синтаксис for font-size в CSS неверен.

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

1. 🙂 да font-size , это неправильно, я ленился, лол.. Проблема в том, что на этом пути есть много переменных, которые имеют эту схему имен, поэтому я хотел иметь возможность просто получить любой или все, что, скажем, заканчивается на «-h1» . В принципе, как мне получить доступ к основному списку. У меня есть идея ее создания, но я не хочу создавать программу из файлов scss, lol