- Возможности оформления SVG
- Сайдбар
- Статьи
- Страницы
- Проекты
- Как изменить SVG иконку: атрибуты и CSS свойства
- В предыдущих сериях…
- Где взять inline код SVG-иконки
- Содержимое svg кода
- Теги
- Атрибуты
- Пример inline кода с атрибутами
- Интерактив по ховеру
- Пример inline кода, стилизация в CSS
- Заключение
- Подключаем SVG-иконку на сайт и меняем цвет через CSS
- В предыдущих сериях…
- Подключение через тег в html
- Иконки
- Подключение фона в .css
- Описываем svg-графику inline
- Заключение
Возможности оформления SVG
Внешний вид SVG-элементам можно задавать как с помощью CSS, так и с помощью SVG-фильтров, градиентов и паттернов — их можно прописывать элементам прямо в коде либо задавать также через CSS.
Стили и скрипты можно задавать внутри SVG-файла, но если мы хотим, чтобы одно и то же изображение в разных условиях выглядело по-разному — стили внутри файла не годятся — нужно, чтобы векторное содержимое было доступно для внешних стилей.
Из всех способов вставки SVG для этого подходят всего два: иконочный шрифт или инлайновый SVG в HTML (удобнее всего делать это через use ).
Какие стили оформления можно использовать для иконочных шрифтов? Можно задать цвет, добавить тени и анимацию:
Не так уж и много, по сравнению с возможностями обычного SVG.
Для SVG-изображений можно использовать SVG-градиенты и фильтры, например, размытие или тени. Также можно использовать в качестве обводки и заливки паттерны и изображения, а ещё можно красить отдельные части картинок и таким образом получать разноцветные иконки.
При вставке SVG через use иконки становятся доступны для стилей страницы, и всеми этими прекрасными возможностями можно управлять через внешний CSS.
Вот пример иконок с паттернами в качестве фона:
Пример немного диковат, но он хорошо показывает, что фоном может быть любая картинка. Паттерны заданы в коде страницы и подключены с помощью CSS.
Вот код деревянного паттерна:
pattern id="wood" width="400" height="400" patternUnits="userSpaceOnUse"> image xlink:href="//img-fotki.yandex.ru/get/6447/5091629.86/0_74298_17a84446_L.jpg" width="400" height="400"> pattern>
В паттерн можно класть всё что угодно: комбинации фигур, объекты с градиентами, текст. Правда, есть подозрение, что сложные фоны могут плохо влиять на производительность страницы, но тестов не делала.
Чтобы при наведении менять местами обводку и заливку, нужно добавить ещё пару строчек:
.icons--wood fill: url(#wood); > .icons--wood .icon:hover fill: none; stroke: url(#wood); >
Также можно делать интересные эффекты на основе обводки:
Обводки могут быть пунктирными, для них можно использовать градиент или паттерн.
/* Обычная обводка, по наведению меняет цвет */ .icons--stroke .icon stroke: rgba(0, 0, 0, .5); stroke-width: 2; &:hover stroke: skyblue; > > /* Пунктирная обводка, по наведению линия становится непрерывной */ .icons--dasharray .icon stroke: rgba(0, 0, 0, .5); stroke-width: 2; stroke-dasharray: 10 5; fill: rgba(0, 0, 0, .1); &:hover stroke-dasharray: 10 0; > > /* Обводка с градиентом */ .icons--gradient .icon stroke-width: 3; stroke: url(#stripes); >
Иконкам в последней строке в качестве обводки задан градиент, уходящий в прозрачность, почему-то не работает в последней опере.
С анимацией пуктирной обводки можно делать интересные штуки:
Нажмите Rerun если демо застыло.
Не уверена, что эта анимация подходит для иконок (будет не очень хорошо, если иконки будут шевелиться или исчезать), но она может быть использована для эффектно появляющихся иллюстраций.
path fill: none; /* В качестве обводки задан градиент */ stroke: url(#stripes); stroke-width: 2; /* Исходное состояние обводки — длинные черточки с нулевыми пробелами */ stroke-dasharray: 550 0; animation: dasharray 5s infinite alternate; > @keyframes dasharray 100% /* Черточки нулевой длины с длинными пробелами, линиия исчезнет */ stroke-dasharray: 0 500; > >
Следующий пример демонстрирует иконки с SVG-фильтрами:
Размытие, тень, повторяющийся контур и внутренняя тень (её не очень хорошо видно).
Конечно, размытие врядли подойдет для иконок, но с ним можно придумать разные другие интересные штуки.
У фильтров есть недостаток: результатом наложения фильтров является растровое изображение, из-за чего картинки утрачивают способность тянуться без потерь в качестве и хуже выглядят на экранах с ретиной.
UPD от 19 мая 2014: фильтры хорошо выглядят на ретине, при условии, что они задаются SVG-элементам, а не HTML. Прошу прощения за неточность.
В примере ниже SVG-изображение разделено на несколько путей, что дает возможность обращаться к ним поотдельности. Здесь это используется чтобы задать элементам разные цвета и задержки анимации. При этом в дальнейшем фигура (в данном случае это группа путей) может быть использована целиком — таким образом можно получить не только монохромные иконки, но и разноцветные. Правда, при вставке такого объекта через use в нем перестанет работать анимация, но раскраска сохранится.
В качестве заливки (или обводки) SVG-элементов удобно использовать сurrentColor . Это ключевое слово, обозначающее текущий цвет текста, и если задать его в качестве заливки (обводки) — элемент будет краситься вместе с окружающим текстом.
Если потом для родительского элемента задать цвет текста
фигура зальется этим же цветом. Очень удобно для ссылок по наведению и для страниц с несколькими темами оформления.
Интересно, что в SVG можно использовать далеко не все CSS-свойства, относительно полный список можно найти вот тут. Можно использовать animation , но transition работает странно и не во всех браузерах. CSS-градиенты использовать, к сожалению, нельзя. Трансформации работают.
Также перед использованием различных фильтров и эффектов нужно всегда проверять как они поддерживаются разными браузерами.
Из всего вышеизложенного можно сделать следующие выводы:
- самые широкие возможности для оформления дает инлайновый SVG;
- меньше возможностей, но более удобное подключение на страницу предоставляет иконочный шрифт. Существенный минус состоит в проблемах с поддержкой встраиваемых шрифтов в разных браузерах;
- если SVG-графика нужна только в одном стиле и нет необходимости управления через внешний CSS — лучше всего воспользоваться спрайтом.
Сайдбар
Статьи
- Математические функции в CSS
- Адаптивное видео с помощью встроенных математических функций CSS
- Недоступность в картинках
- Единицы размеров в CSS
- Генератор цветовых тем
- Jekyll → Gatsby
- Вариативные шрифты
- Размеры в SVG
- Адаптивный Pixel Perfect
- Логотип не отвечает или временно недоступен
- SVG-паттерны
- Мыльные пузыри на SVG
- SVG-градиенты
- Весёлая консолька
- SVG-маски
- Умная прокрутка со Scroll Snap Points
- CSS-анимации для ротации изображений
- Анимированные SVG-маски
- Странности обводки в SVG
- SVG-прелоадеры
- Анимируем градиенты ещё раз
- Background-blend-mode
- Возможности оформления SVG
- CSS и SVG маски
- Nth-child и nth-of-type
- SVG-иконки
- SVG: заливка и обводка
- SVG-path
- SVG: группировка и переиспользование элементов
- SVG-фигуры и трансформации
- SVG
- СSS-градиенты и 3D
- Рисовалка анимированных теней
- Свежие CSS-паттерны
- CSS-паттерны
- Радиальные градиенты
- Линейные градиенты
- Крестики-нолики на CSS
- Border-image
- Электронные часы на CSS и JS.
- Сколько весят селекторы?
- Символы юникода
- Свойство content
- Анимируем CSS-градиенты
- Текстовые эффекты
- Древовидный список на CSS
- Css-селекторы, часть 2
- Css-селекторы
- Контекст наложения
- Два способа «прошить» элемент по краю
- Box-sizing
- Цвета в CSS
- Фон под строчками: добавляем поля
- Box-shadow
- Css-фигуры: лепесток
- Transform
- Css Animation
- 3D-куб
- Border-radius
- First letter
- Эти глаза напротив
- CSS-фигуры
- Стрелки с помощью свойства border
- Flexbox
Страницы
Проекты
Как изменить SVG иконку: атрибуты и CSS свойства
HTML, CSS
В предыдущих сериях…
Сегодня будем работать с inline кодом, посмотрим, какие бывают атрибуты у тега . Разберем случай, почему может не работать смена цвета иконки, прописанная в файле CSS.
Где взять inline код SVG-иконки
Если вы скачали готовую графику в формате .svg, то этот файл можно открыть в любом редакторе кода и увидеть тот самый inline код. Как мы помним, векторная графика описывает изображение с помощью специальных формул для создания фигур. При этом используются тег (контейнер для хранения SVG графики), внутри которого помещается один или несколько тегов (для хранения координат прорисовки фигуры или части её). Этот код можно скопировать и вставить в html файл в том месте, где нужно расположить иконку.
Для примера возьмем иконку твиттера. Скопируем тег svg из файла иконки и вставим в HTML.
Содержимое svg кода
Итак, мы подключили иконку в формате svg inline, теперь рассмотрим код подробнее.
Так отобразится в браузере:
Пример inline кода
Теги
Мы видим тег и , у которого есть атрибут d с координатами точек на плоскости, по которым рисуется фигура. В данном случае тег один, изображение состоит из одной фигуры, но изображение может состоять из нескольких фигур — тогда будет несколько тегов .
Атрибуты
Перейдем к атрибутам тега
xmlns=»http://www.w3.org/2000/svg» — данный атрибут прописывает путь к стандарту svg, в котором описана эта иконка
viewBox=»0 0 512 512″ — указывает на ту область иконки, которую мы видим в браузере
class=»twitter-icon» — как и другим элементам, можно задать класс и стилизовать по нему в CSS файле
Теперь добавим некоторые атрибуты самостоятельно.
Пример inline кода с атрибутами
width=»256″ height=»256″ — при помощи этих атрибутов можно настраивать размер иконки
Атрибуты fill , stroke , stroke-width в SVG
Эти атрибуты можно применить к тегу и тогда они распространятся на всю иконку. А можно применить к отдельному — тогда они будут работать только в области, описанной в конкретном . В нашем случае иконка состоит всего из одного , поэтому без разницы, к чему применить данные атрибуты.
stroke=»green» — цвет обводки
stroke-width=»10″ — толщина обводки
Вот так мы переделали иконку при помощи атрибутов:
Пример inline кода с атрибутами
Интерактив по ховеру
При помощи CSS будем менять поведение иконки при наведении на нее курсором (по ховеру). Вернемся к изначальному коду без дополнительных атрибутов. Копируем класс иконки и стилизуем в файле CSS. Зададим свойство fill: blue; и далее по псевдоклассу :hover меняем на fill: rgb(145, 8, 199);
Пример inline кода, стилизация в CSS
/* Интерактив. SVG inline код. Смена цвета по ховеру */ .twitter-icon < fill: blue; >.twitter-icon:hover
Пример inline кода, стилизация в CSS
Этот прием будет работать только в том случае, если в html коде фигуры не прописан нигде атрибут fill=»» . Если вы работаете в CSS, то лучше убирать все атрибуты типа fill и stroke , чтобы не было путаницы. И переносить их в файл CSS в качестве свойств.
Заключение
Любой файл .svg можно открыть в редакторе кода. Сам код можно копировать и использовать в файле .html
Кастомизировать иконку можно при помощи атрибутов. Но создать интерактивность получится только при помощи стилизации в CSS файле. При этом важно следить за тем, чтобы контроль заливки или других свойств, которые будут меняться, происходил только в одном месте, в файле .css . В противном случае интерактив не заработает, так как значения атрибутов перебьют значения свойств.
Подключаем SVG-иконку на сайт и меняем цвет через CSS
HTML, CSS
В предыдущих сериях…
В прошлой статье мы выяснили, в чем отличие растровых форматов изображения от векторных. Теперь будем работать с векторной графикой. Для начала, научимся подключать эти изображения разными способами.
Возьмем стандартную папку с проектом, в которой есть отдельная папка для изображений, отдельная — для файлов .css , а также файл .html
Подключение через тег в html
Работаем как с обычной картинкой. Тег , атрибут src , прописываем путь к файлу. Можно использовать любые атрибуты , включая атрибут width .
Иконки
Подключение фона в .css
Можно подключить svg-графику в качестве фона элемента. Часто используются фоновые паттерны. Это небольшой фрагмент, впоследствии повторяющийся и создающий орнамент.
Укажите в html нужный класс и пропишите свойства фона background-image в файле css. Используйте функцию url() , чтобы задать путь к файлу с изображением.
/* SVG фоновое изображение */ .block-bg < width: 600px; height: 200px; background-image: url('./../img/bg-zigzag.svg'); >
Описываем svg-графику inline
Существуют специальные теги и атрибуты для описания графики прямо в коде. При этом, изображение становится интерактивным — мы можем, например, менять цвет, или размер по наведению на иконку.
Тег используется как контейнер для хранения SVG графики. При помощи тега и его атрибутов создается фигура. Посмотрите, как выглядит иконка YouTube в inline формате.
Стилизуем в файле .css по классу youtube-icon .
Будем менять цвет иконки по наведению при помощи свойства fill .
/* SVG inline код. Смена цвета по ховеру */ .youtube-icon < width: 64px; height: 64px; fill: black; >.youtube-icon:hover
Заключение
- Мы разобрали 3 стандартных способа подключения SVG-графики на сайт: тег , свойства CSS, тег .
- Узнали про то, как можно менять цвет SVG-иконки через CSS и свойство fill .
- В следующей статье продолжим работу с тегам , , разберем как можно ещё кастомизировать векторную графику.