HamSter007
@HamSter007
HTML/CSS верстальщик

Какой способ подключения svg на сайт все же оптимальный?

Есть несколько способов подключения svg на сайт, но так и не могу выбрать для себя лично оптимальный. Зачастую svg на сайте это иконки, стрелочки, галочки которые удобнее задавать в css в :after или :before фоновыми изображениями.

1. Встраивать прямо в код весь svg:

<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd"><path d="M21 6.285l-11.16 12.733-6.84-6.018 1.319-1.49 5.341 4.686 9.865-11.196 1.475 1.285z"/></svg>


Один большой минус - громоздкий html.

2. svg спрайт. Громоздкий html.

CDbnsiHGT_CscIqoxqg_Zw.png

3. Генерировать svg в font. такой способ больше всего нравится, потому что удобно манипулировать и html и css, но многие заказчики отказываются от такого способа, якобы svg получается размытым.

Вопрос: какой же все же способ подключения svg наиболее оптимальный, удобный, а главное качественный? Правда ли что генерация svg в фон дает размытый результат в некоторых браузерах (сафари, ios), потому как в основных современных браузерах недостатков не обнаружила?
  • Вопрос задан
  • 6347 просмотров
Решения вопроса 2
bootd
@bootd Куратор тега CSS
Гугли и ты откроешь врата знаний!
Я за 2й способ. Используя тег use вставляем id символа, а перед этим вставляем весь спрайт на страницу. Этого способа достаточно, что бы через css спокойно менять размеры, заливку. Чаще всего такой способ и нужен. Просто используя конструкции серверного языка, вставить содержимое на страницу. Я это делаю обычно перед тегом </body>

Можно каждую иконку вставлять svg кодом, как это делает github. Скорей всего на сервер у них есть какая-то функция, которая просто вставляет содержимое указанной иконки. На php можно просто использовать функцию include();

Можно просто собрать весь спрайт в 1 иконку и так же через тег use вставлять их на страницу, указываю путь к id символа:
<use xlink:href="/app/img/icons.svg#ico"></use>

Вставлять фоном можно, но я не рекомендую, т.к. теряется возможность изменять свойства через css. Про размытие слышу 1 раз.

Все из способов верные, с точки зрения спецификации. Но с последним способом у меня были проблемы. Иногда иконка не отображалась, в IE вообще так не выводятся, но это его не доработка.

Вот видосик, для большего понимания https://www.youtube.com/watch?v=TNX0-JLdM_U
Ответ написан
Вопрос: какой же все же способ подключения svg наиболее оптимальный, удобный, а главное качественный?

Оптимального не существует, все зависит от конкретной задачи. Для спрайтов и иконок я предпочитаю инлайновый svg - да, это увеличит html на десяток килобайт, но не критично, gzip наше все. Зато это дает огромную гибкость в управлении иконками и их стилизации. Забейте на громоздкий html - сейчас ситуация такова, что в любом случае приходится чем-то жертвовать, идеальных технологий нет. Поэтому нужно выбирать - красивый html или гибкость в управлении. Используя же систему сборки + шаблонизатор вроде pug, вы вообще с html не будете иметь дела.

Для отдельных изображений сподручнее применять отдельные же svg-файлы. Для простых иконок, с которыми априори не нужно никаких манипуляций, можно использовать фоновый svg.

Как вариант, можно захардкодить стили (анимацию там, эффекты) прямо в svg - это нормально, ведь адаптивность для svg только так и можно сделать. Тогда вы сможете сохранить нехилую долю возможностей вкупе с изящной реализацией, подключая svg к странице посредством, например, fragment identifiers.

Генерировать svg в font - это костыль. Нормально, если шрифт генерируется в формат svg, но если спрайт генерируется в font, то это уже извращения. Кроме того, браузеры по-разному рендерят решения на основе данного подхода, что снижает качество продукта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 нояб. 2024, в 03:35
5000 руб./за проект
06 нояб. 2024, в 00:20
1000 руб./за проект
06 нояб. 2024, в 00:03
40000 руб./за проект