Фронтенд дайджест #213 Лучшее за неделю Подкаст Цифровая т | FrontoWeek: Недельный дайджест [Фронтовик]
Фронтенд дайджест #213
Лучшее за неделю
Подкаст
Цифровая типографика унаследовала многие подходы из бумажной и за этим кроется несколько проблем, о которых и рассказал в своей статье Никита Прокопов — создатель шрифта Fira Code.
Во-первых, размер шрифта обычно задаётся не в пикселях, а в физических величинах, но на экране его размер будет зависеть не только от разрешения и плотности пикселей, но ещё и от операционной системы.
Во-вторых, размер задаёт не высоту шрифта, а кегль символа, который на самом деле не связан ни с одним из его физических параметров.
Что, по мнению автора, могло бы решить проблему, так это соответствие размера шрифта высоте заглавной буквы в пикселях, а размера межстрочного интервала — расстоянию между базовыми линиями строк.
Такой подход позволит отображать разные шрифты более консистентно, независимо от окружения пользователя.
В выпуске 122 я уже писал о свойствах text-edge и leading-trim которые должны будут решить эту проблему. А пока можно использовать Capsize — сервис для расчёта стилей под нужный шрифт.
[EN] Бесят сложные регулярки?
Этот плагин для ESLint поможет избежать распространенных ошибок в написании регулярных выражений, оптимизировать классы символов и упростить паттерны.
С полным списком правил можно ознакомиться в репозитории плагина.
[EN] Лия Веру поделилась лайфхаком, который позволит легко добавить поддержку тёмной темы в ваше веб-приложение.
Вместо переопределения каждого цвета, как советуют большинство мануалов по тёмной теме, Лия предлагает задать базовые цвета в формате HSL, где светлоту (L) определить через кастомное CSS-свойство.
Для тёмной же темы каждое такое свойство нужно будет переопределить по формуле 100% - начальное значение.
Однако, у HSL воспринимаемая яркость неоднородна, поэтому достичь лучшего результата, изменяя только светлоту, может быть затруднительно.
Эту проблему решил бы формат LCH, но его поддержка пока есть только в Safari Technology Preview 120+. Для конвертации RGB цветов в HSL и LCH можно воспользоваться онлайн утилитой.
[EN] Современным фронтендерам приходится заботится не только о производительности JavaScript но и о производительности CSS.
Поскольку браузер блокирует рендеринг до тех пор, пока весь CSS не загрузится, распарсится и обработается, самым первым шагом в оптимизации должна быть очистка от неиспользуемых стилей, минификация и сжатие.
Ещё лучше будет загружать критические стили, необходимые для отображения первого экрана, отдельно от остальных. А остальные уже грузить асинхронно.
Также стоит избегать импортов в CSS — они мешают параллельной загрузке
Для оптимизации страницы с анимациями, стоит анимировать только свойства translate, scale, rotation и opacity, чтобы не смещать контент и не вызывать кучу relayout.
С помощью свойства contain можно определить изолированные блоки, не влияющие на остальной контент страницы.
А чтобы кастомные шрифты не отображались при загрузке пустым местом, стоит использовать font-display: swap и уменьшать размер шрифтов, например используя вариативные шрифты.
Но вот о чем стоит беспокоиться в последнюю очередь — так это об оптимизации селекторов.
[EN] Сталкивались ли вы с проблемой, что из JavaScript нельзя выбрать псевдо-элемент (который создаётся через :before и :after), а, соответственно, и нельзя напрямую изменить его стили?
Нельзя, но если очень захотеть, то можно. Например, с помощью CSS-переменных.
Задаём через JS значение переменной и, благодаря каскадности, установленное значение применится на дочерние псевдо-элементы.
[EN] Какой минификатор кода лучше?
В этом репозитории собраны бенчмарки по размеру выходного бандла и по времени сборки для популярных минификаторов:
- babel-minify
- esbuild
- google-closure-compiler
- swc
- terser
- UglifyJS
По размеру бандла лидирует UglifyJS, а сразу за ним — Terser.
По скорости однозначным победителем стал esbuild, написанный на Go. Более-менее сравнимые результаты выдает swc — компилятор для TypeScript и JavaScript, написанный на Rust.
Я ни на что не намекаю, но теперь вы знаете, чем заняться на майских.