#css #arrays #svg #sass
#css #массивы #svg #sass
Вопрос:
Я использую SVG-иконки и создаю их с помощью следующего кода:
$icon-heart-white:get-colored-icon("heart", "#{$white}");
$icon-heart-primary:get-colored-icon("heart", "#{$primary}");
$icon-heart-secondary:get-colored-icon("heart", "#{$secondary}");
$icon-printer-white:get-colored-icon("printer", "#{$white}");
$icon-printer-secondary:get-colored-icon("printer", "#{$secondary}");
Как я могу минимизировать код с помощью массивов? Что-то вроде:
$icons: (
heart: (
white, primary, secondary
),
printer: (
white, secondary
)
);
Или, может быть, я могу расширить свой массив и функцию, которые я использую прямо сейчас:
$path: (
"heart": "<path fill-rule='evenodd' d='M8 2.748l-.717-.737C5.6.281 2.514.878 1.4 3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01L8 2.748zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143c.06.055.119.112.176.171a3.12 3.12 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15z'/>",
"printer": "<path d='M11 2H5a1 1 0 0 0-1 1v2H3V3a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2h-1V3a1 1 0 0 0-1-1zm3 4H2a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h1v1H2a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2h-1v-1h1a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1z'/><path fill-rule='evenodd' d='M11 9H5a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1zM5 8a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H5z'/><path d='M3 7.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0z'/>"
)
@function get-colored-icon($icon, $color) {
$string: "<svg viewBox='0 0 16 16' fill='" $color "' xmlns='http://www.w3.org/2000/svg'>" map-get( $path, $icon ) "</svg>";
$string: "url("data:image/svg xml," $string "")";
@return $string;
}
Извините, мой английский не настолько совершенен, надеюсь, вы понимаете мою проблему, спасибо за ваши решения.
Комментарии:
1. Использование циклов работает, только если есть какой-то ритм. Это сработало бы, но это был бы действительно несовершенный подход. Что не так со вторым решением? Добавьте
;
после закрывающей скобки карты, и это сработает.2. Конечно, «второе решение» работает, я использую его!!! (с
;
закрывающей скобкой после) Но я хочу сократить первую часть кода, используя другую функцию или массив.3. Это невозможно, как вы хотите уменьшить содержимое, с которым вы предоставляете функции для работы?