This media is not supported in your browser
VIEW IN TELEGRAM
Colorize — подсвечивает все цветовые значения прямо в редакторе: HEX, RGB, HSL, CSS-переменные и другие форматы. Вместо набора символов ты сразу видишь реальный цвет рядом с кодом. Удобно при работе с UI, темами и большими CSS/SCSS-файлами, где важно быстро ориентироваться в палитре проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍10❤7🤝2
Как сделать адаптивную сетку без media queries?
Многие пишут отдельные
Но CSS Grid умеет адаптироваться вообще без media queries:
А
🔥 В итоге сетка сама решает, сколько колонок поместится в контейнер.
📣 Code Ready | #совет
Многие пишут отдельные
breakpoint для каждой ширины экрана. В итоге CSS разрастается, а grid становится сложно поддерживать:@media (max-width: 768px) {
.grid {
grid-template-columns: 1fr;
}
}Но CSS Grid умеет адаптироваться вообще без media queries:
.grid {
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}minmax(250px, 1fr) говорит: колонка не может быть меньше 250px, но может растягиваться.auto-fit автоматически переносит элементы на новую строку, когда места становится мало..card {
min-width: 0;
}А
min-width: 0 дополнительно защищает grid от переполнений длинным контентом.Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥8❤6
Например, TTFB показывает, как быстро сервер начинает отвечать, а FCP помогает понять, когда пользователь впервые видит контент на экране.
На картинке — 9 основных метрик производительности сайта, которые полезно держать под рукой каждому разработчику.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤7🤝7
Разбираем как не словить утечку памяти на обработчиках событий!
Одна из частых причин утечек — обработчик повесили, а снять забыли. Особенно это неприятно, когда событие висит не на локальном элементе, а на чём-то долгоживущем:
Компонента уже нет, а
Правильнее сразу закладывать
Главное — снимать нужно ту же самую функцию.
Вот так не сработает:
Это две разные функции, даже если выглядят одинаково.
Нормальный вариант:
Ещё момент —
Так обработчик не снимется, потому что
Когда обработчиков несколько, удобно использовать
А если обработчик нужен только один раз:
После первого вызова он удалится сам. Важный нюанс: удалённый DOM сам по себе ещё не утечка. Если на него нет внешних ссылок — GC его заберёт.
🔥 Проблемы начинаются, когда: обработчик висит на
📣 Code Ready | #практика
Одна из частых причин утечек — обработчик повесили, а снять забыли. Особенно это неприятно, когда событие висит не на локальном элементе, а на чём-то долгоживущем:
window, document, глобальный event bus и т.п.function mount() {
window.addEventListener('resize', onResize);
}
function unmount() {
// забыли снять обработчик
}
Компонента уже нет, а
onResize всё ещё вызывается. Плюс callback может держать в замыкании старое состояние, DOM-ноды, данные — и GC не сможет это нормально прибрать.Правильнее сразу закладывать
cleanup:function mount() {
window.addEventListener('resize', onResize);
}
function unmount() {
window.removeEventListener('resize', onResize);
}
Главное — снимать нужно ту же самую функцию.
Вот так не сработает:
el.addEventListener('click', () => doSomething());
el.removeEventListener('click', () => doSomething());
Это две разные функции, даже если выглядят одинаково.
Нормальный вариант:
function handler() {
doSomething();
}
el.addEventListener('click', handler);
el.removeEventListener('click', handler);
Ещё момент —
capture.el.addEventListener('click', handler, true);
el.removeEventListener('click', handler, false);
Так обработчик не снимется, потому что
capture отличается. Для удаления браузер сравнивает type, listener и capture.passive, once, signal в этом сравнении не участвуют.Когда обработчиков несколько, удобно использовать
AbortController:const controller = new AbortController();
window.addEventListener('resize', onResize, {
signal: controller.signal
});
document.addEventListener('visibilitychange', onVisible, {
signal: controller.signal
});
// cleanup
controller.abort();
abort() снимет все обработчики, которые были добавлены с этим signal.А если обработчик нужен только один раз:
button.addEventListener('click', handler, { once: true });
После первого вызова он удалится сам. Важный нюанс: удалённый DOM сам по себе ещё не утечка. Если на него нет внешних ссылок — GC его заберёт.
window / document; callback держит старое состояние в замыкании; DOM-нода или данные лежат в массиве, store или кэше.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤8🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собраны не только шпаргалки, но и полноценные статьи с разбором разных тем: работа с массивами и объектами, функции, замыкания, методы JS и практические нюансы разработки. Материал подаётся с примерами кода и краткими пояснениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🤝8👍6❤2
Привет! В этом гайде создадим карточки с плавной анимацией, увеличением при наведении и динамическим добавлением через JavaScript.
Ключевые моменты:
• HTML: контейнер с карточками и кнопкой внутри.
• CSS: тень, плавный масштаб и адаптивное расположение.
• JS: добавление новых карточек без перезагрузки страницы.
Подходит для витрин товаров, портфолио или информационных блоков.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤8👍8👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Snazzy Operator — делает операторы (=>, ===, &&, >= и другие) более выразительными и аккуратными за счёт специальных лигатур и стилизации. Код становится легче воспринимать визуально, особенно в больших файлах и сложных условиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍7🤝5❤1
Почему скролл пробивает модалку и начинает двигать страницу?
Частый UX-баг: скроллишь контент внутри modal или sidebar, доходишь до конца, и начинает скроллиться вся страница под ним.
Обычно это пытаются фиксить через JS и блокировку
Но это может ломать iOS-scroll, sticky и вызывать скачки layout.
CSS умеет решать это нативно:
Теперь scroll “останавливается” внутри контейнера и не передаётся родителю.
Можно полностью отключить overscroll-эффекты и
Это особенно полезно для modal, drawer, sidebar, chat и mobile-menu.
🔥
📣 Code Ready | #совет
Частый UX-баг: скроллишь контент внутри modal или sidebar, доходишь до конца, и начинает скроллиться вся страница под ним.
Обычно это пытаются фиксить через JS и блокировку
body-scroll:body {
overflow: hidden;
}Но это может ломать iOS-scroll, sticky и вызывать скачки layout.
CSS умеет решать это нативно:
.modal {
overflow: auto;
overscroll-behavior: contain;
}Теперь scroll “останавливается” внутри контейнера и не передаётся родителю.
Можно полностью отключить overscroll-эффекты и
scroll-chain:.modal {
overscroll-behavior: none;
}Это особенно полезно для modal, drawer, sidebar, chat и mobile-menu.
.chat {
overflow: auto;
overscroll-behavior: contain;
}overscroll-behavior позволяет нативно контролировать scroll-chain и избавиться от части scroll-lock логики без дополнительных JS-хаков.Please open Telegram to view this post
VIEW IN TELEGRAM
👍29❤9🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собраны статьи, документация и обучающие материалы по Node.js: работа с Express, npm, API, асинхронностью, модулями, потоками и серверной разработкой в целом. Есть как базовые разборы для новичков, так и более сложные темы по архитектуре и производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤7🔥6
Например, code splitting разбивает большой бандл на части и ускоряет загрузку, а dynamic imports позволяют подгружать код только тогда, когда он реально нужен.
Эти подходы помогают оптимизировать критический рендеринг, сократить размер передаваемых данных и улучшить метрики вроде LCP и INP.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍10❤6
Почему текст внезапно ломает grid и вылезает за контейнер?
Очень частый баг в CSS Grid: ставишь
Кажется, что проблема в
Но проблема часто вообще не в этом.
У grid-элементов по умолчанию стоит
Решение — явно разрешить сжатие.
После этого начинают нормально работать:
Важно: min-width: 0 нужно ставить именно на grid/flex item, а не обязательно на сам текстовый элемент.
🔥 Особенно критично для
📣 Code Ready | #совет
Очень частый баг в CSS Grid: ставишь
overflow: hidden, ellipsis, 1fr, а текст всё равно раздвигает layout и игнорирует ограничения.Кажется, что проблема в
overflow..title {
overflow: hidden;
text-overflow: ellipsis;
}Но проблема часто вообще не в этом.
У grid-элементов по умолчанию стоит
min-width: auto, из-за чего элемент отказывается сжиматься меньше контента.Решение — явно разрешить сжатие.
.grid-item {
min-width: 0;
}После этого начинают нормально работать:
.title {
white-space: nowrap;
text-overflow: ellipsis;
}Важно: min-width: 0 нужно ставить именно на grid/flex item, а не обязательно на сам текстовый элемент.
card-layout, dashboard, table, navbar и любых grid/flex интерфейсов с длинным текстом.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собраны статьи и интерактивные туториалы по JavaScript, React, CSS-анимациям, Flexbox, Grid и архитектуре интерфейсов. Автор объясняет сложные концепции простым языком и показывает не только как, но и почему это работает.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍7🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
env-cmd-file-syntax — добавляет подсветку и поддержку синтаксиса для файлов env-cmd, помогая удобнее работать с переменными окружения. Расширение делает конфиги читаемее, упрощает навигацию и помогает быстрее замечать ошибки в названиях и структуре переменных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤5🤝4🔥1
В этой статье:
• Подробно разбираются основные инструменты Chrome DevTools — Elements, Console, Sources, Network и их применение;
• Показывается, как эффективно искать баги, анализировать DOM, отлаживать JavaScript и отслеживать сетевые запросы;
• Объясняются возможности DevTools: Workspaces, Snippets, performance-профилирование, live-редактирование и инструменты для адаптивной вёрстки.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥5🤝1
Как сделать адаптивный текст без media queries?
Очень часто для адаптации текста под разные экраны используют отдельные breakpoint. В итоге CSS разрастается, а шрифты начинают масштабироваться неравномерно.
Обычно это выглядит так:
Но CSS умеет нативно адаптировать размер текста под экран:
Теперь текст плавно масштабируется вместе с
Особенно хорошо это работает для hero-блоков, заголовков, кнопок и адаптивных интерфейсов.
Media queries часто вообще становятся не нужны.
🔥
📣 Code Ready | #совет
Очень часто для адаптации текста под разные экраны используют отдельные breakpoint. В итоге CSS разрастается, а шрифты начинают масштабироваться неравномерно.
Обычно это выглядит так:
.title {
font-size: 3rem;
}
@media (max-width: 768px) {
.title {
font-size: 2rem;
}
}Но CSS умеет нативно адаптировать размер текста под экран:
.title {
font-size: clamp(1.2rem, 4vw, 3rem);
}clamp() задаёт минимальный размер, адаптивное значение и максимальный предел.Теперь текст плавно масштабируется вместе с
viewport..subtitle {
font-size: clamp(1rem, 2vw, 1.5rem);
}Особенно хорошо это работает для hero-блоков, заголовков, кнопок и адаптивных интерфейсов.
Media queries часто вообще становятся не нужны.
clamp() позволяет создавать по-настоящему адаптивные интерфейсы без множества контрольных точек и дублирования CSS.Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥12🤝6👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Sass (.sass only) — добавляет полноценную поддержку indented-синтаксиса Sass: подсветку, автодополнение, навигацию и корректное распознавание .sass-файлов без фигурных скобок и точек с запятой. Помогает комфортно работать со старыми и современными Sass-проектами прямо в редакторе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍7🔥5