mefody.dev
5.35K subscribers
17 photos
1 video
3 files
475 links
Доброжелюбный бородач про фронтенд, тимлидство, спикерство.
Автор — @dark_mefody

Канал про работу: @mefody_work.

Не размещаю рекламу в своём канале. Даже за деньги. Даже большие.
Download Telegram
Калькулятор метрик шрифта для font-size-adjust

Есть такое замечательное и мощное свежее свойство для шрифтов, font-size-adjust. Оно позволяет задавать отношение некоторого размера из свойств шрифта к самому размеру шрифта.

Попробую объяснить на примере:
• Допустим, у вас есть шрифт Roboto.
• Его прописные буквы по высоте составляют 0.713 от размера шрифта.
• Его строчные буквы по высоте составляют 0.531 от размера шрифта.
• Получается, если размер шрифта — 72px, то cap-height будет 51.336px, а ex-height — 38.232px.

Теперь, если вам нужно на момент загрузки шрифта Roboto показать фолбек системным шрифтом, вы можете написать font-size-adjust: ex-height 0.531 — и строчки после загрузки прыгать не будут. Или если в одной строке нужно показать два разных шрифта зачем-то, то тоже можно сделать красиво.

Откуда я взял числа для вычислений? По ссылке ниже. Простая страничка, работает сугубо на клиенте. Загрузили шрифт — получили метрики. Удобно. Вот бы ещё PWA из неё собрать — вообще счастье было бы.

https://clagnut.com/sandbox/font-size-adjust.html
🔥426❤‍🔥3👍1🌚1
Под капотом нового фронтенда MDN

Если вы всё ещё читаете актуальную документацию на MDN, а не просите совсем всё делать вашу LLM («Вы, чего, и конфеты за меня есть будете?»), то могли заметить, что у MDN обновился фронтенд: типографика, иконки, стили. На самом деле, это произошло ещё в августе прошлого года.

В статье Лео МакАрдл рассказывает, что скрывается под капотом у этого нового фронтенда. Интересно почитать, как устроен самый популярный портал с документацией для веб-разработчиков.

• Много веб-компонентов. Простых и сложных. С хорошими примерами, как их применять в современном фронтенде.
• Rspack для сборки. Свежатинка на замену Webpack. Значительно улучшился DX.
• Мощная кроссбраузерность. Потому что не могут выдать «прастити, Safari не поддерживаем». Но при этом с опорой на Baseline.
• Markdown для контента. Который потом сложно, но интересно превращается в полноценные страницы с обвязкой.
• Современный CSS там, где он уместен. Видел, как pepelsbey использовал нативную вложенность селекторов в пулл-реквестах.
• Интерактивные демки на многих страницах.
• Всё это лежит на GitHub, то есть можно подсмотреть и вдохновиться.

https://developer.mozilla.org/en-US/blog/mdn-front-end-deep-dive/
157👍16🎉7
CSS-анимации как state-машины

В свежем выпуске «Веб-стандартов» обсуждали крайне интересную статью от Патрика Бросета про то, как использовать анимации для хранения истории работы со страницей.

Простая задача: если пользователь наводит мышку на элемент сейчас или наводил в прошлом, хранить это знание и использовать для каких-нибудь полезных визуализаций. На JavaScript такое делается просто. А вот если на чистом CSS?

Решение потрясающее:


.track-hover {
--was-hovered: false;
animation: track-hover .00001s linear forwards paused;
}
.track-hover:hover {
animation-play-state: running;
}
@keyframes track-hover {
to { --was-hovered: true; }
}


Если не до конца понятно, что здесь происходит, почитайте объяснение в статье. Или послушайте подкаст. Но само по себе такое решение рядом с container queries и нативными if в CSS позволяет добавить в вёрстку новый слой: не только текущее состояние страницы, но и прошлое, влияющее на настоящее.

https://patrickbrosset.com/articles/2026-03-09-using-css-animations-as-state-machines-to-remember-focus-and-hover-states-with-css-only/
🔥27🤯163👍2🥴2❤‍🔥1
Выбор диапазона дат на CSS

Если совсем уж честно, то не на чистом CSS, в этом особого смысла нет. Клики всё-таки обрабатываются небольшим скриптом. Но пример в статье довольно компактный и даже, вроде как, доступный.

Основная магия спрятана здесь.


.isRangeSelected {
:nth-child(1 of :has(:checked)) ~ :not(:nth-child(2 of :has(:checked)) ~ li) {
background-color: rgb(228 239 253);
}
}


Селектор :nth-child(N of .selector) позволяет выбирать подмножество в списке детей. Это открывает приятные возможности по стилизации сложных списков, WYSIWYG-текста и в прочих случаях. Например, вы можете стилизовать каждый второй параграф p в тексте, где между параграфами есть заголовки.

В статье же интересный лакончиный пример того, как подсветить даты, которые расположены между двумя выбранными чекбоксами.

https://css-tricks.com/selecting-a-date-range-in-css/
🔥28🤔4❤‍🔥2👍21
Forwarded from mefody.work
Какие метрики интересны бизнесу, какие – вам, а какие – никому

Видео выходного дня.

Полторы недели назад на Podlodka Teamlead Crew читал доклад про то, как выстроить систему метрик, которая будет не бесполезна, а вести к каким-то результатам. Андрей Смирнов пригласил поделиться опытом, а у меня как раз давно было желание систематизировать знания по различным подходам.

Вообще тема, конечно, не самая простая. Универсальных советов попросту нет. Несмотря на то, что я попытался в докладе раскрыть тему, как почти любую метрику привязать к самому важному для бизнеса (деньгам), днём ранее Серёжа Попов в своём докладе совершенно справедливо заметил, что не всегда так нужно делать.

Но одну мысль хочу закрепить: метрики должны помогать достигать результатов, а не мешать людям работать.

https://youtu.be/cNhIeA8ZG6o
17👍5🔥2🎉1🌚1
Никогда больше не теряйте заполненные формы

Аарона Густафсона, видимо, сильно достало, что иногда заполняешь форму, нечаянно уходишь со страницы (внезапный переход назад из-за скролла по тачпаду, нетерпеливый Cmd+W, игривый кот прошёлся по клавиатуре) — и всё, заполняй заново.

Поэтому он собрал веб-компонент form-saver, который сохраняет всё в localStorage и восстанавливает поля формы, если вдруг случилась перезагрузка. Забирайте, если вам такое нужно.

https://www.aaron-gustafson.com/notebook/never-lose-form-progress-again/
2👏2510👍9🌚3🔥1
<input>, слайды доклада

Только что прочитал на Dump доклад про тег <input>. Напомню, в 2019 году у меня был доклад <a>, в 2020 — <img>. Самое время обновить список.

Пока готовился, узнал пару новых интересных фактов. Имхо, самый сложный и неоднозначный тег в HTML.

Прикладываю слайды. А когда появится видео, выложу и его сюда.

https://mefody.dev/talks/input/
🔥42👍2711❤‍🔥4
Scroll-Driven Animations

Джош Комо продолжает радовать нас интерактивными уроками по крутым возможностям современного веба. На этот раз он добрался до анимаций, привязанных к скроллу. Это когда на экране что-то двигается и появляется по мере того, как пользователь скроллит страницу.

Напомню, в 2026 вполне себе можно использовать Animation Timeline API для таких задач, чтобы не тянуть на клиент жирные библиотеки. Для Firefox пока придётся подключить полифил, но он есть.

https://www.joshwcomeau.com/animation/scroll-driven-animations/
30👍8
Горячий код в V8

Настя Котова у себя в телеграм-канале продолжает разбираться в глубинах Node.js и V8. В этот раз задалась интересным вопросом: что же такое «горячий код» для V8? Один и тот же код может превращаться в итоге в разные инструкции внутри движка, причём скорость выполнения этих инструкций тоже может значительно отличаться. Потому что на старте он «холодный», а чем больше движок собирает статистики про выполнение, тем лучше может его оптимизировать.

В этом полезно разбираться:
• если вы пишете бенчмарки и удивляетесь, почему они каждый раз выдают разные результаты;
• ваш проект дошёл до стадии оптимизации производительности на уровне подстраивания под движок (может быть важно на высоконагруженных проектах);
• при работе с облачными функциями (вопрос денежки);
• для общего развития.

https://telegra.ph/Goryachij-kod-v-V8-chto-ehto-znachit-04-05
👍154🔥3
Много маленьких страниц

Джим Нильсен делится интересной идеей под названием LLMs — (L)ots of (L)ittle ht(M)l page(S). Суть в том, чтобы почти не использовать JS, отказаться от SPA, а каждый экран сделать маленькой страницей. Да, каждая модалка или таблица с фильтром — отдельная страница.

В статье разбирается паттерн меню. Кликаешь на бургер — открывается страница с меню. Жмёшь на крестик — тут уже JS делает history.back(), небольшое читерство.

Сначала ощущается такой подход странно. Крайне непривычно. Но спустя какое-то время мне идея всё-таки приглянулась.

Всё упирается в то, чтобы изначально UX продумать так, чтобы каждое действие и было отдельным экраном. Если присыпать это всё CSS View Transitions, сделать лёгкие кэшируемые страницы только с необходимым, то работать ведь будет быстро. Добавим сюда сервис-воркеры и Speculation Rules API — можно добиться ощущения мгновенности. Для статических сайтов — ну очень хорошо.

https://blog.jim-nielsen.com/2026/small-html-pages/
😐2411👍8🌚51🤔1🎉1💯1
История ffmpeg

Видео невыходного дня. Интересный ресёрч на тему того, как небольшая опенсорс библиотека стала основой для огромного числа других проектов. И какие люди за этим стоят. Если что, вы пользуетесь ffmpeg каждый день, даже если не знаете про это.

https://youtu.be/Ww8MzcBJUd4
💯2216👍14🔥4
Анимированный фокус на View Transitions

Думаю, вы видели такой паттерн, когда кольцо фокуса (обводка, которая рисуется вокруг сфокусированных элементов интерфейса) перемещается по странице плавно, с анимацией. Не резко перескакивает, как это делает браузер, а аккуратно перетекает. Для такого часто используются JS-библиотеки, которые играют в «угадай координату» и двигают по сути абсолютно спозиционированный элемент по странице.

Крис Койер пробует сделать версию попроще. Пускай во время перехода фокуса включается View Transition: включаем новое кольцо на новом элементе, старое выключаем, запускаем анимацию. Звучит интересно, и кода требует прям мало.

К сожалению, сделать хорошо не получилось:
• Во-первых, в единственном более-менее рабочем решении пришлось расставить дочерний span в каждом интерактивном элементе. А хотелось бы вёрстку не править.
• Во-вторых, управление фокусом идёт на уровне JS, а это уже риски что-то не учесть (браузер умеет это лучше, не пытайтесь его имитировать).
• В-третьих, если текст ссылки содержит перенос (то есть находится на двух строках сразу), то визуально всё неприлично разломано.

В комментариях к статье приложили демку с решением на Anchor Positioning. Там проблемы похожие, хотя лишний span уже не нужен, и это радует.

В общем, присмотреться к способу двигать что-то анимированно по странице новыми апишками точно стоит. А вот применять такое к фокусу — лучше не надо, рендеринг текста сложнее, чем просто коробочка с буквами. К сожалению, тут я скорее за то, чтобы использовать JS-библиотеки, проверенные временем.

https://frontendmasters.com/blog/animating-focus-with-view-transitions/
👍7🥴4💔42🤨2
От React к нативному вебу с nanotags

Отличное применение принципа «под каждую задачу — правильный инструмент».

Павел Гринченко на примере показывает, что для лендинга или маркетингового сайта не обязательно тащить увесистые фреймворки, которые придуманы для тяжёлых SPA с развесистой бизнес-логикой. Но да, для этого придётся разобраться в «новых» технологиях.

https://t.me/webstandards_ru/7729
👍9🥴8🤣5👏1😁1🌚1💯1💔1😐1
Chrome DevTools MCP CLI

Поигрался на выходных с Chrome DevTools MCP CLI — и мне понравилось.

Джоан Леон в статье рассказывает, что умеет инструмент. И показывает, как его можно подружить с различными полезными JS-сниппетами на примере WebPerf.

У меня был простой эксперимент: попросить LLM сделать аудит страницы, предложить улучшения по Core Web Vitals. Сначала без установки новой тулзы LLM использовала Playwright, Lighthouse, что-то покрутила, выдала результаты аудита. Затем с chrome-devtools-mcp повторила то же самое — аудит был куда подробнее и предложения более интересные.

Судя по логам, преимущество chrome-devtools-mcp в том, что он активно использует всевозможные Insights из Chrome DevTools. Playwright из-за своей универсальности не всем может поделиться. По токенам, кстати, вышло примерно одно и то же.

В общем, для задач, когда нужно на скорую руку сделать аудит страницы, chrome-devtools-mcp зашёл на ура. Оптимизировать, правда, я пока доверяю только своим мозгам — LLM-ки всё ещё творят какую-то дичь, когда дело касается современных API.

https://joanleon.dev/en/chrome-devtools-mcp-cli/
1👍19🔥5🎉1
Сжатие и растяжение

Джош Комо с очередным классным гайдом с демками. На этот раз — про анимации трансформации.

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

В демках в статье показывается, как такое можно сделать на SVG+CSS либо при помощи JS-библиотеки Motion. В обоих случаях получается вау-эффект.

https://www.joshwcomeau.com/animation/squash-and-stretch/
🔥221🤯1
Объединение мобильного и десктопного доменов

Тимо Тийхоф из MediaWiki (движок для Википедии) поделился интересным опытом объединения доменов [lang].wikipedia.org и [lang].m.wikipedia.org.

Когда-то давно было популярной практикой разделять мобильную версию и десктопную отдельными поддоменами. Мобильные телефоны были слабее, мобильный интернет был медленным, а про адаптивность ещё почти не говорили. Google-поиск эту историю поддерживал, автоматически выдавая верный поддомен в зависимости от того, с какого устройства пользователь искал.

В 2016 году Google изменил политику касательно отдельных мобильных версий, теперь правильнее делать единый домен, причём по принципу Mobile First. Раскатка была долгой, до Википедии дошли только в 2024 году.

Тимо рассказывает, как необходимость объединить домены повлияла на скорость загрузки, SEO и нагрузку на инфраструктуру.

https://techblog.wikimedia.org/2025/11/21/unifying-mobile-and-desktop-domains/
9👍3😁1
Оптимизация сайта для AI-ответов в Google-поиске

Гайд от Google по тому, что делать и что не делать, чтобы генеративный AI в выдаче поиска работал лучше.

Итак, пункты:
• Создавать полезный людям контент.
• Уникальность контента, своя точка зрения.
• Понятность текста.
• Качественные картинки и видео для визуализаций.
• Фокус на том, что хотят пользователи.
• Страницы должны не мешать краулерам их парсить.

То есть буквально ничего нового делать не нужно. Просто делаешь хороший и удобный сайт для пользователей — и внезапно он в попадает в AI-ответы. Только прикол в том, что если раньше нужно было как-то умудриться попасть в топ-10 поиска по целевым запросам, то теперь нужно попасть в топ-5 по смыслу запроса пользователя — конкуренция выросла.

Есть ещё раздел с разрушением мифов, он забавный. Например, LLMS.txt краулеру не нужен, он до этого десятилетиями как-то справлялся без отдельной версии под себя и норм.

Рекомендуют делать ставку на то, чтобы сайт был удобен агентам. Тут нужно дождаться Google I/O с их анонсами агентских фичей браузера, гуглбуков и прочих рекомендаций, как подстраивать свой бизнес под фичи одной конкретной корпорации.

https://developers.google.com/search/docs/fundamentals/ai-optimization-guide
👍6🙏5🥴2🐳1🌚1🤣1
What's new in Web UI

Заходите смотреть Google I/O, там через 3 минуты будут показывать новые браузерные фичи, которыми нам с вами потом пользоваться. Как бы мы в подкасте периодически не ругали Chrome за торопливость, на веб-индустрию они влияют значительно.

https://www.youtube.com/live/OQK9XHTiqVw
👍8🔥52🤣2🐳1🌚1
Улучшаем браузерное кэширование заголовком No-Vary-Search

Итак, вы оптимизировали браузерный перфоманс своего сайта. Но когда маркетологи запускают вокруг сайта разные акции, на мониторингах почему-то проседают метрики.

Дело в том, что в таких случаях часто к урлам дописывают что-то вроде ?utm_source=google. Для сбора метрик и конверсий. Такие параметры для браузера обозначают, что это абсолютно новая страница, её нельзя брать из кэша. Браузер ведь не знает, для метрики оно или для обработки на сервере и изменения контента.

Гарри Робертс рассказывает про заголовок No-Vary-Search, который решает эту проблему. Можно попросить браузер игнорировать конкретные параметры, все параметры или их порядок, чтобы брать страницу из кэша.

https://csswizardry.com/2026/05/better-browser-caching-with-no-vary-search/
🔥23🤯10👍4🥴2