Почему скролл пробивает модалку и начинает двигать страницу?
Частый 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
preventDefault(): контроль стандартного поведения браузера!
При работе с DOM-событиями часто нужно отменить действие браузера: переход по ссылке, отправку формы, скролл и т.д. Для этого используется
Метод отменяет стандартное поведение браузера, но не останавливает всплытие события. Для этого используется
Базовый пример:
После вызова
Это особенно полезно в SPA-приложениях, где навигация управляется роутером без перезагрузки страницы.
Пример — работа с формой:
По умолчанию форма отправляет данные и перезагружает страницу.
Важно:
Пример — проверка
Если событие не является
Пример — passive listeners:
При passive: true браузер заранее считает, что обработчик не будет отменять действие события. Это используется для оптимизации scroll/touch-событий.
В таком режиме
Пример — условная отмена:
Здесь действие отменяется только при определённом условии.
Также важно понимать разницу между
В
Ещё момент: у кастомных событий (CustomEvent) обычно нет встроенного browser behavior. Это значит, что
🔥
📣 Code Ready | #практика
При работе с DOM-событиями часто нужно отменить действие браузера: переход по ссылке, отправку формы, скролл и т.д. Для этого используется
event.preventDefault().Метод отменяет стандартное поведение браузера, но не останавливает всплытие события. Для этого используется
stopPropagation().Базовый пример:
document.querySelector('a').addEventListener('click', (e) => {
e.preventDefault();
console.log('link click handled manually');
});
После вызова
preventDefault() переход по ссылке не произойдёт, и обработка полностью перейдёт под контроль JavaScript.Это особенно полезно в SPA-приложениях, где навигация управляется роутером без перезагрузки страницы.
Пример — работа с формой:
const form = document.querySelector('form');
form.addEventListener('submit', (e) => {
e.preventDefault();
const data = new FormData(form);
send(data);
});
По умолчанию форма отправляет данные и перезагружает страницу.
preventDefault() позволяет перехватить submit и самостоятельно управлять отправкой данных. Так обычно реализуются AJAX-формы, async-запросы и кастомная валидация.Важно:
preventDefault() работает только для событий, которые поддерживают отмену. Проверить это можно через свойство cancelable.Пример — проверка
cancelable:if (e.cancelable) {
e.preventDefault();
}
Если событие не является
cancelable, вызов preventDefault() не даст эффекта. Отдельный нюанс связан с passive listeners.Пример — passive listeners:
window.addEventListener('touchmove', (e) => {
e.preventDefault(); // будет проигнорирован
}, { passive: true });
При passive: true браузер заранее считает, что обработчик не будет отменять действие события. Это используется для оптимизации scroll/touch-событий.
В таком режиме
preventDefault() игнорируется. Иногда отмена зависит от состояния интерфейса или бизнес-логики.Пример — условная отмена:
button.addEventListener('click', (e) => {
if (!button.matches('.enabled')) {
e.preventDefault();
}
});
Здесь действие отменяется только при определённом условии.
Также важно понимать разницу между
preventDefault() и старым подходом через return false. Пример:el.addEventListener('click', (e) => {
e.preventDefault();
});
В
addEventListener конструкция return false не отменяет действие браузера и не останавливает propagation. Такое поведение было характерно для inline-обработчиков и jQuery, поэтому многие разработчики до сих пор путают эти механики.Ещё момент: у кастомных событий (CustomEvent) обычно нет встроенного browser behavior. Это значит, что
preventDefault() не отменяет никаких действий браузера. Но если событие создано с cancelable: true, вызов установит event.defaultPrevented = true.preventDefault() — базовый инструмент управления пользовательскими взаимодействиями в js.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍7🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собрана полноценная база материалов по JavaScript: от базового синтаксиса и работы с DOM до более сложных тем вроде замыканий, событий, async/await и ООП. Материал построен в формате уроков и практических заданий, поэтому подходит не только для чтения, но и для закрепления знаний на практике.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5❤4
Обычный заголовок можно превратить в полноценный UI-эффект, если разделить его на несколько независимых слоёв.
Как работает:
• ::before и ::after создают копии текста;
• каждый слой анимируется отдельно;
• разные цвета формируют chromatic aberration;
• небольшие смещения создают эффект glitch-сигнала.
Приём отлично подходит для стартовых экранов, главных секций сайта, экранов загрузки и декоративных интерфейсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍7🔥4
Например, Forward Proxy скрывает клиента и управляет исходящими запросами, Reverse Proxy принимает трафик на стороне сервера и распределяет его между сервисами, а API Gateway централизует авторизацию, rate limiting и маршрутизацию API.
На картинке — базовые различия между Forward Proxy, Reverse Proxy и API Gateway, которые полезно держать под рукой каждому разработчику.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍5🤝4
В этой статье:
• Подробно разбираются основные инструменты Chrome DevTools — Elements, Console, Sources, Network и их применение;
• Показывается, как эффективно искать баги, анализировать DOM, отлаживать JavaScript и отслеживать сетевые запросы;
• Объясняются возможности DevTools: Workspaces, Snippets, performance-профилирование, live-редактирование и инструменты для адаптивной вёрстки.🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍6🔥5😁2
This media is not supported in your browser
VIEW IN TELEGRAM
vscode-styled-components — делает работу со
styled-components намного удобнее: появляются подсказки CSS, подсветка цветов, автодополнение свойств и форматирование прямо внутри JS/TS-файлов. Всё работает почти как в отдельном CSS-файле.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤9🤝5
Как сделать sticky footer без layout-багов?
Часто делают так:
Но
Есть нативный flex-способ без JS и вычислений высоты.
Теперь
Остаётся отодвинуть footer вниз.
🔥 Так layout занимает минимум всю высоту
📣 Code Ready | #совет
Часто делают так:
footer {
position: fixed;
bottom: 0;
}Но
fixed-footer перекрывает контент и ломает mobile layout.Есть нативный flex-способ без JS и вычислений высоты.
body {
display: flex;
flex-direction: column;
}Теперь
body становится вертикальным flex-контейнером.Остаётся отодвинуть footer вниз.
footer {
margin-top: auto;
}auto забирает всё свободное пространство сверху и footer автоматически прижимается к низу страницы.body {
min-height: 100dvh;
}viewport даже при маленьком количестве контента.Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍10🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт охватывает как основы языка, так и более продвинутые темы. Здесь разбираются переменные, функции, объекты, массивы, DOM, события, асинхронность, работа с браузером и др. Материал подаётся в формате последовательных уроков с примерами кода и подробными объяснениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🤝5
Обычные анимации рамки часто выглядят слишком примитивно: у элемента просто меняется цвет или прозрачность всей границы сразу. Но через
conic-gradient можно создать полноценное вращающееся свечение вокруг элемента.Как работает:
• conic-gradient рисует сектор света вокруг центра;
• псевдоэлемент становится отдельным glow-слоем;
• animation вращает только градиент;
• layout остаётся полностью стабильным, потому что анимируется compositing-слой.
Приём отлично подходит для интерфейсных панелей, акцентных кнопок и интерфейсов с акцентными состояниями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍11❤5