Чтобы изменить стиль родителя, когда вложенный элемент находится в активном состоянии делают:
parent.classList.toggle('open', child.checked)Но CSS может делать это сам:
.card:has(.toggle:checked) .content {
max-height: 400px;
}Если внутри
.card есть элемент.toggle, который checked, то .content автоматически раскрывается.Изменение внешнего вида родителя в зависимости от действий пользователя:
.input:has(input:focus) {
border-color: #4da3ff;
}Подсветка активного пункта меню:
nav:has(a.active) {
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥13👍7🤝2😁1
В этой фишке карточки реагируют на наведение, расходясь веером и чуть приподнимаясь в 3D. Получается выразительный эффект без JS.
Как работает:
• transform на :hover наклоняет активную карточку и поднимает её над слоем;
• Соседние элементы смещаются через селектор .card:hover ~ .card, создавая веерный эффект;
• z-index позволяет hovered-элементу визуально выходить вперёд.
Такой подход легко масштабируется: можно менять угол поворота, интенсивность смещения и количество карточек.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥15❤9
Шпаргалка по DOM-событиям, связанным с взаимодействием пользователя с формами и полями ввода: изменение текста, подтверждение выбора, фокусировка, валидация, выделение и отправка данных. Эти события обеспечивают корректную обработку пользовательского ввода и управление состояниями элементов.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥13❤9🤝1
Проверяем, находится ли элемент в фокусе!
Иногда нужно понять, активен ли сейчас
Браузер хранит текущий фокус в
Проверяем, сфокусирован ли конкретный элемент:
Отслеживаем смену фокуса:
Проверяем, что фокус ушёл:
🔥 Такой подход полезен для форм, модалок, горячих клавиш, редакторов и любых интерактивных интерфейсов.
📣 Code Ready | #практика
Иногда нужно понять, активен ли сейчас
input, textarea или любой другой интерактивный элемент. Например, чтобы не открывать подсказки, не ловить горячие клавиши или корректно управлять UI.Браузер хранит текущий фокус в
document.activeElement:console.log(document.activeElement);
Проверяем, сфокусирован ли конкретный элемент:
const input = document.getElementById('username');
if (document.activeElement === input) {
console.log('Поле username сейчас в фокусе!');
}Отслеживаем смену фокуса:
document.addEventListener('focusin', (e) => {
console.log('Фокус перешёл на:', e.target);
});Проверяем, что фокус ушёл:
document.addEventListener('focusout', (e) => {
console.log('Элемент потерял фокус:', e.target);
});Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤11🤝9👍2
Привет! В этом гайде создаём компактный виджет для управления количеством — с кнопками «–» и «+», плавной анимацией и простой логикой работы.
Ключевые моменты:
• HTML: минимальная структура — контейнер, две кнопки и отображение текущего числа.
• CSS: скруглённые кнопки, hover-подсветка и микро-анимация изменения значения.
• JS: увеличение и уменьшение количества, защита от значений ниже единицы.
Такой элемент отлично подходит для корзины, карточек товаров и любых интерфейсов, где нужно управлять числом быстро и интуитивно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍13🔥8🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Remote Repositories — расширение, которое позволяет работать с репозиторием прямо в VS Code: просматривать файлы, править код, создавать коммиты и пушить изменения, без локального клона. Идеально, когда нужно быстро проверить структуру проекта или что-то поправить.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍11🔥11
Большой округлый слой поднимается снизу и покрывает элемент, создавая плавный анимационный переход. За счёт формы слоя и правильной кривой движение выглядит естественно.
Как работает:
• Псевдо-элемент ::before выступает как анимируемый заливочный слой;
• В обычном состоянии он находится за пределами кнопки;
• При наведении слой смещается вверх и перекрывает элемент, а текст своевременно меняет цвет.
Простой приём, который добавляет интерфейсу динамику без единой строки JavaScript.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤9🔥9👎1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Regex Snippets — расширение, которое добавляет набор готовых шаблонов регулярных выражений: проверка email, поиск чисел, валидация пароля, извлечение групп, работа с пробелами, датами, URL и др. Пишешь короткий префикс и получаешь готовый рабочий паттерн.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤13👍11😁1
Как избавиться от подмен в типографике?
Когда кастомный шрифт не успевает загрузиться, браузер подставляет свой стандартный
Но ещё хуже, когда
Современный CSS даёт более аккуратный и предсказуемый вариант, используй
🔥 Так даже если кастомный шрифт не загрузился, пользователь увидит чистую системную типографику - ту же, что в интерфейсе его устройства.
📣 Code Ready | #совет
Когда кастомный шрифт не успевает загрузиться, браузер подставляет свой стандартный
generic sans-serif. Это может испортить вид интерфейса: body {
font-family: "PT Sans", sans-serif;
}Но ещё хуже, когда
fallback вообще не задан, тогда интерфейс может внезапно превратиться в дефолтный serif (на Windows это часто Times New Roman):body {
font-family: "PT Sans";
}Современный CSS даёт более аккуратный и предсказуемый вариант, используй
system-ui, чтобы браузер подставил нативный системный шрифт ОС:body {
font-family: "PT Sans", system-ui;
}Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤11👍10
Отменяем старые fetch-запросы — оставляем только актуальные данные!
В поиске, автокомплите и живых фильтрах ответы от сервера могут приходить не по порядку, из-за чего показывается не самый свежий результат. Один из простых и надёжных способов избежать этого — отменять предыдущий запрос через
Проверяем поддержку:
Делаем контроллер и отправляем запрос:
Используем при вводе:
🔥 Такой приём устраняет гонки запросов, экономит сеть и гарантирует, что отображаются только последние данные — критично для поисковых полей и
📣 Code Ready | #практика
В поиске, автокомплите и живых фильтрах ответы от сервера могут приходить не по порядку, из-за чего показывается не самый свежий результат. Один из простых и надёжных способов избежать этого — отменять предыдущий запрос через
AbortController.Проверяем поддержку:
console.log("AbortController" in window);Делаем контроллер и отправляем запрос:
let controller;
function load(url) {
if (controller) controller.abort();
controller = new AbortController();
return fetch(url, { signal: controller.signal });
}
Используем при вводе:
field.addEventListener("input", () => {
load("/api/search?q=" + field.value)
.then(r => r.json())
.then(data => console.log("Актуальный ответ:", data))
.catch(e => e.name === "AbortError" || console.error(e));
});real-time UI.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍11🤝8❤1👎1