Уменьшить количество CSS, генерируемого функцией SASS - PullRequest
0 голосов
/ 28 октября 2019

Я очень плохо знаком с (я полагаю) более продвинутыми функциями SASS. Ссылка на эту статью. Мне удалось создать настройку SASS, которая позволит мне легко создавать темы в темном режиме! Однако я хотел бы уменьшить количество создаваемого им CSS-кода и узнать, достиг ли я предела своих знаний или только на что способен SASS / CSS.

У меня есть эта карта"themes":

$themes: (
  light: (
    primaryOne: #f0f,
    primaryTwo: #0ff
  ),
  dark: (
    primaryOne: #000,
    primaryTwo: #111
  )
);

У меня есть следующие миксины / функции, которые были в основном взяты из статьи:

@mixin themify($themes: $themes) {
  @each $theme, $map in $themes {
    $theme-map: () !global;
    @each $key, $submap in $map {
      $value: map-get(map-get($themes, $theme), '#{$key}');
      $theme-map: map-merge($theme-map, ($key: $value)) !global;
    }

    @if $theme == dark {
      @media (prefers-color-scheme: dark) {
        @content;
      }
    } @else {
      @content;
    }

    $theme-map: null !global;
  }
}

@function themed($key) {
  @return map-get($theme-map, $key);
}

И, наконец, собственный миксин и класс, в котором я его использую. :

@mixin set-color-primary {
  @include themify($themes) {
    color: themed('primaryOne');
  }
}

.foo-container div {
  @include set-color-primary;
}

Наконец это генерирует CSS следующим образом:

.foo-container div {
  color: #f0f;
}

@media (prefers-color-scheme: dark) {
  .foo-container div {
    color: #000;
  }
}

Я надеялся, что смогу выжать еще несколько строк и получить что-то похожее на:

.foo-container div {
  color: #f0f;
  @media (prefers-color-scheme: dark) {
    color: #000;
  }
}

Это ограничение моего знания SASS или это невозможно в простом CSS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...