Система іконок з SVG-спрайтів, Веб-дизайн

Я завжди був прихильником шрифтів ікон. Багатьом сайтам дійсно необхідна система впорядкування іконок, і шрифти іконок пропонують чудову можливість.

І навіть якщо в IE версії 9 і вище нормально запрацюють вбудовані SVG та елементи для посилань, використання ікон залишається більш прогресивною практикою.

Насамперед, давайте розглянемо, як це працює.

Для того щоб працювати з іконками, можна створити папку з файлами .svg :

система

Це одна з найкрутіших речей у роботі з SVG — вони є вихідними файлами.

SVG-файли можуть бути кольоровими, чорно-білими, різних форм, розмірів, якими завгодно:

іконок

Ви можете через Illustrator (або іншу програму) зберегти їх як завгодно з усіма супутніми елементами:

Створення файлу .svg

Якщо ви захочете, ви можете зробити це вручну. Я так і зробив. Вам навіть не потрібно переглядати кінцевий файл. Просто назвіть його svg-defs.svg або якось у цьому роді.

У цьому файлі має бути лише тег з тегом (який просто означає, що ви визначаєте елементи для подальшого використання), а потім зв'язування тегів (група).

Кожен тег буде мати унікальний ідентифікатор, і включатиме повний маршрут до файлу, а також містити ще багато додаткових даних для кожної іконки:

Знову ж таки ви можете зробити це вручну, але це, звичайно, трохи трудомісткий процес. Фабріс Вайнберг створив плагін grunt-svgstore, який автоматизує цю процедуру.

За допомогою цієї команди ви можете встановити Grunt:

Перевірте, чи доступні всі завдання:

А потім задайте конфігурацію:

У вихідному файлі svg-defs.svg кожна іконка (незалежно від шляху та інших атрибутів)джерела. SVG файлу) полягає в тег з унікальним ідентифікатором, що включає префікс та ім'я файлу (без розширення .svg).

Підключення SVG у верхній частині документа

Підключається .SVG файл так:

Або будь-яким іншим способом на ваш розсуд.

Код повинен розміщуватись у верхній частині. На жаль, у Chrome є один баг, через який це не працюватиме. З цим ми розберемося пізніше.

Використання іконок у будь-якому місці

Тепер ви можете використовувати іконки скрізь(!), де вам подобається:

Переконайтеся, що ви використовуєте відповідні імена класів SVG для визначення розмірів:

Ура: ви можете задавати їх стилі (і стилі їх частин) за допомогою CSS

Одна з причин, чому мені дуже подобаються шрифти іконок, це те, що ви можете оформляти їх за допомогою CSS.

Ця техніка одного вікна, яка дозволяє нам робити все, що потрібно, і навіть більше цього:

  1. Ми можемо задавати стилі окремих частин;
  2. SVG має набагато більше елементів, якими ви можете керувати, таких як спеціальні фільтри та пензлі.

Інший спосіб: IcoMoon

IcoMoon , який відомий як інструмент для створення шрифтів іконок, насправді також надає фантастичні можливості створення SVG-спрайтів .

Після вибору необхідних шрифтів просто натисніть кнопку SVG внизу вікна програми, і на виході ви отримаєте набір елементів, у тому числі демо-сторінку, створену за допомогою вбудованого методу SVG :

svg-спрайтів

Підтримка браузерами

Що стосується підтримки браузерами, то тут зоною ризику є IE версії 8 і нижче, Safari 5 і нижче, IOS 4.3 та нижче та Android 2.3 і нижче.

Але якщо ви орієнтуєтеся на користувачів "двох останніх основних версій" -то, як правило, у переважній більшості браузерів SVG підтримуються.

Слід пам'ятати, що іконки можна використовувати як допоміжний елемент. В цьому випадку підтримка браузерами не має критичного значення.

Якщо це буде окремий основний елемент, без якого вміст сайту не може відображатись, це може стати проблемою.

Я міг би ще багато розповісти про підтримку іконок браузерами шрифтів. Однак, просто переконайтеся, що ви застосовуєте їх правильно.

Робити так буде набагато правильніше

В ідеалі ми маємо щось на кшталт наступного:

Це дійсно працює в деяких браузерах, тобто ви могли б не включати їх у верхній частині документа.

Це означає, що надсилатиметься додатковий HTTP-запит, але тоді ви можете більш ефективно використовувати кешування (не роздмухувати кеш документа).

При тестуванні Джонатан Ніл виявив, що для нормальної роботи в тег необхідно включати xmlns-атрибут:

Але навіть у цьому випадку іконки у будь-якій версії IE не підтримуються. Якщо ви не хочете змінити всі елементи , які виконують роботу, у .

Джонатан Ніл встановив і цей факт:

Його демо-версія тепер містить також метод, який формує Ajax-запит до вмісту і включає цей блок, який дозволяє обробляти заливки і в IE 9. Не так ефективно, а полізаливки.

Браузери сприймають як свого роду DOM:

веб-дизайн

Тепер ми можемо визначати, скажімо, конкретний

Але це впливатиме на всі об'єкти цього шляху. Ви могли б придумати щось на кшталт:

Але це не працює. Це виходить за межі DOM. В ідеалі потрібно використовувати селектор "hat":

Але в одних браузерах він не підтримується,інших не зрозуміло, як працюватиме, і чи працюватиме взагалі.

Мінуси шрифтів іконок

Векторна основа: нічия

Стилі через CSS: Стилі через CSS мають невелику перевагу перед SVG-спрайтами (орієнтовані частини, спеціальні елементи стилю SVG, такі як пензлі).

Збої в роботі : На перший погляд, SVG здається простим у роботі (якщо підтримується браузером).

Однак іноді з ними трапляються дивні речі. Наприклад, якщо ви використовуєте карту символів, як зі звичайними літерами, то при завантаженні шрифтів може статися збій, і ви отримаєте при виведенні багато випадкових символів.

Або застосовуєте картку «Для області приватного використання», і деякі браузери можуть повторно прив'язати їх до дійсно специфічних символів, таких як троянди, проте при повторній прив'язці можуть виникнути труднощі з відтворенням оригінальної структури.

Або ви захочете розмістити файли @font-face на CDN, але вони мають крос-основу, а Firefox ненавидить це. Таким чином, вам знадобиться власний сервер для коректного обслуговування крос-заголовків.

Але установки Nginx можуть підхопити їх неправильно. На жаль.

Семантика : Не має великого значення, але я все ж таки думаю, що використання для зображень має більше сенсу, ніж .

Може бути, хтось підкаже мені? Чи можемо ми / могли б ми додати елементу атрибут заголовка або щось таке?

Або елемент, який був би візуально захований?

Оновлення: елемент ми могли б надати. Або, можливо, елемент, використання якого описано в цій специфікації доступу SVG.

Простота у використанні: Інструменти типу Fontello та IcoMoon хороші для роботи зі шрифтами іконок, але використанняСпеціальна папка SVG , я думаю, ще простіше.

Переклад статті "Icon System with SVG Sprites" був підготовлений дружньою командою проекту Сайтобудування від А до Я.