Прощаемся со styled-components
Если вы, также как и я, пропустили новость, то библиотека официально уходит в поддержку без дальнейшего развития.
Пожертвования на open collective уже закрыты, а автор больше не рекомендует её к использованию в новых проектах, ровно как и другие существующие CSS-in-JS решения.
🔗 Ссылка на мартовский пост
Если вы, также как и я, пропустили новость, то библиотека официально уходит в поддержку без дальнейшего развития.
Пожертвования на open collective уже закрыты, а автор больше не рекомендует её к использованию в новых проектах, ровно как и другие существующие CSS-in-JS решения.
🔗 Ссылка на мартовский пост
🫡6⚡1😭1
Конвертор компонентов
Попался интересный инструмент, позволяющий писать код в JSX-подобном формате (вдохновлённом Solid.js), а затем компилировать его во Vue, React, Angular или другой синтаксис.
Будет полезен тем, кто разрабатывает библиотеки компонентов под универсальный стек.
Также есть Playground, в котором можно всегда подсмотреть, как одну и ту же фичу можно реализовать в разных библиотеках.
Пока что выглядит сыроватым, но вообще задумка в противовес web-компонентам неплохая.
🔗 Ссылка на сам инструмент
🔗 Ссылка на Playground
Попался интересный инструмент, позволяющий писать код в JSX-подобном формате (вдохновлённом Solid.js), а затем компилировать его во Vue, React, Angular или другой синтаксис.
Будет полезен тем, кто разрабатывает библиотеки компонентов под универсальный стек.
Также есть Playground, в котором можно всегда подсмотреть, как одну и ту же фичу можно реализовать в разных библиотеках.
Пока что выглядит сыроватым, но вообще задумка в противовес web-компонентам неплохая.
🔗 Ссылка на сам инструмент
🔗 Ссылка на Playground
👍1
Media is too big
VIEW IN TELEGRAM
Новые значения выравнивания
Мало кто знает о существовании значений
▫️
▫️
▫️
▫️
▫️
▫️
▫️ и их сокращённым версиям вроде
Используются только в связке с другим значением выравнивания, например:
На видео разобрана одна из возможных проблем выравнивания, которую раньше приходилось решать различными костылями со stackoverflow, а теперь можно поправить на раз-два!
⚙️ Поддержка браузерами широкая
Мало кто знает о существовании значений
safe и unsafe. Они могут быть применены к таким свойствам позиционирования как: ▫️
align-items▫️
align-content▫️
justify-items▫️
justify-content▫️
align-self▫️
justify-self▫️ и их сокращённым версиям вроде
place-contentИспользуются только в связке с другим значением выравнивания, например:
align-items: safe center;
unsafe по сути ничего не меняет, так как это значение по-умолчанию, а вот safe позволяет сбросить свойство к значению start в том случае, если дочерний элемент начинает выходить за рамки родительского. На видео разобрана одна из возможных проблем выравнивания, которую раньше приходилось решать различными костылями со stackoverflow, а теперь можно поправить на раз-два!
⚙️ Поддержка браузерами широкая
👍6
Отвечаю на ваши вопросы 💬
Как и обещал ранее, снял ролик с ответом на вопрос
🔗 Ссылка на YouTube
🔗 Ссылка на VK Видео
🔗 Ссылку на запрещённограм, к сожалению, не могу разместить 🤷♂️
Как и обещал ранее, снял ролик с ответом на вопрос
🔗 Ссылка на YouTube
🔗 Ссылка на VK Видео
🔗 Ссылку на запрещённограм, к сожалению, не могу разместить 🤷♂️
❤2👍1🔥1
Новый хук React
В 19.2 версии библиотеки был добавлен
В качестве примера рассмотрим код из официальной документации:
Как вы могли заметить, помимо важного
А представьте что будет, если параметров будет 6 или даже больше и все будут вызывать переподключение? Что тогда делать?
Можно, конечно же, просто убрать
Теперь это можно решить таким кодом:
Весь код, который не требует очистки, но требует актуальных значений извне, выносим в хук и вызываем внутри
🔗 Ссылка на API
В 19.2 версии библиотеки был добавлен
useEffectEvent, который наконец-то позволит вам избавиться от ненужных зависимостей в useEffect.В качестве примера рассмотрим код из официальной документации:
const ChatRoom = ({ roomId, theme }) => {
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.on('connected', () => {
showNotification('Connected!', theme);
});
connection.connect();
return () => {
connection.disconnect();
};
}, [roomId, theme]);
}Как вы могли заметить, помимо важного
roomId, в качестве зависимости также присутствует и theme. В случае изменения первого, нам действительно нужно произвести переподключение (connection.disconnect();), а в случае второго, просто получить обновлённое значение. Но, как вы знаете, функция очистки в useEffect будет вызвана при изменении любого из переданных параметров. А представьте что будет, если параметров будет 6 или даже больше и все будут вызывать переподключение? Что тогда делать?
Можно, конечно же, просто убрать
theme из зависимостей и отключить ругающийся ESLint, но тогда theme перестанет получать актуальные значения до момента повторного обновления roomId, а также ваш код станет более подверженным неожиданным багам.Теперь это можно решить таким кодом:
const ChatRoom = ({ roomId, theme }) => {
const onConnected = useEffectEvent(() => {
showNotification('Connected!', theme);
});
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.on('connected', () => {
onConnected();
});
connection.connect();
return () => connection.disconnect();
}, [roomId]);
}Весь код, который не требует очистки, но требует актуальных значений извне, выносим в хук и вызываем внутри
useEffect, готово!🔗 Ссылка на API
🔥3
Новый компонент React
В 19.2 версии библиотеки был добавлен
По сути он являет собой улучшенный условный рендеринг JSX:
Использованные внутри него компоненты сохраняют своё React состояние. Также сохраняется и состояние DOM. Например, данные, введённые в
Также
При переключении в режим
Ещё одним преимуществом использования данного компонента является то, что он как и
🔗 Ссылка на API
В 19.2 версии библиотеки был добавлен
<Activity>. По сути он являет собой улучшенный условный рендеринг JSX:
// До
{isShowingSidebar && (
<Sidebar />
)}
// После
<Activity mode={isShowingSidebar ? 'visible' : 'hidden'}>
<Sidebar />
</Activity>
Использованные внутри него компоненты сохраняют своё React состояние. Также сохраняется и состояние DOM. Например, данные, введённые в
<textarea>, который не был подключён предварительно к useState(), будут восстановлены.Также
<Activity> можно использовать для фоновой подгрузки компонентов, которые могут быть использованы впоследствии. Компоненты рендерятся как обычно, но с более низким приоритетом в сравнении с обычным JSX.При переключении в режим
"hidden", компоненты внутри также вызывают очистку в useEffect, как и при обычном рендеринге. Под капотом для скрытия используется display: none;Ещё одним преимуществом использования данного компонента является то, что он как и
<Suspense> участвует в селективной гидрации. Проще говоря, если вы не пользуетесь подобными компонентами, то пока полностью не пройдёт гидрация, ваше приложение не будет реагировать на клики вообще, а вместе с ними вы можете пользоваться загруженными областями экрана до полного завершения процесса.🔗 Ссылка на API
👍1🔥1🤣1
В Node.js завезли HTTP/3 🔥
В основных браузерах эта технология поддерживается с 2019-2021х годов, но в Node.js такой возможности до сих пор не было. Всё осложнялось тем, что даже полифил, как таковой, невозможно было создать, т.к. сама платформа на сетевом уровне требовала доработок.
Ранее этот недостаток в основном решался при помощи реверсивных прокси с серверами, которые поддерживают эту фичу, но теперь можно пользоваться этим нативно.
🔗 Ссылка на wikipedia по HTTP/3
🔗 Ссылка на документацию нового модуля Node.js
⚙️ Поддержка браузерами HTTP/3 и WebTransport
В основных браузерах эта технология поддерживается с 2019-2021х годов, но в Node.js такой возможности до сих пор не было. Всё осложнялось тем, что даже полифил, как таковой, невозможно было создать, т.к. сама платформа на сетевом уровне требовала доработок.
Ранее этот недостаток в основном решался при помощи реверсивных прокси с серверами, которые поддерживают эту фичу, но теперь можно пользоваться этим нативно.
🔗 Ссылка на wikipedia по HTTP/3
🔗 Ссылка на документацию нового модуля Node.js
⚙️ Поддержка браузерами HTTP/3 и WebTransport
👍2🔥1
Отвечаю на ваши вопросы 💬
🔗 Ссылка на YouTube
🔗 Ссылка на VK Видео
🔗 Ссылку на запрещённограм, к сожалению, не могу разместить 🤷♂️
😉 Если хочешь попасть в следующее видео, пиши свой вопрос в комментариях!
🔗 Ссылка на YouTube
🔗 Ссылка на VK Видео
🔗 Ссылку на запрещённограм, к сожалению, не могу разместить 🤷♂️
😉 Если хочешь попасть в следующее видео, пиши свой вопрос в комментариях!
🔥3
Chrome представил собственный MCP сервер 🚀
Model Context Protocol (MCP) — это протокол, который задаёт стандарт общения ИИ-моделей с различными инструментами.
Теперь, при генерации кода из Cursor или другого инструмента, ваш ИИ-агент может напрямую обращаться к инструментам разработчика, кликать по кнопкам, ходить по страницам, отправлять формы и разбирать то, что пришло с бэкенда!
Вы можете попросить его протестировать UI на баги и уязвимости, а также поднять метрики Core Web Vitals.
Полный набор фич, а также способы подключения к существующим инструментам можно найти в их официальном репозитории.
Model Context Protocol (MCP) — это протокол, который задаёт стандарт общения ИИ-моделей с различными инструментами.
Теперь, при генерации кода из Cursor или другого инструмента, ваш ИИ-агент может напрямую обращаться к инструментам разработчика, кликать по кнопкам, ходить по страницам, отправлять формы и разбирать то, что пришло с бэкенда!
Вы можете попросить его протестировать UI на баги и уязвимости, а также поднять метрики Core Web Vitals.
Полный набор фич, а также способы подключения к существующим инструментам можно найти в их официальном репозитории.
🔥3👍1
Написал большую статью по View Transitions API 🔥
Не нашёл в Интернете исчерпывающей статьи по этой теме, поэтому решил написать её самостоятельно. Материал из официальной документации постарался переработать и объяснить максимально просто. Но в любом случае, если что-то будет непонятно — пишите в комментариях, расскажу-покажу.
Всем рекомендую к прочтению!
🔗 Ссылка на habr
Не нашёл в Интернете исчерпывающей статьи по этой теме, поэтому решил написать её самостоятельно. Материал из официальной документации постарался переработать и объяснить максимально просто. Но в любом случае, если что-то будет непонятно — пишите в комментариях, расскажу-покажу.
Всем рекомендую к прочтению!
🔗 Ссылка на habr
❤5👍2🔥2
Media is too big
VIEW IN TELEGRAM
Делаем сложные слайдеры без использования JS 💪🏻
В браузеры уже давно завезли возможность делать слайдеры, основанные на скролле, на чистом CSS:
🌵
1 аргумент:
2 аргумент:
🌵
Возможные значения:
🌵
Возможные значения:
⚙️ Поддержка браузерами широкая: type, align, stop
В браузеры уже давно завезли возможность делать слайдеры, основанные на скролле, на чистом 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, а также both2 аргумент:
proximity — мягкая привязка, скролл сместится к точке привязки, только если прокрутка остановилась достаточно близко к нейmandatory — жёсткая привязка, скролл обязательно сместится к ближайшей точке привязки🌵
scroll-snap-align указывает точку, относительно которой будет выровнен элементВозможные значения:
none, start, center, end🌵
scroll-snap-stop указывает, должен ли скролл обязательно останавливаться в каждой точке привязки при прокруткеВозможные значения:
normal, always⚙️ Поддержка браузерами широкая: type, align, stop
🔥6👍3👎1
Адаптивные изображения на CSS
Большинство, скорее всего, знает о существовании тега
Но не все знают, что такой опцией можно пользоваться и в 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
Глобальный атрибут
Он меняет внешний вид кнопки 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/
Если вас в следующий раз спросят на собесе как отцентрировать элемент при помощи CSS, можете скинуть им это:
https://css-generators.com/center/
Css-Generators
How to center an element horizontally and vertically
100 different ways to center a single element horizontally and vertically inside a container.
🔥7👍3
Общедоступные бэкенд апишки
Если вы пишите pet проект и не хотите заморачиваться с бекендом, то на этой странице github собрано огромное количество готовых API под любой вкус и цвет.
Если вы пишите pet проект и не хотите заморачиваться с бекендом, то на этой странице github собрано огромное количество готовых API под любой вкус и цвет.
GitHub
GitHub - public-apis/public-apis: A collective list of free APIs
A collective list of free APIs. Contribute to public-apis/public-apis development by creating an account on GitHub.
❤2🙏1
Media is too big
VIEW IN TELEGRAM
Оптимизируем анимацию при помощи CSS 🚀
Рассмотрим малоизвестное свойство
Оно позволяет заранее предупредить браузер о том, что элемент будет каким-либо образом изменяться или перемещаться и его нужно заранее оптимизировать
Возможные значения:
Важные правила:
1) Не стоит добавлять
2) По возможности
Браузер для оптимизации опционально может вынести помеченный элемент на отдельный композитный слой (на видео видно)
⚙️ Поддержка браузерами широкая
Рассмотрим малоизвестное свойство
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 Видео
В последнее время пишут очень много вопросов по этой теме. Причём даже разработчики с 3-5 годами опыта. Решил поделиться своим мнением на этом счёт.
🔗 Ссылка на YouTube
🔗 Ссылка на RuTube
🔗 Ссылка на VK Видео
🤝2👍1