цвет в svg код
Заливка и обводка
Есть несколько способов раскрасить фигуры SVG (в т.ч. с указанием атрибутов объекта), используя инлайн-CSS, встроенную CSS-секцию, или внешний файл CSS. Большая часть SVG, которую вы встретите в интернете, использует встроенный CSS, однако преимущества и недостатки есть у каждого типа.
Атрибуты заливки и обводки (Fill and Stroke Attributes)
Раскраска (Painting)
Кроме того, вы можете задать прозрачность заливке и обводке по отдельности в SVG. Их прозрачность управляется атрибутами fill-opacity, stroke-opacity.
Обводка (Stroke)
Кроме цветовых свойств обводки, есть несколько атрибутов, управляющих способом обводки.
Есть три возможных значения для stroke-linecap:
В качестве аргумента атрибут stroke-dasharray принимает последовательность чисел, разделённых запятой.
Замечание: в отличие от путей, эти числа ДОЛЖНЫ быть разделены запятыми (пробелы игнорируются).
Также есть дополнительные stroke и fill свойства: fill-rule, которое определяет как будут заливаться сложные фигуры, которые имеют пересечения внутри себя; stroke-miterlimit, which determines if a stroke should draw miters и stroke-dashoffset, который указывает где начинается dash-array в линии (позволяет задать смещение пунктирной обводки относительно первоначального положения)
Использование CSS (Using CSS)
В дополнение к установке атрибутов объектов, вы также можете использовать CSS для стилизации заливки и обводки. Не все атрибуты могут быть установлены через CSS. Но атрибуты взаимодействия с раскраской и заливкой обычно доступны, так что fill, stroke, stroke-dasharray и т.д. могут быть заданы этим способом, также как и градиенты, и паттерны, что показано ниже. Атрибуты вроде width, height или команд для путей SVG не могут быть установлены через CSS. Проще всего просто протестировать и узнать, что доступно, а что нет.
CSS может использоваться инлайн через атрибут style :
Перемещение стилей в отдельную зону может сделать проще применение свойств к большим группам элементов. Вы также можете использовать вещи типа псевдоклассов наведения для создания эффектов переворачивания:
Также можно определить отдельный файл стилей для ваших CSS-правил через обычный XML-stylesheet синтаксис:
Делаем разноцветные иконки с помощью SVG-символов и CSS-переменных
Давно прошли те дни, когда для иконок в вебе использовались картинки и CSS-спрайты. С развитием веб-шрифтов номером 1 для отображения иконок на сайтах стали иконочные шрифты.
Шрифты — векторные, так что вам не нужно беспокоиться о разрешении экрана. Для них можно использовать те же CSS-свойства, что и для текста. В результате вы имеете полный контроль над их размером, цветом и стилем. Вы можете добавлять к ним эффекты, трансформировать или декорировать их. Например, повернуть ( rotate ), подчеркнуть ( underline ) или добавить тень ( text-shadow ).
Иконочные шрифты не идеальны, поэтому все большее число людей предпочитает использовать встроенные SVG-изображения. На CSS Tricks есть статья, где описаны моменты, в которых иконочные шрифты уступают SVG-элементам: резкость, позиционирование, сбои кросс-доменной загрузки, особенности браузеров и блокировщики рекламы. Сейчас вы можете обойти большинство этих проблем, что, в целом, делает использование иконочных шрифтов безопасным.
Да, еще одна вещь, которая абсолютно невозможна при использовании иконочных шрифтов: поддержка многоцветности. Только SVG может это сделать.
TL;DR: этот пост позволяет вникнуть в то, как и почему. Если вы хотите понять весь процесс, читайте дальше. В противном случае вы можете посмотреть окончательный код на CodePen.
Настройка символов SVG-иконок
Проблема встроенных SVG в том, что они сложны. Вы не хотите копипастить все эти координаты каждый раз, когда нужно использовать одну и ту же иконку. Получится повторяющийся, трудно читаемый и тяжело поддерживаемый код.
Использование SVG-символов позволяет иметь лишь один экземпляр каждого SVG-элемента и использовать его где угодно с помощью ссылки.
Полная разметка SVG-элемента пишется один раз и скрывается.
Получится точная копия вашей оригинальный SVG-иконки.
Вот она! Довольна милая, правда?
Вы вероятно заметили атрибут xlink:href — это и есть ссылка между вашей иконкой и оригинальным SVG-изображением.
Для безопасности используйте оба атрибута.
Добавление цвета
В отличие от шрифтов, свойство color не действует на SVG-иконки: необходимо использовать атрибут fill для указания цвета. Это значит, что они не наследуют родительский цвет текста, но вы все равно можете стилизовать их через CSS.
А следовательно, вы можете создавать другие экземпляры этой же иконки разных цветов.
Это работает, но это не совсем то, что мы хотим. Все, что мы сделали до сих пор, можно сделать и с помощью обычного иконочного шрифта. То, что мы хотим, — это сделать каждую часть иконки разного цвета. Мы хотим залить разными цветами каждую часть одной иконки, не изменяя другие ее экземпляры, и мы хотим, чтобы было возможно переопределять эти цвета при необходимости.
Сначала у вас может возникнуть идея положиться на специфичность.
И что нам тогда делать? Как мы можем повлиять на содержимое детей, когда говорят, что детей нет в DOM?
CSS-переменные помогут
CSS-переменные объявляются в наборах правил так же, как и любое другое свойство. Вы можете назвать их как хотите и присвоить им любое допустимое CSS значение. Затем вы определите через эту переменную значение свойства самого элемента или его ребенка, и оно будет наследоваться.
Теперь давайте применим эту концепцию для нашего SVG-символа. Мы будем использовать атрибут fill для каждой части path в определении нашей SVG-иконки и зададим им разные CSS-переменные. Затем мы назначим им разные цвета.
С этого момента все, что нам нужно для создания копии с другой цветовой схемой, это написать новый класс.
Свойство fill будет работать, потому что атрибут fill исходного SVG задан с неопределенными значениями CSS-переменных.
Как назвать мои CSS-переменные?
Проблема в том, что в нашем случае мы не можем применять атомные классы к элементам, которые хотим стилизовать. Принципы utility-first не применимы, так как у нас есть только ссылка для каждой иконки, а мы должны стилизовать ее через вариации классов.
По умолчанию или не по умолчанию
Заманчивая идея — сделать ваши иконки по умолчанию разноцветными. В этом случае вы сможете использовать их без дополнительной стилизации, и только в случае необходимости добавлять отдельный класс.
Добиться этого можно двумя способами: через :root или через var() default.
var() default
Установка значений по умолчанию может быть полезна, но это компромисс. Я предлагаю не привыкать к этому, и делать только тогда, когда это имеет смысл для конкретного проекта.
Как это все поддерживается браузерами?
CSS-переменные поддерживаются всеми современными браузерами, но, как вы вероятно догадались, IE не поддерживает их, совсем. Даже IE11, и поскольку его развитие было прекращено в пользу Edge, нет никаких шансов, что он когда-либо будет их поддерживать.
Но только из-за того, что переменные не работают в браузере, который вам нужно поддерживать, не значит, что вы должны полностью от них отказаться. В таких случаях используйте graceful degradation: предлагайте разноцветные иконки современным браузерам, а для старых указывайте запасной цвет.
Все, что вам нужно сделать, — это добавить определение цвета, которое будет работать только, если CSS-переменные не поддерживаются. Этого можно добиться, указав свойству fill резервный цвет. Если CSS-переменные поддерживаются, это объявление не будет учтено. Если же это не так, оно сработает.
Теперь можно определять цветовые схемы, не беспокоясь о поддержке браузеров.
Передача CSS-переменных в mixin через @content необязательна. Если вы сделаете это снаружи, скомпилированный CSS будет таким же. Но может быть полезно держать все это в одном месте.
Вы можете проверить этот пример в разных браузерах. В последних версиях Firefox, Chrome и Safari последние две чашки будут соответственно красной с серым паром и синей с серым паром. В Internet Explorer и Edge ниже 15 версии третья иконка будет вся красная, а четвертая — вся синяя.
Нативный способ покрасить SVG-иконки
Когда вам нужна возможность менять цвет иконок через CSS, что вы делаете? Вариантов не так много.
Обычно используются либо шрифты иконок, либо исходный код SVG скачивается и вставляется в HTML вручную. Шрифт нужно оптимизировать, иначе пользователь загрузит разом все иконки без надобности. Работа с исходным кодом требует тяжелых DOM-операций и потенциально опасна.
Чтобы защититься от вредоносного кода SVG нужно «почистить». Встроенный в Angular санитайзер, к примеру, не работает с SVG и превращает их в пустую строку. Можно воспользоваться проверенным инструментом DOMPurify и подключить его с помощью нашей библиотеки ng-dompurify, о чем я подробно рассказывал.
Давайте посмотрим на еще один способ, доступный в современных браузерах, — тэг USE.
Чем нам полезен USE?
Этот тэг задуман для переиспользования символов и целых SVG-блоков на странице. Но в современных браузерах (прости, IE) он может даже доставать внешние ресурсы!
Внешние SVG должны быть на том же домене, так что CDN не подойдет. Пока.
Сначала в каждой иконке нужно сделать символ с уникальным id и переместить viewBox в него.
Когда наши иконки подготовлены, остается только скинуть их в папку assets и использовать:
Компонент именованных иконок для Angular
Писать путь и обращаться к символу каждый раз утомительно. Давайте сделаем Angular-компонент, который будет находить иконки по имени. С помощью Dependency Injection это сделать очень просто.
Сделаем stroke и fill прозрачными для использования нескольких цветов в CSS:
Заключение
У этого подхода есть ограничения — отсутствие поддержки IE и кросс-доменности. Однако, если они для вас не критичны, данное решение может стать хорошей альтернативой другим способам.
Вам не придется включать иконки в бандл приложения или скачивать их запросами. Вы можете положиться на кэш для ускорения загрузки, а отсутствие DOM-операций делает этот подход быстрее и безопаснее ручной вставки исходников. Всем ярких решений!
Цвета HTML
Одной из составляющих представления веб-страниц в интернете является цвет, современные браузеры принимают и воспроизводят его, используя цветовые модели RGB, HSL, или же ключевые слова (названия).
Значения цвета в HTML может быть задано одним из следующих способов.
Имена цветов CSS, SVG.
В отличие от Html, в котором стандартными являются 16 цветов, спецификации CSS и SVG, определяют более расширенный список имен, состоящий из 147 названий. Однако, несмотря на наличие в списке сто сорока семи наименований, оригинальные значения имеют только 138, так как все серые цвета могут быть указаны как через «a», так и через «e» (grAy или grEy), а fuchsia и aqua имеют альтернативные имена: magenta и cyan соответственно (последние не поддерживаются HTML 4.01).
Приведенная ниже таблица представляет имена цветов и их значения в HSL и HEX. При использовании имен, следует помнить, что синтаксис SVG отличается от HTML и CSS: атрибут fill, к примеру, применяется как к цвету текста (color), так и объекта (background-color), а stroke используются для задания контура (обводки) элемента.
Имя | R G B | H S L |
---|---|---|
white | #ffffffhex | 0°, 0%, 100% |
ivory | #fffff0hex | 60°, 100%, 97% |
lightyellow | #ffffe0hex | 60°, 100%, 94% |
yellow | #ffff00hex | 60°, 100%, 50% |
snow | #fffafahex | 0°, 100%, 99% |
floralwhite | #fffaf0hex | 40°, 100%, 97% |
lemonchiffon | #fffacdhex | 54°, 100%, 90% |
cornsilk | #fff8dchex | 48°, 100%, 93% |
seashell | #fff5eehex | 25°, 100%, 97% |
lavenderblush | #fff0f5hex | 340°, 100%, 97% |
papayawhip | #ffefd5hex | 37°, 100%, 92% |
blanchedalmond | #ffebcdhex | 36°, 100%, 90% |
mistyrose | #ffe4e1hex | 6°, 100%, 94% |
bisque | #ffe4c4hex | 33°, 100%, 88% |
moccasin | #ffe4b5hex | 38°, 100%, 86% |
navajowhite | #ffdeadhex | 36°, 100%, 84% |
peachpuff | #ffdab9hex | 28°, 27%, 100% |
gold | #ffd700hex | 51°, 100%, 50% |
pink | #ffc0cbhex | 350°, 100%, 88% |
lightpink | #ffb6c1hex | 351°, 100%, 86% |
orange | #ffa500hex | 39°, 100%, 50% |
lightsalmon | #ffa07ahex | 17°, 100%, 74% |
darkorange | #ff8c00hex | 33°, 100%, 50% |
coral | #ff7f50hex | 16°, 100%, 66% |
hotpink | #ff69b4hex | 330°, 100%, 71% |
tomato | #ff6347hex | 9°, 100%, 64% |
orangered | #ff4500hex | 16°, 100%, 50% |
deeppink | #ff1493hex | 328°, 100%, 54% |
magenta, fuchsia | #ff00ffhex | 300°, 100%, 50% |
red | #ff0000hex | 0°, 100%, 50% |
oldlace | #fdf5e6hex | 39°, 85%, 95% |
lightgoldenrodyellow | #fafad2hex | 60°, 80%, 90% |
linen | #faf0e6hex | 30°, 67%, 94% |
antiquewhite | #faebd7hex | 34°, 78%, 91% |
salmon | #fa8072hex | 6°, 93%, 71% |
ghostwhite | #f8f8ffhex | 240°, 100%, 99% |
mintcream | #f5fffahex | 150°, 100%, 98% |
whitesmoke | #f5f5f5hex | 0°, 0%, 96% |
beige | #f5f5dchex | 60°, 56%, 91% |
wheat | #f5deb3hex | 39°, 77%, 83% |
sandybrown | #f4a460hex | 28°, 87%, 67% |
azure | #f0ffffhex | 180°, 100%, 97% |
honeydew | #f0fff0hex | 120°, 100%, 97% |
aliceblue | #f0f8ffhex | 208°, 100%, 97% |
khaki | #f0e68chex | 54°, 77%, 75% |
lightcoral | #f08080hex | 0°, 79%, 72% |
palegoldenrod | #eee8aahex | 55°, 67%, 80% |
violet | #ee82eehex | 300°, 76%, 72% |
darksalmon | #e9967ahex | 15°, 72%, 70% |
lavender | #e6e6fahex | 240°, 67%, 94% |
lightcyan | #e0ffffhex | 180°, 100%, 94% |
burlywood | #deb887hex | 34°, 57%, 70% |
plum | #dda0ddhex | 300°, 47%, 75% |
gainsboro | #dcdcdchex | 0°, 0%, 86% |
crimson | #dc143chex | 348°, 83%, 47% |
palevioletred | #db7093hex | 340°, 60%, 65% |
goldenrod | #daa520hex | 43°, 74%, 49% |
orchid | #da70d6hex | 302°, 59%, 65% |
thistle | #d8bfd8hex | 300°, 24%, 80% |
lightgray, lightgrey | #d3d3d3hex | 0°, 0%, 83% |
tan | #d2b48chex | 34°, 44%, 67% |
chocolate | #d2691ehex | 25°, 75%, 47% |
peru | #cd853fhex | 30°, 59%, 53% |
indianred | #cd5c5chex | 0°, 53%, 58% |
mediumvioletred | #c71585hex | 322°, 81%, 43% |
silver | #c0c0c0hex | 0°, 0%, 75% |
darkkhaki | #bdb76bhex | 56°, 38%, 58% |
rosybrown | #bc8f8fhex | 0°, 25%, 65% |
mediumorchid | #ba55d3hex | 288°, 59%, 58% |
darkgoldenrod | #b8860bhex | 43°, 89%, 38% |
firebrick | #b22222hex | 0°, 68%, 42% |
powderblue | #b0e0e6hex | 187°, 52%, 80% |
lightsteelblue | #b0c4dehex | 214°, 41%, 78% |
paleturquoise | #afeeeehex | 180°, 65%, 81% |
greenyellow | #adff2fhex | 84°, 100%, 59% |
lightblue | #add8e6hex | 195°, 53%, 79% |
darkgray, darkgrey | #a9a9a9hex | 0°, 0%, 66% |
brown | #a52a2ahex | 0°, 59%, 41% |
sienna | #a0522dhex | 19°, 56%, 40% |
yellowgreen | #9acd32hex | 80°, 61%, 50% |
darkorchid | #9932cchex | 280°, 61%, 50% |
palegreen | #98fb98hex | 120°, 93%, 79% |
darkviolet | #9400d3hex | 282°, 100%, 41% |
mediumpurple | #9370dbhex | 260°, 60%, 65% |
lightgreen | #90ee90hex | 120°, 73%, 75% |
darkseagreen | #8fbc8fhex | 120°, 25%, 65% |
saddlebrown | #8b4513hex | 25°, 76%, 31% |
darkmagenta | #8b008bhex | 300°, 100%, 27% |
darkred | #8b0000hex | 0°, 100%, 27% |
blueviolet | #8a2be2hex | 271°, 76%, 53% |
lightskyblue | #87cefahex | 203°, 92%, 76% |
skyblue | #87ceebhex | 197°, 71%, 73% |
gray, grey | #808080hex | 0°, 0%, 50% |
olive | #808000hex | 60°, 100%, 25% |
purple | #800080hex | 300°, 100%, 25% |
maroon | #800000hex | 0°, 100%, 25% |
aquamarine | #7fffd4hex | 160°, 100%, 75% |
chartreuse | #7fff00hex | 90°, 100%, 50% |
lawngreen | #7cfc00hex | 91°, 100%, 4% |
mediumslateblue | #7b68eehex | 249°, 80%, 67% |
lightslategray, lightslategrey | #778899hex | 210°, 14%, 53% |
slategray или slategrey | #708090hex | 210°, 13%, 50% |
olivedrab | #6b8e23hex | 80°, 61%, 35% |
slateblue | #6a5acdhex | 248°, 54%, 58% |
dimgray, dimgrey | #696969hex | 0°, 0%, 41% |
mediumaquamarine | #66cdaahex | 160°, 51%, 60% |
rebeccapurple | #663399hex | 270°, 50%, 40% |
cornflowerblue | #6495edhex | 219°, 79%, 66% |
cadetblue | #5f9ea0hex | 182°, 26%, 50% |
darkolivegreen | #556b2fhex | 82°, 39%, 30% |
indigo | #4b0082hex | 275°, 100%, 26% |
mediumturquoise | #48d1cchex | 178°, 60%, 55% |
darkslateblue | #483d8bhex | 249°, 39%, 39% |
steelblue | #4682b4hex | 207°, 44%, 49% |
royalblue | #4169e1hex | 225°, 73%, 57% |
turquoise | #40e0d0hex | 174°, 72%, 57% |
mediumseagreen | #3cb371hex | 147°, 50%, 47% |
limegreen | #32cd32hex | 120°, 61%, 50% |
darkslategray, darkslategrey | #2f4f4fhex | 180°, 25%, 25% |
seagreen | #2e8b57hex | 147°, 50%, 36% |
forestgreen | #228b22hex | 120°, 61%, 34% |
lightseagreen | #20b2aahex | 177°, 70%, 41% |
dodgerblue | #1e90ffhex | 210°, 100%, 56% |
midnightblue | #191970hex | 240°, 64%, 27% |
aqua, cyan | #00ffffhex | 180°, 100%, 50% |
springgreen | #00ff7fhex | 150°, 100%, 50% |
lime | #00ff00hex | 120°, 100%, 50% |
mediumspringgreen | #00fa9ahex | 157°, 100%, 49% |
darkturquoise | #00ced1hex | 181°, 100%, 41% |
deepskyblue | #00bfffhex | 195°, 100%, 50% |
darkcyan | #008b8bhex | 180°, 100%, 27% |
teal | #008080hex | 180°, 100%, 25% |
green | #008000hex | 120°, 100%, 25% |
darkgreen | #006400hex | 120°, 100%, 20% |
blue | #0000ffhex | 240°, 100%, 50% |
mediumblue | #0000cdhex | 240°, 100%, 40% |
darkblue | #00008bhex | 240°, 100%, 27% |
navy | #000080hex | 240°, 100%, 25% |
black | #000000hex | 0°, 0%, 0% |
Для получения информации о других цветах и значениях в HEX, HEX8, RGB, RGB%, CMYK, HSL, HSV воспользуйтесь калькулятором цветов.