Например,
map() позволяет преобразовать каждый элемент массива, filter() — отфильтровать данные по условию, а slice() — получить часть массива без изменения исходного.На картинке — основные методы массивов, которые помогают работать с данными быстрее и писать чистый код.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤11👍10👎2
Наблюдение за изменением размера любого элемента!
Есть нативный инструмент
Достаточно наблюдать за элементом:
Теперь любое изменение его ширины или высоты - мгновенно вызывает
Можно остановить наблюдение:
🔥
📣 Code Ready | #совет
Есть нативный инструмент
ResizeObserver, который реагирует именно на изменение размеров конкретного элемента:const ro = new ResizeObserver(entries => {
const rect = entries[0].contentRect;
console.log('width:', rect.width, 'height:', rect.height);
});Достаточно наблюдать за элементом:
ro.observe(document.querySelector('#box'));Теперь любое изменение его ширины или высоты - мгновенно вызывает
callback.Можно остановить наблюдение:
ro.disconnect();
ResizeObserver даёт контроль над размерами элементов и позволяет строить предсказуемые, адаптивные интерфейсы.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍10🤝9❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Markdown All in One расширяет возможности работы с Markdown в VS Code: автодополнение, быстрые команды форматирования, создание оглавления, предпросмотр, горячие клавиши и удобная навигация по документу. Всё, что нужно для комфортной работы с документацией и заметками.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍11🔥9
Интерфейс качественный, когда элементы дают мгновенную визуальную обратную связь. В этом приёме пункт меню подсвечивается и слегка смещается при наведении, создавая эффект активной строки без перегруженной анимации.
Как работает:
• состояние :hover используется как источник интерактивности — без обработчиков событий;
• фоновая подсветка формирует чёткую активную область;
• transform: translateX() добавляет ощущение «притяжения» к курсору;
• движение выполняется через transform, поэтому не вызывает перерасчёта layout и остаётся плавным.
Такой микроэффект делает навигацию более предсказуемой и снижает визуальную нагрузку по сравнению с тяжёлыми анимациями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤝11🔥9❤2👎1
Свойство
position управляет тем, как элементы располагаются на странице и относительно чего происходит их смещение.Например,
relative позволяет сдвигать элемент относительно его обычного положения, absolute позиционирует элемент относительно ближайшего позиционированного родителя.Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥12👍9
Оптимизируем вертикальные отступы между элементами!
Часто в верстке нужно просто равномерное расстояние между элементами: абзацами, карточками, пунктами списка, блоками формы. Обычно делают так — добавляют
Проблема в том, что у последнего элемента остаётся лишний отступ, и начинается возня с
Есть более чистый паттерн, который используют в дизайн-системах:
Селектор
То есть первый элемент отступа не получает, а все остальные получают автоматически:
🔥 Это делает верстку чище, элементы можно добавлять, удалять, менять местами, и расстояния всегда остаются корректными.
📣 Code Ready | #совет
Часто в верстке нужно просто равномерное расстояние между элементами: абзацами, карточками, пунктами списка, блоками формы. Обычно делают так — добавляют
margin-bottom каждому элементу..item {
margin-bottom: 1rem;
}Проблема в том, что у последнего элемента остаётся лишний отступ, и начинается возня с
:last-child.Есть более чистый паттерн, который используют в дизайн-системах:
.stack > * + * {
margin-top: 1rem;
}Селектор
* + * означает: любой элемент, который идёт сразу после другого элемента.То есть первый элемент отступа не получает, а все остальные получают автоматически:
.form > * + * {
margin-top: 1.2rem;
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥14❤11
👍18🔥11🤝9😁3❤2
matchMedia — проверка и отслеживание media queries!
Функция возвращает объект
Базовое использование:
Пример 1 — проверка условия:
Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
Событие
Это позволяет реагировать на изменение состояния
Пример 3 — адаптация логики интерфейса:
Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
Пример 4 — учет пользовательских настроек доступности:
Пример 5 — отслеживание ориентации экрана:
🔥
📣 Code Ready | #практика
matchMedia() — Web API, позволяющий проверять и отслеживать media queries напрямую из JavaScript. Это помогает синхронизировать поведение JS-кода с CSS-адаптивностью.Функция возвращает объект
MediaQueryList, содержащий результат проверки media query.Базовое использование:
const media = window.matchMedia('(max-width: 768px)');
console.log(media.matches);matches — boolean, показывающий соответствует ли текущий viewport заданному media query.Пример 1 — проверка условия:
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark-theme');
}Так можно адаптировать поведение интерфейса под системные настройки пользователя.
Пример 2 — отслеживание изменения
media query:const media = window.matchMedia('(max-width: 768px)');
media.addEventListener('change', e => {
console.log('mobile:', e.matches);
});Событие
change срабатывает при изменении состояния media query.Это позволяет реагировать на изменение состояния
media query без использования window.resize.Пример 3 — адаптация логики интерфейса:
const media = window.matchMedia('(max-width: 600px)');
function updateLayout(mql) {
if (mql.matches) {
enableMobileLayout();
} else {
enableDesktopLayout();
}
}
updateLayout(media);
media.addEventListener('change', updateLayout);Обработчик сначала вызывается вручную для установки начального состояния, затем автоматически при изменении
media query.Пример 4 — учет пользовательских настроек доступности:
const motion = window.matchMedia('(prefers-reduced-motion: reduce)');
if (motion.matches) {
disableAnimations();
}Media queries позволяют учитывать пользовательские настройки доступности.Пример 5 — отслеживание ориентации экрана:
const orientation = window.matchMedia('(orientation: portrait)');
orientation.addEventListener('change', e => {
console.log('portrait:', e.matches);
});matchMedia используется для: адаптивной логики интерфейса, синхронизации JavaScript и CSS media queries, учета пользовательских настроек доступности и оптимизации поведения UI на разных устройствах.matchMedia — удобный способ проверять и отслеживать media queries напрямую из JavaScript.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤13🔥10🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Это репозиторий с компактным, но очень полезным материалом. Внутри собраны ключевые концепции и паттерны, которые постоянно встречаются в коде. Всё сопровождается небольшими примерами и пояснениями, поэтому ресурс удобно использовать как быстрый справочник, когда нужно освежить синтаксис.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥10🤝9❤2
Иногда нужно визуально выделить карточку или кнопку, но обычный
border выглядит слишком просто. В этом приёме рамка создаётся отдельным слоем с градиентом.Как работает:
• псевдоэлемент ::before создаёт слой градиентной рамки;
• inset расширяет его за пределы блока, формируя контур;
• border-radius: inherit сохраняет форму карточки;
• при наведении меняется яркость и масштаб рамки.
Это простой способ добавить акцент и глубину интерфейсным элементам без дополнительных обёрток и изображений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝22🔥12👍11❤2😁1
Например,
cursor: pointer; делает курсор в виде руки — это сигнализирует, что элемент кликабельный. А cursor: none; полностью скрывает курсор.На картинке — 16 популярных значений свойства cursor.
Сохрани, чтобы не искать в документации каждый раз!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🤝11🔥10❤1
This media is not supported in your browser
VIEW IN TELEGRAM
YAML — расширение для VS Code, которое добавляет подсветку синтаксиса, автодополнение и проверку структуры YAML-файлов. Помогает быстрее писать конфиги для Docker, Kubernetes, GitHub Actions и других инструментов, сразу показывая ошибки и подсказки.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤9👍9🤝2
Как сделать аккуратный fade по краям контента без псевдоэлементов!
Обычно хочется мягко приглушить края, чтобы показать пользователю, что контент продолжается.
Часто для этого добавляют псевдоэлементы с градиентом:
Но это создаёт лишние слои, проблемы с
Есть другой способ — использовать CSS-маску:
Чёрный цвет = полностью видимый контент
Прозрачный = плавное исчезновение.
Это хорошо работает для горизонтальных списков:
🔥 В итоге получаем нативный
📣 Code Ready | #совет
Обычно хочется мягко приглушить края, чтобы показать пользователю, что контент продолжается.
Часто для этого добавляют псевдоэлементы с градиентом:
.scroll::after {
position: absolute;
right: 0;
width: 40px;
background: linear-gradient(...);
}Но это создаёт лишние слои, проблемы с
pointer-events и иногда ломает клики.Есть другой способ — использовать CSS-маску:
.scroll {
mask-image: linear-gradient(to right,
transparent,
black 40px,
black calc(100% - 40px),
transparent
);
}mask-image управляет прозрачностью элемента, а не рисует поверх него слой.Чёрный цвет = полностью видимый контент
Прозрачный = плавное исчезновение.
Это хорошо работает для горизонтальных списков:
.scroll {
display: flex;
overflow-x: auto;
mask-image: linear-gradient(to right,
transparent,
black 40px,
black calc(100% - 40px),
transparent
);
}fade-эффект без псевдоэлементов, без лишних слоёв и без JS.Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥10👍8🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Это сайт с подборкой руководств, шпаргалок и полезных материалов для JavaScript-разработчиков. Здесь собраны статьи по TypeScript, React, Node.js, Next.js и другим технологиям. На сайте можно найти объяснения сложных тем, алгоритмы и структуры данных, а также практические гайды по инструментам вроде Docker и GraphQL. Все материалы удобно структурированы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍10🤝9❤1
navigator.sendBeacon для отправки данных при закрытии страницы!
Если нужно отправить аналитику или финальные данные сессии, обычные HTTP-запросы могут не успеть выполниться — пользователь закрыл вкладку или перешёл на другую страницу. Для таких случаев есть
Метод ставит данные в очередь на отправку и не блокирует закрытие страницы.
Базовый пример:
Метод принимает URL и данные. Запрос отправляется методом POST.
Если нужно явно указать Content-Type: application/json, лучше передать Blob:
Пример 1 — отправка при скрытии страницы:
Пример 2 — отправка
Можно отправлять строки,
Пример 3 — проверка:
Метод возвращает true, если браузер принял данные в очередь на отправку. Это не гарантия доставки, но означает, что отправка была запланирована браузером.
🔥 Если нужен ответ сервера, кастомные заголовки или полный контроль над запросом, можно использовать
📣 Code Ready | #практика
Если нужно отправить аналитику или финальные данные сессии, обычные HTTP-запросы могут не успеть выполниться — пользователь закрыл вкладку или перешёл на другую страницу. Для таких случаев есть
navigator.sendBeacon.Метод ставит данные в очередь на отправку и не блокирует закрытие страницы.
Базовый пример:
navigator.sendBeacon('/analytics', JSON.stringify({
event: 'page_close'
}));Метод принимает URL и данные. Запрос отправляется методом POST.
Если нужно явно указать Content-Type: application/json, лучше передать Blob:
navigator.sendBeacon(
'/analytics',
new Blob(
[JSON.stringify({ event: 'page_close' })],
{ type: 'application/json' }
)
);
Пример 1 — отправка при скрытии страницы:
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
navigator.sendBeacon('/analytics', JSON.stringify({
event: 'session_end',
time: Date.now()
}));
}
});visibilitychange часто используют для отправки последних метрик перед уходом пользователя. Обычно это работает стабильнее, чем beforeunload.Пример 2 — отправка
FormData:const data = new FormData();
data.append('event', 'scroll_depth');
data.append('value', 80);
navigator.sendBeacon('/analytics', data);
Можно отправлять строки,
FormData, Blob, URLSearchParams и некоторые бинарные типы данных.Пример 3 — проверка:
const accepted = navigator.sendBeacon('/analytics', JSON.stringify({
event: 'leave'
}));
console.log('Beacon accepted:', accepted);Метод возвращает true, если браузер принял данные в очередь на отправку. Это не гарантия доставки, но означает, что отправка была запланирована браузером.
fetch с опцией keepalive.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍12🤝9❤1
🔥19👍10❤7🤝3👎2