htmlacademy / html2-basic-template

Gulp сборка: html, sass, stack, webp.
35 stars 223 forks source link

Замени генерацию символьного спрайта на стек #7

Closed firefoxic closed 1 year ago

firefoxic commented 1 year ago

Зачем? Чтобы не ограничиваться только вставкой в разметку svg>use, а иметь возможность свободно использовать иконки из стилей (преимущественно).

Обоснования:

firefoxic commented 1 year ago

Для справки

До недавнего времени я использовал для стека плагин gulp-svg-sprite, но этот монстр слишком огромный (😱 под 10МБ, EМНИП), и имеет свои странности, которые приходилось обходить хаками.

Предлагаемый gulp-stacksvg — мой форк заменяемого gulp-svgstore (потому что он лёгкий, и потому что автор сказал, что лучше форкнуть, чем пулреквестить это всё).

Кроме переписания с символов на стек попутно ещё и пофиксил несколько багов, убрал единственную и ненужную опцию и добавил три полезные опции. В том числе имя выходного файла: дефолт stack.svg, но можно без gulp-rename, поменять на любое другое.

Но важнее другая опция — склеивание (по дефолту символом _) путей до вложенных в подпапки иконок, то есть теперь студенты могут удобно группировать иконки не боясь повторений айдишников в ~спрайте~ стеке.

image

Так же плагин конвертирует width и height во viewBox, если того нет в файле иконки. Если же есть и размеры и viewBox — просто удаляет размеры. Особенно это актуально после работы svgo с дефолтным конфигом, в котором почему-то наоборот viewBox заменяется на размеры (есть ишья на исправление этого явно ошибочного дефолта, но ждать фикса видимо ещё долго).

nikolai-shabalin commented 1 year ago

@firefoxic , спасибо за столь подробное описание. Но это всё требует глубокого погружения. Прямо сейчас я этим заниматься не буду.

Для ускорения внедрения подскажи. Этот пакет меняет работу студента? Если студент будет работать как мы обучаем на курсе он почувствует сложности? Или этот пакет расширяет возможность использования спрайтов. Условно если студент захочет svg>use он сможет?

firefoxic commented 1 year ago

Этот пакет меняет работу студента?

Только избавляет от оков (кроме далее описанных преимуществ например ещё и даёт возможность иконки в подпапки объединять, что неудобно с gulp-svgstore, может возникнуть конфликт айдишников).

Если студент будет работать как мы обучаем на курсе он почувствует сложности?

Скорее упрощения. Даже если вручную собирать — это проще, в стеке даже теги svg на symbol менять не нужно. Только небольшой общий стиль добавить, ну и айдишники, без них никак. Так же плагин после svgo, который вьюбокс на размеры заменяет (что плохо), обратно меняет всё на вьюбокс (что правильно). То есть студенту об этом в настройках никак не надо заботиться и поведение иконок более ожидаемое будет.

Или этот пакет расширяет возможность использования спрайтов?

Да, расширяет. Стек можно использовать любым способом вставки изображения.

Условно если студент захочет svg>use он сможет?

Да, легко (см. ответ на предыдущий вопрос). Но лучше бы конечно отучать их от такого способа :)

firefoxic commented 1 year ago

Ещё одно отличие — на выходе спрайт называется stack.svg, что можно поменять, но я бы не стал, потому что специально сделал отличное от обычного имя файла, чтобы явно различить его от прочих sprite.svg, собранных из символов.

nikolai-shabalin commented 1 year ago

Отучать-то нужно, но это нужно править программу обучения и это явно не gulp-таска должна решать. Прямо сейчас все равно уже не успеется поменять программу. Поэтому таска не должна менять нвнешнюю работу студента.

Сейчас можно PR принять и в будущих потоках внедрить новую работу с спрайтами.

firefoxic commented 1 year ago

Это конечно не сразу. По началу можно просто сказать на ретро, что вот у вас сборка обновлённая и чуть поумнее, собирает спрайт так, что не обязательно use юзать, можно легко из стилей. И для желающих вникнуть (что не должно быть обязательным), можно давать мою статью-заметку про стек.

nikolai-shabalin commented 1 year ago

Да, я ещё углублюсь, но явно позже. Инфу добавлю в программу. Пока было важно, чтобы то, что есть не сломалось