Записки фронтендера
423 subscribers
145 photos
42 videos
1 file
160 links
Все самые свежие обновления в мире Frontend

Бесплатная реклама твоего проекта
https://votby.ru

Общий чат
@fe_notes_chat

Чат помощи с поиском работы
@fe_notes_help

Написать в лс @usersavchenko
Download Telegram
Отвечаю на ваши вопросы 💬

🔗 Ссылка на YouTube
🔗 Ссылка на VK Видео
🔗 Ссылку на запрещённограм, к сожалению, не могу разместить 🤷‍♂️

😉 Если хочешь попасть в следующее видео, пиши свой вопрос в комментариях!
🔥3
Chrome представил собственный MCP сервер 🚀

Model Context Protocol (MCP) — это протокол, который задаёт стандарт общения ИИ-моделей с различными инструментами.

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

Вы можете попросить его протестировать UI на баги и уязвимости, а также поднять метрики Core Web Vitals.

Полный набор фич, а также способы подключения к существующим инструментам можно найти в их официальном репозитории.
🔥3👍1
Написал большую статью по View Transitions API 🔥

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

Всем рекомендую к прочтению!

🔗 Ссылка на habr
❤5👍2🔥2
Media is too big
VIEW IN TELEGRAM
Делаем сложные слайдеры без использования JS 💪🏻

В браузеры уже давно завезли возможность делать слайдеры, основанные на скролле, на чистом CSS:
<div class="container">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>


.container {
scroll-snap-type: y mandatory;
}

.child {
scroll-snap-align: start;
}


🌵scroll-snap-type указывает ось и тип снеппинга

1 аргумент:
x или y, логические inline или block, а также both

2 аргумент:
proximity — мягкая привязка, скролл сместится к точке привязки, только если прокрутка остановилась достаточно близко к ней
mandatory — жёсткая привязка, скролл обязательно сместится к ближайшей точке привязки

🌵 scroll-snap-align указывает точку, относительно которой будет выровнен элемент

Возможные значения: none, start, center, end

🌵scroll-snap-stop указывает, должен ли скролл обязательно останавливаться в каждой точке привязки при прокрутке

Возможные значения:
normal, always

⚙️ Поддержка браузерами широкая: type, align, stop
🔥6👍3👎1
Адаптивные изображения на CSS

Большинство, скорее всего, знает о существовании тега <picture>, который позволяет указать несколько изображений под разные экраны и браузеры:
<picture>
<source
type="image/avif"
srcset="cat@1x.avif 1x, cat@2x.avif 2x"
/>

<source
type="image/png"
srcset="cat@1x.png 1x, cat@2x.png 2x"
/>

<img src="cat@1x.png" alt="Кот" loading="lazy" />
</picture>


Но не все знают, что такой опцией можно пользоваться и в CSS при помощи функции image-set():
div {
background: image-set(
url("cat@1x.avif") type("image/avif") 1x,
url("cat@2x.avif") type("image/avif") 2x,
url("cat@1x.png") type("image/png") 1x,
url("cat@2x.png") type("image/png") 2x
);
}


Также как и с <picture> в начале указываем более предпочтительные варианты , чтобы браузер в случае поддержки всех опций, выбрал именно их.

⚙️ Поддержка браузерами широкая
🔥2
Записки фронтендера
Теперь можно создавать аккордеоны без боли! Ранее было дико неудобно делать плавную анимацию открытия-закрытия аккордеона. Проблема заключалась в том, что CSS не умеет делать переход между, скажем, 0px и auto. Если бы мы попытались каким-либо образом это…
Media is too big
VIEW IN TELEGRAM
Новое свойство — interpolate-size 🔥

Помните, ранее мы рассматривали функцию calc-size()?

Она позволяет вычислить точное значение по переданным ключевым словам. Например, вместо auto подставить фактические 300px, а затем к ним прибавить или, скажем, вычесть 25px. Благодаря этому, стали возможны переходы c использованием auto, min-content, fit-content и других подобных значений.

Но что если нам не нужны дальнейшие вычисления с переданным значением? Предположим, мы бы хотели просто сделать плавный переход от 300px до auto.

Достаточно добавить свойство interpolate-size со значением allow-keywords и всё будет работать:
.container {
width: 300px;
height: 100px;
interpolate-size: allow-keywords;
transition: width 0.5s;
background: linear-gradient(90deg, #efd5ff 0%, #515ada 100%);
}

.container:hover {
width: auto;
}


Также свойство имеет значение numeric-only. Оно является значением по-умолчанию и запрещает подобные переходы.

⚙️ Поддержка браузерами пока что небольшая
👍3
console.png
6.5 KB
Встроенная функция генерации UUID v4

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


⚙️ Поддержка браузерами широкая
👍8🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Управляем внешним видом кнопки Enter

Глобальный атрибут enterkeyhint может быть применён к любому редактируемому элементу (<input>, <textarea>, contententeditable)

Он меняет внешний вид кнопки Enter на мобильных устройствах:
<input enterkeyhint="search">


Возможные значения: enter, done, go, next, previous, search и send

Если его не указать, то браузер самостоятельно попытается угадать значение на основе других атрибутов

При этом, события, генерируемые нажатием на кнопку, не меняются, меняется только её внешний вид

⚙️ Поддержка браузерами полная
🔥12👍2
100 способов отцентрировать элемент в CSS

Если вас в следующий раз спросят на собесе как отцентрировать элемент при помощи CSS, можете скинуть им это:

https://css-generators.com/center/
🔥7👍3
Общедоступные бэкенд апишки

Если вы пишите pet проект и не хотите заморачиваться с бекендом, то на этой странице github собрано огромное количество готовых API под любой вкус и цвет.
❤2🙏1
Media is too big
VIEW IN TELEGRAM
Оптимизируем анимацию при помощи CSS 🚀

Рассмотрим малоизвестное свойство will-change

Оно позволяет заранее предупредить браузер о том, что элемент будет каким-либо образом изменяться или перемещаться и его нужно заранее оптимизировать

Возможные значения:
auto - значение по-умолчанию, ничего не меняет
scroll-position - предупреждает браузер о том, что элемент будет перемещаться при скролле (например, у него position: fixed)
contents - предупреждает браузер об изменениях внутри элемента (например, удаление или добавление дочерних элементов)
изменяющееся свойство - transform, opacity или другое свойство, которое будет впоследствии изменено

Важные правила:
1) Не стоит добавлять will-change всем элементам подряд, это вызовет большой расход ресурсов и ещё больше усугубит ситуацию
2) По возможности will-change нужно удалять сразу после использования при помощи JS

Браузер для оптимизации опционально может вынести помеченный элемент на отдельный композитный слой (на видео видно)

⚙️ Поддержка браузерами широкая
2🔥10
Как попасть во Frontend в 2025-2026 году?

В последнее время пишут очень много вопросов по этой теме. Причём даже разработчики с 3-5 годами опыта. Решил поделиться своим мнением на этом счёт.

🔗 Ссылка на YouTube
🔗 Ссылка на RuTube
🔗 Ссылка на VK Видео
🤝2👍1
Топ донатов месяца 😉

Итак, месяц подошёл к концу. Хотелось бы поблагодарить @maunsh за поддержку звёздами.

Это сильно мотивирует продолжать дальше, а также повышать качество контента!

Как я понял, эти звёзды можно позже будет направить на рекламу внутри самого Telegram, обязательно буду этим пользоваться.

Также не могу не упомянуть @EmberIsReal и @waffuru_moon, они поддержали канал в сентябре и июне, соответственно.

Пост буду и дальше кидать раз в месяц, если будут звёздочки.
1❤5
Прощаемся с display: masonry

Если вы не в курсе, то уже много лет рабочая группа пытается добавить в CSS такую же крутую сетку, как и у pinterest (они её делают с помощью JS)

Фичу никак не могут выкатить из-за разногласий в сообществе

В последнее время они начали больше прислушиваться к обычным разработчикам и устраивать различные опросы перед внедрением

К примеру, один из споров касательно синтаксиса:
https://github.com/w3c/csswg-drafts/issues/11243

Недавно провели голосование и, перебрав кучу вариантов, утвердили новое название — display: grid-lanes:
https://github.com/w3c/csswg-drafts/issues/12022

Видимо тема масонства не понравилась большинству 😄

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

Буду держать в курсе изменений!
1🔥7👍1😁1
Срочно обновите пакеты React

29 ноября была найдена критическая уязвимость в пакетах:
1) react-server-dom-webpack
2) react-server-dom-parcel
3) react-server-dom-turbopack

Затронуты версии:
1) 19.0
2) 19.1.0
3) 19.1.1
4) 19.2.0

Чтобы проверить, есть ли они у вас в проекте, можно прогнать в консоли следующую команду:
npm ls react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack


В официальном сообщении можно найти инструкции для обновления Next.js, Expo и прочих библиотек построенных на базе React.
❤2😁1
Anthropic купила Bun 🔥

Отличные новости!

Bun и до покупки был очень даже перспективным и интересным инструментом, но теперь с поддержкой крупной компании он имеет все шансы стать новым стандартом во Frontend

Anthropic будет использовать Bun в качестве инфраструктуры для Claude Code, Claude Agent SDK и будущих AI-продуктов

Проект продолжит развиваться как Open Source продукт под лицензией MIT

Будем и дальше следить за его развитием, но теперь у нас появился дополнительный довод о том, почему его стоит использовать

*Напомню, что Anthropic — это компания, основанная бывшими сотрудниками OpenAI, которые не были согласны с решениями руководства

🔗 Ссылка на оригинальный пост
🔥3❤2
Media is too big
VIEW IN TELEGRAM
Работать с анимациями стало проще! ⚡️

Недавно в браузеры завезли свойство animation-composition

Оно управляет тем, как будут накладываться числовые значения из @keyframes на уже заданные в элементе

🔸Значения:
replace (по-умолчанию) — значение из @keyframes перезаписывает оригинальное значение

add или accumulate — прибавляют к имеющемуся значению значение из @keyframes

add и accumulate работают одинаково при работе с обычными свойствами (height), но в них есть существенная разница при работе с CSS функциями (translateX())

🔸Рассмотрим пример:
У нас есть элемент с классом box и у него по-умолчанию установлено:
transform: translateX(25px) rotate(30deg)


в @keyframes ему применили:
transform: translateX(10px)


🔸Результат:
replace — перезапись
transform: translate(10px)


add
— добавление функции в конец списка
transform: translateX(25px) rotate(30deg) translate(10px)


accumulate
— прибавление значения к имеющимся функциям
transform: translateX(35px) rotate(30deg)


⚙️ Поддержка браузерами широкая
1❤5👍1
Media is too big
VIEW IN TELEGRAM
Новые свойства для управления порядком в a11y дереве

Представьте себе, что вы развернули список элементов при помощи flex-direction: row-reverse, и теперь человек с ограниченными возможностями, пользующийся скринридером и нажимающий на Tab, чтобы перемещаться по сайту, будет читать элементы не слева направо, а справа налево. Есть уйма способов это исправить, но все они не очень удобные

В 137 версии Chrome это исправили, добавив 2 новых свойства

📌 reading-flow - меняет последовательность элементов a11y дерева

Значения:
normal (по-умолчанию) - порядок основан на дереве DOM
flex-visual - порядок flex элементов, основанный на writing-mode (по-умолчанию слева направо, сверху вниз)
flex-flow - порядок, основанный на flex-direction
grid-columns - поколоночный grid порядок
grid-rows - построчный grid порядок
grid-order - порядок, основанный на order в grid
source-order - порядок, основанный на reading-order

📌 reading-order - задаёт порядковый номер элементам a11y дерева

⚙️ Поддержка браузерами пока небольшая
1👍5❤1🔥1
Side-relative values

Не все знают, но позиционировать фоновое изображение в CSS можно относительно любой из сторон элемента

К примеру, следующий код сместит картинку на 10% от левого края и на 20% от верхнего:
background-position: 10% 20%;


Но что, если мы хотим сделать отступ от правого и нижнего, соответственно?

Достаточно указать нужные стороны и всё будет работать:
background-position: right 10% bottom 20%;


Также существуют такие свойства, как background-position-x и background-position-y. Они позволяют делать то же самое, но для отдельных осей.

Side-relative синтаксис в этих свойствах долгое время поддерживался только в Safari и Firefox, но совсем недавно и Chrome решил себе добавить эту фичу

⚙️Поддержка браузерами side-relative: background-position, background-position-x, background-position-y
❤3👍1🔥1
Новогодний стрим 🎄

Год подходит к концу, а значит время подводить итоги!

Планирую 28 декабря в 17:00 МСК выйти в эфир, пообщаться со всеми

Посмотрим несколько видео, поотвечаю на ваши вопросы

Если есть какие-то конкретные видео или предложения по стриму — welcome, жду в комментариях!

upd. запись https://youtu.be/_303mufIAQc
❤9🎄2