Не забывайте про <details>! Скрытая сила HTML: как <details> превращает статичные страницы в интерактивные интерфейсы?
В эпоху сложных JavaScript-фреймворков мы часто забываем о простых и мощных возможностях чистого HTML. Сегодня поговорим о теге, который может кардинально упростить вашу разработку.
Лучший код — это тот, который не нужно писать.
<details>
— это нативный HTML-элемент для создания раскрывающихся блоков контента. Никакого JavaScript, никаких внешних библиотек — чистая семантика и доступность из коробки.
<details>
<summary>Нажми, чтобы узнать секрет</summary>
<p>JavaScript тебе больше не нужен! 🎉</p>
</details>
JavaScript тебе больше не нужен! 🎉
Результат: интерактивный элемент, который работает везде — от старых браузеров до скринридеров.
Было:
// 50+ строк кода для простого аккордеона
document.querySelectorAll('.faq-item').forEach(item => {
item.addEventListener('click', function() {
this.classList.toggle('active');
const content = this.querySelector('.faq-content');
content.style.maxHeight = content.style.maxHeight
? null
: content.scrollHeight + 'px';
});
});
Стало:
<details class="faq-item">
<summary>Как отменить подписку?</summary>
<p>Зайдите в настройки профиля → Подписки → Отменить</p>
</details>
<details class="faq-item">
<summary>Можно ли вернуть деньги?</summary>
<p>Да, в течение 14 дней с момента покупки</p>
</details>
Зайдите в настройки профиля → Подписки → Отменить
Да, в течение 14 дней с момента покупки
/* Анимированное раскрытие */
details {
--animation-duration: 300ms;
--animation-timing: cubic-bezier(0.4, 0, 0.2, 1);
}
details summary {
display: flex;
align-items: center;
gap: 0.5rem;
}
details[open] summary {
margin-bottom: 1rem;
}
/* Плавное появление контента */
details > *:not(summary) {
animation: slideDown var(--animation-duration) var(--animation-timing);
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
Вау! Вы только что увидели, как простой <details>
превращается в красивый интерактивный элемент!
Этот пример демонстрирует:
И всё это без единой строчки JavaScript!
Подход | Размер JS | Время загрузки | FCP | Доступность |
---|---|---|---|---|
jQuery accordion | 89KB | 450ms | 1.2s | ⭐⭐⭐ |
React компонент | 142KB | 680ms | 1.5s | ⭐⭐⭐⭐ |
Vanilla JS | 12KB | 180ms | 0.8s | ⭐⭐⭐ |
<details> | 0KB | 0ms | 0.4s | ⭐⭐⭐⭐⭐ |
Вывод: нативное решение выигрывает по всем параметрам.
<details>
и <summary>
— это пример того, как платформа эволюционирует, предоставляя нативные решения для типовых задач.
Используя семантичный HTML вместо JavaScript-костылей, мы получаем:
Сложность — враг надёжности. Выбирайте простые решения, когда это возможно.
В следующий раз, прежде чем тянуться за jQuery или писать компонент React, спросите себя: “А может, просто <details> ?”
Хотите больше статей о современной веб-разработке? Подписывайтесь на EasyAdvice и откройте для себя элегантную простоту веба 🚀