Code Ready | Frontend
Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_c РКН: https://clck.ru/3NJCKs Реклама на бирже: https://telega.in/c/code_ready
Ko'proq ko'rsatish📈 Telegram kanali Code Ready | Frontend analitikasi
Code Ready | Frontend (@code_ready) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 21 702 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 954-o'rinni va Rossiya mintaqasida 30 266-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 21 702 obunachiga ega bo‘ldi.
26 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 213 ga, so‘nggi 24 soatda esa 2 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 8.16% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.47% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 771 marta ko‘riladi; birinchi sutkada odatda 971 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 23 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent css, браузер, интерфейс, загрузка, api kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Авторский канал по Frontend разработке.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Автор: @energy_c
РКН: https://clck.ru/3NJCKs
Реклама на бирже: https://telega.in/c/code_ready”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 27 Avgust, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
input. Например: кастомные OTP-поля, PIN-коды, маски или декоративные формы.
CSS позволяет управлять цветом курсора ввода через caret-color:
input {
caret-color: red;
}
Обычно его используют, чтобы изменить цвет курсора под дизайн. Но есть и такой приём.
Если задать прозрачный цвет, курсор просто исчезнет:
input {
caret-color: transparent;
}
Поле остаётся полностью рабочим: текст вводится, фокус есть, клавиатура открывается, но мигающий caret не отвлекает пользователя.
Это удобно для кастомных UI: PIN-поля, игровые интерфейсы, терминалы, текстовые эффекты.
.otp-input {
letter-spacing: .5em;
caret-color: transparent;
}
🔥 В итоге можно делать аккуратные кастомные input-интерфейсы. Нюанс: скрытая каретка может немного ухудшать UX — пользователь не видит позицию ввода.
📣 Code Ready | #советОставляю ссылочку: GitHub 📱📣 Code Ready | #репозиторий
performance.now — монотонное измерение прошедшего времени!
performance.now() — Web API для точного измерения времени выполнения и длительности операций. В отличие от Date.now(), возвращает монотонно возрастающее время с дробной точностью.
Значение (DOMHighResTimeStamp) — миллисекунды от time origin (performance.timeOrigin), обычно начала навигации документа. Точность может ограничиваться браузером из соображений безопасности.
Простейшее измерение:
const start = performance.now();
doHeavyWork();
const end = performance.now();
console.log(`Время: ${end - start} ms`);
performance.now() удобен для профилирования синхронных операций и поиска узких мест в коде.
Пример 1 — измерение функции:
function measure(fn) {
const t0 = performance.now();
fn();
const t1 = performance.now();
return t1 - t0;
}
console.log("A:", measure(runA));
console.log("B:", measure(runB));
Один замер может быть неточным из-за JIT-компиляции, GC и фоновых процессов браузера, поэтому для корректного сравнения алгоритмов лучше делать несколько прогонов.
Пример 2 — измерение асинхронного кода:
async function measureAsync(fn) {
const t0 = performance.now();
await fn();
return performance.now() - t0;
}
measureAsync(fetchData)
.then(t => console.log("Время операции:", t));
Здесь измеряется общее прошедшее время операции, включая ожидание промиса.
Пример 3 — проверка бюджета кадра:
const t0 = performance.now();
renderLargeList();
const t1 = performance.now();
if (t1 - t0 > 16.7) {
console.warn("JS-часть кадра превысила бюджет (~16.7ms при 60Hz)");
}
При 120Hz бюджет кадра уже около 8.3 ms, и в него входит не только выполнение JS, но и layout, paint и compositing.
Пример 4 — разница с Date.now:
console.log(Date.now()); // системное время
console.log(performance.now()); // монотонное время
Date.now() может изменяться при корректировке системных часов, тогда как performance.now() монотонно увеличивается в рамках текущего контекста выполнения.
🔥 performance.now() — базовый инструмент для ручного профилирования производительности и быстрых замеров в UI-коде.
📣 Code Ready | #практика• контейнер получает scroll-snap-type, который включает режим фиксации прокрутки; • каждая секция занимает высоту экрана через 100vh; • scroll-snap-align указывает точку прилипания; • режим mandatory гарантирует чёткую остановку на каждом экране.Это чистый нативный способ собрать лендинг, презентационный экран или onboarding без JS. 📣 Code Ready | #фишка
• Наглядно разобрано, как оба инструмента на самом деле создают и обновляют DOM — Virtual DOM vs Incremental DOM;
• Показано, что происходит под капотом при рендерах, эффектах, асинхронности и архитектуре приложений;
• Объясняется, почему одинаковые задачи в React и Angular приводят к разным затратам ресурсов, сборке и поведению интерфейса.
🔊 Продолжайте читать на Habr!📣 Code Ready | #статья
touch-action позволяет явно указать браузеру, какие жесты разрешены, и тем самым улучшить отзывчивость интерфейса.
Если элемент — обычная кнопка или ссылка, можно оставить только базовое взаимодействие:
.button {
touch-action: manipulation;
}
В большинстве современных браузеров это убирает ожидание двойного тапа и делает нажатие более мгновенным (особенно для кастомных контролов).
Это полезно для кнопок, карточек, меню и любых интерактивных элементов, где важна отзывчивость:
.card {
touch-action: manipulation;
}
Для элементов с горизонтальным свайпом можно разрешить только нужное направление:
.slider {
touch-action: pan-x;
}
🔥 В итоге интерфейс ощущается быстрее, уменьшаются случайные зумы и лишние жесты, без JS. Используйте точечно на интерактивных элементах.
📣 Code Ready | #советtext-box-edge задаёт, по каким визуальным линиям текста нужно обрезать вертикальные края блока, когда используется text-box-trim. Это помогает более точно контролировать высоту текстового контейнера.
Границы текста можно задать разными способами.
Верхняя граница (top-edge): • cap — по верхушкам заглавных букв; • ex — по высоте строчных букв; • text — по фактическому верху видимых символов. Нижняя граница (bottom-edge): • alphabetic — по базовой линии текста; • text — по самой нижней части символов (включая «хвосты»).Отлично подходит для числовых полей, дат и диапазонов, делая валидацию более наглядной. 📣 Code Ready | #свойство
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 — базовый инструмент для построения адаптивных компонентов, реагирующих на реальные размеры контейнера, а не только на размер окна.
📣 Code Ready | #практика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 | #советstartsWith(), endsWith() и includes() используются для логических проверок содержимого строки, а indexOf() и lastIndexOf() — для получения позиции первого и последнего вхождения подстроки.
На изображении собраны базовые методы строкового поиска, которые покрывают большинство повседневных задач при работе с текстом и данными.
Сохраните, чтобы не забыть!
📣 Code Ready | #ресурсы• position: sticky фиксирует элемент относительно области прокрутки, но только в пределах родительской секции; • top: 0 задаёт точку, в которой заголовок начинает «прилипать» к верху окна; • при появлении следующей секции предыдущий заголовок автоматически вытесняется новым; • эффект полностью декларативный и не требует отслеживания прокрутки.Это простой способ улучшить навигацию и читаемость длинных страниц без дополнительной логики. 📣 Code Ready | #фишка
