
- Главная
- Каталог
- Интернет технологии
- Code Ready | Frontend
Code Ready | Frontend
Авторский канал по Frontend разработке.
Статистика канала
• Наглядно разобрано, как оба инструмента на самом деле создают и обновляют DOM — Virtual DOM vs Incremental DOM;
• Показано, что происходит под капотом при рендерах, эффектах, асинхронности и архитектуре приложений;
• Объясняется, почему одинаковые задачи в React и Angular приводят к разным затратам ресурсов, сборке и поведению интерфейса.
🔊 Продолжайте читать на Habr!
touch-action позволяет явно указать браузеру, какие жесты разрешены, и тем самым улучшить отзывчивость интерфейса.
Если элемент — обычная кнопка или ссылка, можно оставить только базовое взаимодействие:
.button {
touch-action: manipulation;
}
{}
В большинстве современных браузеров это убирает ожидание двойного тапа и делает нажатие более мгновенным (особенно для кастомных контролов).
Это полезно для кнопок, карточек, меню и любых интерактивных элементов, где важна отзывчивость:
.card {
touch-action: manipulation;
}
{}
Для элементов с горизонтальным свайпом можно разрешить только нужное направление:
.slider {
touch-action: pan-x;
}
{}
text-box-edge задаёт, по каким визуальным линиям текста нужно обрезать вертикальные края блока, когда используется text-box-trim. Это помогает более точно контролировать высоту текстового контейнера.
Границы текста можно задать разными способами.
Верхняя граница (top-edge): • cap — по верхушкам заглавных букв; • ex — по высоте строчных букв; • text — по фактическому верху видимых символов. Нижняя граница (bottom-edge): • alphabetic — по базовой линии текста; • text — по самой нижней части символов (включая «хвосты»).Отлично подходит для числовых полей, дат и диапазонов, делая валидацию более наглядной.
ResizeObserver — нативный Web API для отслеживания изменения размеров DOM-элементов. Позволяет реагировать на пересчёт layout без window.resize, опроса размеров и сторонних библиотек.
Особенно полезен для адаптивных компонентов, canvas, виртуализации и сложных UI, где размер элемента меняется независимо от окна.
Создаём наблюдатель:
const observer = new ResizeObserver(entries => {
entries.forEach(entry => {
console.log(entry.contentRect.width, entry.contentRect.height);
});
});{}
Колбэк вызывается после пересчёта layout в отдельной фазе доставки уведомлений (обычно до этапа отрисовки). Уведомления могут батчиться браузером.
Если внутри колбэка менять размеры наблюдаемого элемента, можно получить предупреждение: ResizeObserver loop limit exceeded или ResizeObserver loop completed with undelivered notifications. Это защита от бесконечных циклов перерасчёта.
Пример 1 — отслеживание размера элемента:
const box = document.querySelector('.box');
observer.observe(box);{}
entry.contentRect содержит размеры content box — области содержимого без padding, border и margin.
Для более точных измерений лучше использовать contentBoxSize или borderBoxSize.
Пример 2 — адаптация UI под ширину контейнера:
const container = document.querySelector('.container');
const responsiveObserver = new ResizeObserver(entries => {
const { width } = entries[0].contentRect;
if (width < 500) {
container.classList.add('compact');
} else {
container.classList.remove('compact');
}
});
responsiveObserver.observe(container);{}
Подходит для container-based адаптивности, когда поведение зависит от размера контейнера, а не viewport. (Для чисто стилевых задач также можно использовать CSS Container Queries.)
Пример 3 — работа с несколькими элементами:
document.querySelectorAll('.widget')
.forEach(el => observer.observe(el));{}
Один ResizeObserver может отслеживать любое количество элементов — браузер оптимизирует доставку уведомлений.
Пример 4 — точные размеры через borderBoxSize:
const preciseObserver = new ResizeObserver(entries => {
for (const entry of entries) {
const size = Array.isArray(entry.borderBoxSize)
? entry.borderBoxSize[0]
: entry.borderBoxSize;
console.log(size.inlineSize, size.blockSize);
}
});{}
borderBoxSize учитывает padding и border (аналог box-модели border-box). В современных браузерах поддержка хорошая, но исторически API различался, поэтому часто делают фоллбек на contentRect.
Пример 5 — прекращение наблюдения:
observer.unobserve(box); // перестать следить за конкретным элементом
observer.disconnect(); // отключить наблюдатель полностью{}
Важно отключать наблюдение для удалённых элементов, чтобы избежать лишних ссылок и потенциальных утечек памяти.
ResizeObserver — базовый инструмент для построения адаптивных компонентов, реагирующих на реальные размеры контейнера, а не только на размер окна.
div. Псевдоэлемент с отрицательным z-index решает задачу.
Создаём локальный стек наложения, чтобы слой оставался только внутри компонента:
.card {
position: relative;
z-index: 0;
}{}
Теперь можно безопасно увести псевдоэлемент назад:
.card::before {
position: absolute;
inset: 0;
z-index: -1;
}{}
Так слой окажется позади содержимого, но не исчезнет под соседними блоками и фоном страницы.
Можно использовать это для градиентов, свечения, теней, интерактивных эффектов и сложных декоративных подложек:
.card::before {
background: radial-gradient(circle, #4da3ff, transparent);
}{}
Отзывы канала
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Code Ready | Frontend — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 22.7K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 13.3, количество отзывов – 1, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2937.06 ₽, а за 8 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий