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
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