Медиазапросы хороши, но часто усложняют каскад. Современный CSS позволяет адаптировать сетку контекстно, без
@media
.
.card-grid {
display: grid;
gap: 1rem;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
transition: .3s;
}
.card-grid:has(.expanded) { grid-template-columns: 1fr; }
.card-grid:has(.card:hover) .card:not(:hover) {
opacity: .4;
transform: scale(.98);
filter: blur(1px);
}
— Контейнер, «реагирующий» на состояние внутренних элементов,
— Адаптивные layout-переходы без JS и без медиазапросов,
— Гибкость, пригодную для UI-эффектов, collapsible-контента и интерактивных сеток.
#readme #css
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥2
🏗 Разбираем Layout Shift
Когда страница загружается, а кнопки и текст смещаются — это не просто раздражает, а напрямую влияет на UX и рейтинг сайта.
В карточках:
— что такое CLS и как его измеряют,
— как находить источник смещения,
— и какие практики помогают сделать интерфейс статичным и предсказуемым.
🐸 Библиотека фронтендера
#career_merge
Когда страница загружается, а кнопки и текст смещаются — это не просто раздражает, а напрямую влияет на UX и рейтинг сайта.
В карточках:
— что такое CLS и как его измеряют,
— как находить источник смещения,
— и какие практики помогают сделать интерфейс статичным и предсказуемым.
#career_merge
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10
🧩 Задача на понимание устройства JS
В цикле навешиваются обработчики на элементы списка.
Однако при клике на любой пункт в консоль выводится одно и то же число🤔
❓ Как исправить поведение, чтобы при клике выводился правильный индекс элемента:
❤️ — Заменить var i на let i
🔥 — Заменить стрелочную функцию на обычную
⚡️— Перед циклом сделать i = 0;
🐸 Библиотека фронтендера
#code_challenge #js
В цикле навешиваются обработчики на элементы списка.
Однако при клике на любой пункт в консоль выводится одно и то же число
❤️ — Заменить var i на let i
🔥 — Заменить стрелочную функцию на обычную
⚡️— Перед циклом сделать i = 0;
#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤46⚡1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7🌚2
— Не создавайте функции прямо в JSX
— Используйте useCallback при передаче хендлеров в дочерние компоненты
— Особенно критично для списков и больших UI
#hotfix #react
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6👍5🔥3😁2❤1
Кажется, что это просто поиск элемента на странице — но под капотом браузер делает куда больше.
Он использует готовые структуры DOM и CSSOM, разбирает селектор в токены и выполняет оптимизированный поиск с кешами и хеш-таблицами.
#under_hood #js
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🥰2❤1
Пошаговое руководство по симуляции солнца, дождя, снега и грозы в интерактивном трехмерном приложении для прогноза погоды.
Автор показывает, что за красивым синтаксисом скрываются подводные камни специфичности и неожиданные баги, из-за которых старые добрые keyframes по-прежнему оказываются надёжнее.
#read_watch #react #js #ts
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1
Палиндром — это слово или фраза, которые читаются одинаково в обе стороны:
level, madam, А роза упала на лапу Азора.
const isPalindrome = str =>
(s = str.toLowerCase().replace(/[^a-zа-яё0-9]/gi, '')) === [...s].reverse().join('');
• toLowerCase()
— приводит строку к одному регистру.• replace(/[^a-zа-яё0-9]/gi, '')
— убирает все символы, кроме букв и цифр.• [...s].reverse().join('')
— переворачивает строку.• Сравниваем оригинал и перевёрнутую версию.
function isPalindrome(str) {
const s = str.toLowerCase().replace(/[^a-zа-яё0-9]/gi, '');
for (let i = 0, j = s.length - 1; i < j; i++, j--) {
if (s[i] !== s[j]) return false;
}
return true;
}
#readme #js
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1🥱1
💥 Весь октябрь -40% на курсы для разработчиков в proglib.academy
Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.
⚡️ Пока скидка действует, апдейтни свои навыки
Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.
Пока одни ждут «идеальный момент», другие просто учатся.
А потом берут ваши офферы.
⚡️ Пока скидка действует, апдейтни свои навыки
❤3
🏗️ Plugin Architecture во фронтенде
Обычно приложения растут вширь — и рано или поздно перестают помещаться в одну кодовую базу.
Плагинная архитектура решает эту проблему иначе: ядро остаётся стабильным, всё остальное — расширения.
⏬ Как это работает:
Есть core — минимальная часть с бизнес-правилами, безопасностью, логированием и общими утилитами.
А вокруг — плагины, которые подключаются через публичный API или события. Ядро не знает о них ничего — только о контракте.
⏬ Зачем это нужно:
— модульность и независимые релизы
— возможность кастомизации под клиента или регион
— развитие без трогания основного кода
🔆 VS Code, Figma, Obsidian, Grafana — все построены на этой идее.
⏯ Когда не подойдёт:
— если нет строгого API
— если плагины тесно зависят от общей логики
— если команда одна и продукт небольшой
🐸 Библиотека фронтендера
#blueprint
Обычно приложения растут вширь — и рано или поздно перестают помещаться в одну кодовую базу.
Плагинная архитектура решает эту проблему иначе: ядро остаётся стабильным, всё остальное — расширения.
Есть core — минимальная часть с бизнес-правилами, безопасностью, логированием и общими утилитами.
А вокруг — плагины, которые подключаются через публичный API или события. Ядро не знает о них ничего — только о контракте.
— модульность и независимые релизы
— возможность кастомизации под клиента или регион
— развитие без трогания основного кода
— если нет строгого API
— если плагины тесно зависят от общей логики
— если команда одна и продукт небольшой
#blueprint
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥1