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

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

Не размещаю рекламу в своём канале. Даже за деньги. Даже большие.
Download Telegram
Красивый Select

Адам Аргайл выкручивает современные возможности CSS на максимум вокруг appearance: base-select. Напомню, в Chrome уже можно стилизовать выпадушки при помощи CSS, не создавая полную копию на дивах и спанах. А другие браузеры в целом смотрят позитивно на эти эксперименты и готовы в будущем подтянуть себе реализацию по более устаканившимся спецификациям.

В демках продумано так много мелочей, что обязательно как почитайте статью с объяснениями, так и поковыряйтесь в исходном коде. Там всё ещё нужен JS для выравнивания выбранной опции по клику, но и без него работает нормально, если просто прибивать к верху или низу на манер тултипа, проверил.

https://nerdy.dev/nice-select
🔥3010👏7🤨2
Спрайты в вебе

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

Но интересно в демках показано, как можно ту же технику применять для анимаций внутри интерфейсов. Прямо поверх тега <img>. Сохранил в закладки.

https://t.me/webstandards_ru/7656
13🔥5
Смотрим и комментируем

Это не призыв, это название нового подкаста. Олег Мохов, широко известный в узких кругах, решил стартовать свой подкаст, где вместе со спикерами разбирает их же доклады по полочкам.

Приятно, что Олег доверил мне поучаствовать в пилотном эпизоде. Разбирали мой осенний доклад про шрифты и немного о жизни болтали. Приносите фидбек в комменты под оригинальным постом, чтобы помочь «молодому» подкастеру стать лучше или порадоваться успеху.

Хм. Получается, всё-таки призыв. Хорошее название.

https://t.me/teamleading/486
5👍11🥴62🔥2
Dictionary Compression. Здесь и невероятно хорош

Тим Перри рассказывает, что умеет новый способ экономить колоссальное количество трафика и как его подключить уже сегодня.

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

А что, если доставлять на клиент только diff, как при коммитах? Пусть старая версия бандла — это основа, клиент делится с сервером: «Смотри, у меня есть вот такая версия основы», а сервер отправляет на клиент только то, что нужно для построения новой версии бандла.

Больше всего удивился из статьи тому факту, что сама идея к нам могла прийти в пользование в вебе ещё в начале 2000-х, но в Internet Explorer и IIS был не совсем верно реализован алгоритм deflate, а потом в 2012 случился казус с уязвимостью CRIME… В общем, не так-то просто внедрять то, чем могут пользоваться все. Зато в 2026 вы можете начать экономить до 95% трафика, если правки у вас небольшие, а кэширование настроение верно.

https://httptoolkit.com/blog/dictionary-compression-performance-zstd-brotli/
🔥26🤔128🥴3👍2
Navigation API — теперь во всех браузерах

Как же я жду, когда эту апишку можно будет смело тащить в продакшен!

Как мы до сих пор работали со SPA:
• подписываемся на клики по ссылкам;
• или пытаемся вклиниться в History API;
• по клику делаем preventDefault;
• имитируем работу браузера, но через JS (ходим за данными, собираем компоненты, рендерим);
• обязательно руками обновляем window.history.

И потом ещё спорим на конференциях, какая библиотека для роутинга самая правильная.

Navigation API переворачивает процесс в правильную сторону:
• пользователь как-то изменяет URL страницы (ссылка, JS, серверный заголовок);
• мы подписываемся на событие изменения урла;
• вклиниваемся в ивент, если нужно, через event.intercept;
• имитируем работу браузера (ну а как без этого).

Кода меньше, урл становится единым источником правды, не толкаемся в History API с самим браузером. Хорошечно же!

Осталось дождаться 2.5 года, когда фича станет Widely Available. И когда фреймворки это внутрь себя затащат, чтобы нам меньше думать нужно было.

https://web.dev/blog/baseline-navigation-api
51🔥8🥰41👍1🙏1
Холивар про Tailwind

Опытные слушатели подкаста «Веб-стандарты» знают, что его ведущие, включая меня, слегка предвзяты по отношению к Tailwind. Нам за это и в письма прилетает, и в комменты на ютубе, и при личных встречах. Просили позвать кого-нибудь действительно разбирающегося.

Позвали. Получился выпуск про плюсы и минусы инструмента и экосистемы, с лёгким налетом дебатов и холивара, но не слишком.

https://t.me/webstandards_ru/7667
36🔥8❤‍🔥2🤔1
Будущее карьеры разработчика

Внезапно не про веб, а про профессию в целом.

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

• Фундаментальные знания стали ещё важнее. Так как LLM может взять на себя написание кода, кто-то должен ревьюить то, что оно напишет. И заранее можно эффективнее задачи ставить, если чётко формулировать, со знанием дела.

• Стажировки — самый правильный способ вкатиться в IT. Джуны с рынка не интересны, компаниям интереснее брать мотивированных новичков, которых можно обучить тому самому фундаменту. Чтобы с LLM работать эффективнее. Рынок сейчас принадлежит компаниям, правила устанавливают они.

• Индивидуальное решение сделать всё проще, универсальное не всегда нужно. Я уже сейчас иногда для себя вайбкодю то, что мне поможет решить текущую задачу разово, а не пытаюсь адаптировать универсальные инструменты. И такого будет всё больше.

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

Сейчас бы ещё интеграцию какую-нибудь вставить, что вообще-то у нас есть стажировки, приходите. Но вы и так их найдёте, если захотите поработать где-нибудь рядом со мной :)

https://adventures.nodeland.dev/archive/the-future-of-the-software-engineering-career/
👍298🤔4🤣4🥴3🐳2💯2
NES.css

Нашёл визуальное наслаждение. CSS-библиотеку, которая превращает интерфейс в 8-битную игру. Олдскулы радуются.

Проект, к сожалению, не обновлялся с 2021 года. Но это не мешает вдохновиться и форкнуть, если очень нужно.

https://nostalgic-css.github.io/NES.css/
24🎉9❤‍🔥2🔥2
Книга ‘Accessibility for Everyone’

У меня эта книга есть в бумажном виде довольно давно. Крайне полезный источник знаний про доступность для веба и не только. Спасибо Лоре Калбаг.

Несмотря на то, что книге уже 9 лет, знания из книги во многом всё ещё актуальные. Да, появились WCAG 3, новые законы и акты о доступности. И в момент написания книги не было LLM-агентов, которым можно скормить гайдлайны, чтобы они помогали писать хороший код. Но для погружения в тему — самое то.

Собственно, откуда вдруг пост про книгу 9-летней давности. Она стала бесплатной в электронном виде. Превратить HTML в удобный для чтения формат на ваших устройствах, если веб-версии недостаточно, поможет гугление или джипитишение.

https://accessibilityforeveryone.site/
1👍299🔥1🥴1
Browser Score

Страничка от Лии Веру, которая проверяет, какие фичи CSS ваш браузер поддерживает. Раньше это называлось CSS3 Test, но CSS3 — устаревший термин, даже в вакансиях вижу его всё реже.

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

https://browserscore.dev/
29😁3🥴3🐳2🤨1😐1
Flexbox Masonry Layout

Ибрахим Бендебка предлагает решить задачу masonry-раскладки на флексах при помощи математики. Буквально берёт и раскладывает важные составляющие флексов на формулы и высчитывает нужные размеры для всех элементов, чтобы они красиво выкладывались в горизонтальную плитку.

На самом деле получился не совсем masonry, а только очень частный его случай. И на узких экранах подход ломается. Но для реализации фотогалереи с превьюшками, честно говоря, идея очень интересная, к тому же не нуждающаяся в JavaScript — всё на CSS-переменных и небольших `atan2`-хаках.

Советую вчитаться в демки всем любителям математики в интерфейсах.

https://frontendmasters.com/blog/flexbox-masonry-layout-explained-with-math/
👍19🤣82🥴1💯1
Два круга, одна стрелка и Anchor Positioning

Темани Афиф продолжает экспериментировать с различными свежими API, чтобы исследовать их пользу на практике.

Задача: соединить два круга стрелкой. Круги можно двигать при помощи JS. Для усложения над стрелкой нужно выводить расстояние между кругами, без JS. И двигать круги можно вообще как угодно. Темани по шагам, демка за демкой приходит к реализации.

А потом ради интереса реализует на CSS алгоритм нахождения кратчайшего пути в графе. Потому что может.

Когда-то давно у меня был доклад с названием «CSS — язык программирования». Кажется, пора с него сдуть пыль и переделать под современные реалии.

https://frontendmasters.com/blog/two-circles-one-arrow-and-anchor-positioning/
🤯1510👍4🔥3
Шрифт-график Datatype

Крайне интересная находка. Вариативный шрифт Datatype, который превращает инструкции текстом в графики. Например, {l:15,45,90,30,75,20,85,95} — линейный график, {b:30,70,50,90} — диаграмма столбиками, {p:65} — круговая диаграмма. Собсна, пока всё. Вся магия в лигатурах.

Из минусов вижу только то, что копировать такой текст, как и читать его скринридером, будет тем ещё приколом. И если доступность починить довольно легко, то с копированием не придумал, что можно сделать.

https://franktisellano.github.io/datatype/
4👍25🔥8🤔72❤‍🔥1
Axios скомпрометирован

В блоге Socket подробно разбирается свежий взлом супер-популярного пакета Axios. Рассказывают, как он затронул экосистему и что делать, чтобы подобные атаки вас не задевали.

Для начала, обязательно проверьте, есть ли у вас где-то версия 1.41.1 в зависимостях и в зависимостях зависимостей. Важно не просто найти подстроку, но и проверить разрешённые диапазоны типа ^1.13.5.

Затем убедитесь, что нигде в пайплайне не используете npx — в нём у вас контроль минимальный. К слову, npx часто используют для работы с MCP, привет современной разработке. Если npx ну очень нужен, перейдите на --no --offline.

А потом внимательно прочитайте статью и прислушайтесь к советам из неё. Кстати, ещё можно перейти на pnpm, он по умолчанию более требовательный к любым зависимостям.

https://socket.dev/blog/hidden-blast-radius-of-the-axios-compromise
15😱6❤‍🔥31😁1🤩1
Калькулятор метрик шрифта для 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