Привет! В этом гайде создаём аккуратный мини-виджет для выбора суммы с плавной анимацией числа, удобным ползунком и набором готовых значений.
Ключевые моменты:
• HTML: базовая разметка — крупное число, ползунок и кнопки значений.
• CSS: чистое и минималистичное оформление, понятная структура и мягкие акценты.
• JS: плавная анимация изменения суммы и синхронизация ползунка с кнопками выбора.
Такой элемент отлично подойдёт для калькуляторов, тарифов и любых интерфейсов, где пользователю нужно быстро выбрать диапазон суммы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥12👍7🤝3😁1
Тег
<colgroup> используется в таблицах, чтобы объединить несколько колонок и задать им общие стили: ширину, цвет фона, скрытие и другое.Можно использовать свойства:
• width;
• background;
• background-color;
• visibility;
• border / border-* (только при border-collapse: collapse).
Работает в паре с тегом
<col>, через который и задаются конкретные стили колонкам.Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥10👍7🤝3
Воспроизводим звук по клику — без библиотек!
Хотите добавить отзывчивости интерфейсу? Сегодня разбираем как реализовать звук клика.
Шаг 1 — создаём звук:
Шаг 2 — проигрываем при клике:
Шаг 3 — можно на конкретную кнопку:
🔥 Работает с основными форматами (
📣 Code Ready | #практика
Хотите добавить отзывчивости интерфейсу? Сегодня разбираем как реализовать звук клика.
Шаг 1 — создаём звук:
const clickSound = new Audio('/sounds/click.mp3');Шаг 2 — проигрываем при клике:
document.addEventListener('click', () => {
clickSound.currentTime = 0; // перезапуск
clickSound.play().catch(() => {}); // защита от блокировки
});Шаг 3 — можно на конкретную кнопку:
const popSound = new Audio('/sounds/pop.mp3');
document.querySelector('#btn').addEventListener('click', async () => {
try {
popSound.currentTime = 0;
await popSound.play();
} catch (_) {}
});🔥 Работает с основными форматами (
.mp3, .wav). Браузер обычно кэширует звук, но первое воспроизведение может занять долю секунды.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24❤9👍8🤝3👎1
В этой шпаргалке - основные функции объекта Math, применяемые для округления, извлечения целых частей, определения знаков и вычисления минимальных и максимальных значений. Это базовые операции, на которых держатся корректные числовые вычисления в приложениях.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍14❤7🤝2
Если один и тот же компонент в разных блоках требует разные отступы, можно использовать
:where()::where(.card, .section, .block) h2 {
margin-block: 0.5em 1em;
}:where() не повышает специфичность, поэтому можно переопределять стиль дальше, без !important.Теперь можно задавать глобальные отступы для семантики, а локальные спокойно перебивать:
.hero h2 {
margin-block: 2em 1em;
}А чтобы ограничить стили только внутри компонента, объединим
:where() с контейнером:.card :where(h2, h3, p) {
margin-block: 0.7em;
}.card получает аккуратные отступы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤12🤝10
Привет! В этом гайде создаём компактную всплывающую панель, которая появляется над выделенным текстом и позволяет мгновенно выполнить поиск в Google.
Ключевые моменты:
• HTML: минимальная разметка — текстовый блок и скрытая панель действия.
• CSS: лёгкое оформление, мягкая тень и анимация появления.
• JS: определение выделенного текста и обработка кликов вне элемента.
Такой элемент подходит для блогов, учебных материалов и рабочих интерфейсов, где пользователю важно быстро искать дополнительную информацию без лишних действий.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥12👍9🤝4
❤17🔥13👍9
В этом мини-трюке создадим эффект появления строки, когда цветной слой постепенно «проходит» по тексту и заполняет его, будто это анимация набора.
Как работает:
• data-text хранит копию строки, которую использует псевдо-элемент для заливки;
• ::before накладывается поверх и начинается с ширины 0, скрывая часть текста;
• Анимация плавно увеличивает width, открывая символы один за другим;
• border-right добавляет небольшой “курсор”, усиливая ощущение движения.
Трюк отлично показывает силу псевдо-элементов: один дублирует контент, второй управляет визуальным сценарием.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤10👍8🤝3
Определяем, что делает пользователь в input — без таймеров и дебаунсов!
Разберем, как определить, печатает ли пользователь, удаляет текст, вставляет из буфера обмена или вызывает автозамену — используя только
Шаг 1 — получаем поле:
Шаг 2 — определяем ввод символов (именно набор текста руками):
Шаг 3 — распознаём удаление:
Шаг 4 — ловим вставку из буфера обмена:
Шаг 5 — определяем другие вставочные действия (автозамена, drop и т.д.):
🔥 Позволяет строить умные поля поиска, автосохранение, динамические подсказки и разные UX-ветки без
📣 Code Ready | #практика
Разберем, как определить, печатает ли пользователь, удаляет текст, вставляет из буфера обмена или вызывает автозамену — используя только
inputType.Шаг 1 — получаем поле:
const field = document.querySelector('#search');Шаг 2 — определяем ввод символов (именно набор текста руками):
field.addEventListener('input', (e) => {
if (e.inputType === 'insertText') {
console.log('Пользователь печатает текст');
}
});Шаг 3 — распознаём удаление:
field.addEventListener('input', (e) => {
if (e.inputType.includes('delete')) {
console.log('Пользователь удаляет текст');
}
});Шаг 4 — ловим вставку из буфера обмена:
field.addEventListener('input', (e) => {
if (e.inputType === 'insertFromPaste') {
console.log('Вставка текста из буфера обмена');
}
});Шаг 5 — определяем другие вставочные действия (автозамена, drop и т.д.):
field.addEventListener('input', (e) => {
if (e.inputType.startsWith('insert') &&
e.inputType !== 'insertText' &&
e.inputType !== 'insertFromPaste') {
console.log('Автозамена или другое вставочное действие');
}
});debounce, таймеров и лишней логики.Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥13❤9🤝2