This media is not supported in your browser
VIEW IN TELEGRAM
Свойство
touch-action управляет взаимодействием с сенсорным экраном и напоминает более распространённое свойство pointer-events, которое регулирует взаимодействие мышкой.Примеры использования:
• none — запрещает все типы взаимодействий.
• auto — разрешает все типы взаимодействия.
• manipulation — элемент можно сдвигать и зумить.
• pan-down — элемент можно смещать только если начать движение снизу вверх.
• pan-up — элемент можно смещать только если начать движение сверху вниз.
• pinch-zoom — элемент можно зазумить щипком.
Он может пригодится, например, чтобы отключить обработку прикосновений браузером по умолчанию на сенсорных экранах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍10❤6🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Emmet Cheat Sheet — сайт-шпаргалка для Emmet. Здесь собраны все аббревиатуры и формулы, при написании которых раскрываются большие куски кода, а это очень ускоряет разработку сайта.
📌 Ссылочка: docs.emmet.io/cheat-sheet
📣 Code Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍9🔥5🤝3
В этой статье:
• На примерах показывается, в каких задачах Flexbox удобнее, а где Grid даёт более чистую и масштабируемую архитектуру;
• Разбираются типичные кейсы верстки, с кодом и объяснением поведения каждого подхода;
• Объясняется ключевая разница: Flex как инструмент для потокового выравнивания и Grid как система для построения структуры интерфейса.
🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤝9❤8
Почему hover ломает UX на мобильных и как это исправить?
На тач-устройствах
Обычно стили пишут без условий:
И в итоге на мобильных интерфейс начинает вести себя непредсказуемо.
Есть нативный способ разделить поведение устройств:
Теперь hover-эффекты работают только на устройствах, где реально есть курсор.
Можно отдельно настроить поведение для тач-устройств:
🔥 Это мелочь, но она резко улучшает UX и избавляет от странных багов на мобильных, интерфейс становится предсказуемым и логичным.
📣 Code Ready | #совет
На тач-устройствах
:hover ведёт себя странно: может залипать, срабатывать после тапа или вообще ломать визуальные состояния. Это особенно заметно в карточках, меню и кнопках.Обычно стили пишут без условий:
.button:hover {
background: #000;
}И в итоге на мобильных интерфейс начинает вести себя непредсказуемо.
Есть нативный способ разделить поведение устройств:
@media (hover: hover) {
.button:hover {
background: #000;
}
}Теперь hover-эффекты работают только на устройствах, где реально есть курсор.
Можно отдельно настроить поведение для тач-устройств:
@media (hover: none) {
.button:active {
background: #000;
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤9🤝7🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт где собраны основные свойства, селекторы и приёмы CSS с примерами кода в максимально сжатом виде. Формат позволяет быстро находить нужные конструкции и сразу применять их. Подходит как быстрый справочник во время разработки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍10🤝8
В интерфейсах с линейными списками важно быстро направлять внимание пользователя. Один из приёмов — приглушать все элементы, кроме активного.
Как работает:
• контейнер управляет состоянием через :hover;
• все элементы получают сниженный opacity;
• активный элемент переопределяет это состояние;
• transform усиливает ощущение глубины.
Так можно управлять вниманием в списках и панелях без сложной логики.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍7🔥5🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Нужно быстро привести CSV-файл к читаемому виду?
CSV to Table — позволяет отобразить содержимое CSV как таблицу прямо в VS Code. Данные выравниваются по столбцам, становятся наглядными и удобными для анализа без открытия сторонних инструментов. Полезно при работе с выгрузками, логами и любыми табличными данными.
📣 Code Ready | #vscode
CSV to Table — позволяет отобразить содержимое CSV как таблицу прямо в VS Code. Данные выравниваются по столбцам, становятся наглядными и удобными для анализа без открытия сторонних инструментов. Полезно при работе с выгрузками, логами и любыми табличными данными.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤8🤝6🔥2
Почему ломается scroll внутри flex?
Очень частый баг: делаешь колонку с
Кажется, всё корректно, но flex-элемент по умолчанию не хочет сжиматься по высоте.
Решение — явно разрешить это:
Теперь блок может уменьшаться и скролл начинает работать как ожидается:
Если scroll не работает во flex — почти всегда не хватает именно
🔥 Это полезно для для чатов, таблиц, sidebar и любых вложенных flex-контейнеров.
📣 Code Ready | #совет
Очень частый баг: делаешь колонку с
overflow: auto, но скролл не появляется, и блок просто вылезает за пределы контейнера..layout {
display: flex;
flex-direction: column;
}
.content {
overflow: auto;
}Кажется, всё корректно, но flex-элемент по умолчанию не хочет сжиматься по высоте.
Решение — явно разрешить это:
.content {
min-height: 0;
}Теперь блок может уменьшаться и скролл начинает работать как ожидается:
.content {
min-height: 0;
overflow: auto;
}Если scroll не работает во flex — почти всегда не хватает именно
min-height: 0.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥10🤝8👍3
CSS Grid Layout — представляет собой двумерную систему сеток в CSS. Это пересекающийся набор горизонтальных и вертикальных линий, образующих колонки и строки.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🤝9👍5🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
ESLint — это не просто подсветка ошибок, а инструмент анализа кода. Он находит потенциальные баги, антипаттерны и несоответствие правилам проекта, а также умеет автоматически исправлять часть проблем. Работает через конфиги и плагины (React, Next.js и др.), помогает держать код единообразным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤7🤝7🔥3
В интерфейсах с карточками и списками важно ограничивать объём текста, чтобы сохранить аккуратную сетку, но при этом давать пользователю возможность раскрыть полный контент без перегрузки UI.
Как работает:
• -webkit-line-clamp ограничивает количество строк;
• checkbox используется как источник состояния;
• селекторы управляют отображением текста;
• кнопка синхронизируется с состоянием.
Такой подход позволяет управлять длинным контентом декларативно, без событий и дополнительных зависимостей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9❤7🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
Удобный справочник, где собраны ключевые аспекты веб-разработки, а также JS: базовый синтаксис, работа с DOM, события, асинхронность, взаимодействие с API. Плюс затронуты важные вещи из Node.js, сборка, инструменты и общая архитектура. Всё подано в сжатом формате, чтобы быстро освежить знания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤝8🔥6❤2
Как отодвинуть элемент в конец без justify-content?
Частая задача — в одной строке есть несколько элементов, и один из них нужно прижать к правому краю. Обычно начинают оборачивать всё в дополнительные контейнеры.
Но это ломает контроль над расстояниями между остальными элементами.
Есть более точечный и управляемый способ:
auto-отступ забирает всё свободное пространство и отталкивает элемент вправо:
Это работает не только для одного элемента, но и для групп:
Теперь можно точно управлять
🔥 Один
📣 Code Ready | #совет
Частая задача — в одной строке есть несколько элементов, и один из них нужно прижать к правому краю. Обычно начинают оборачивать всё в дополнительные контейнеры.
.nav {
display: flex;
justify-content: space-between;
}Но это ломает контроль над расстояниями между остальными элементами.
Есть более точечный и управляемый способ:
.push {
margin-left: auto;
}auto-отступ забирает всё свободное пространство и отталкивает элемент вправо:
<nav class="nav">
<span>Logo</span>
<span class="push">Menu</span>
</nav>
Это работает не только для одного элемента, но и для групп:
.group {
margin-left: auto;
}Теперь можно точно управлять
layout без изменения поведения остальных элементов.margin-left: auto заменяет сложные flex-настройки и даёт контроль над выравниванием.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥8❤5🤝5
Разбираем как не словить утечку памяти на обработчиках событий!
Одна из частых причин утечек — обработчик повесили, а снять забыли. Особенно это неприятно, когда событие висит не на локальном элементе, а на чём-то долгоживущем:
Компонента уже нет, а
Правильнее сразу закладывать
Главное — снимать нужно ту же самую функцию.
Вот так не сработает:
Это две разные функции, даже если выглядят одинаково.
Нормальный вариант:
Ещё момент —
Так обработчик не снимется, потому что
Когда обработчиков несколько, удобно использовать
А если обработчик нужен только один раз:
После первого вызова он удалится сам. Важный нюанс: удалённый 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
🔥14❤8🤝7