Home » Как создавать сворачиваемые секции с помощью CSS
Как создавать сворачиваемые секции с помощью CSS

Как создавать сворачиваемые секции с помощью CSS

В этой статье разберёмся, как создавать сворачиваемые секции (collapsible sections) только с помощью CSS — без костылей на JS, без лишних зависимостей и головной боли. Почему это важно? Потому что иногда хочется сделать интерфейс удобнее, не тащить лишний JavaScript, не плодить баги и не усложнять поддержку. Особенно если речь идёт о документации, админках, вики, настройках серверов или даже о простых HTML-дашбордах. Всё, что нужно — это немного CSS-магии и пара строк разметки. Расскажу, как это работает, как быстро внедрить, приведу примеры, кейсы, сравню с другими подходами, а ещё покажу, как это может пригодиться в автоматизации и скриптах. Погнали!

Как это работает?

Сворачиваемые секции — это такие элементы интерфейса, которые можно раскрывать и скрывать по клику. Обычно для этого используют JavaScript, но современные браузеры позволяют реализовать это только на CSS, используя элементы <details> и <summary>, а также некоторые трюки с чекбоксами и псевдоклассами.

  • <details> и <summary>: Семантический и кроссбраузерный способ. Работает из коробки, поддерживается всеми современными браузерами.
  • Чекбоксы + CSS: Более гибкий способ, если нужно кастомизировать внешний вид или поведение.
  • CSS-анимации и переходы: Можно добавить плавность, чтобы всё выглядело аккуратно.

Всё это позволяет делать интерфейс интерактивнее, не жертвуя производительностью и безопасностью. Особенно актуально, если вы настраиваете веб-интерфейсы для серверов, пишете документацию или делаете внутренние панели управления.

Как быстро и просто всё настроить?

Давайте разберём оба подхода — от самого простого к чуть более продвинутому.

1. Семантический способ: <details> и <summary>

Это самый быстрый и надёжный вариант. Просто вставляете в HTML:


<details>
<summary>Настройки сервера</summary>
<p>Здесь можно указать параметры запуска, выбрать порты, задать переменные окружения и т.д.</p>
</details>

Выглядит просто, работает сразу. Можно стилизовать через CSS:


details {
margin-bottom: 1em;
border: 1px solid #ccc;
border-radius: 4px;
padding: .5em;
background: #f9f9f9;
}
summary {
font-weight: bold;
cursor: pointer;
outline: none;
}
details[open] {
background: #e0f7fa;
}

Плюсы:

  • Работает без JS
  • Семантика (доступность, SEO, поддержка скринридеров)
  • Простота внедрения

Минусы:

  • Ограниченная кастомизация summary (но можно обойти, если нужно)
  • Не все старые браузеры поддерживают (но это уже неактуально для большинства задач)

2. Кастомный способ: чекбокс + CSS

Если хочется больше контроля над внешним видом или поведением, можно использовать чекбокс и псевдоклассы:


<input type="checkbox" id="toggle1" hidden>
<label for="toggle1">Показать логи</label>
<div class="collapsible">
<pre>[2024-06-01 12:00] Server started...</pre>
</div>


.collapsible {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
input[type="checkbox"]:checked + label + .collapsible {
max-height: 500px; /* или auto, но с auto transition не работает */
}
label {
cursor: pointer;
font-weight: bold;
color: #00796b;
}

Плюсы:

  • Полная кастомизация
  • Можно делать вложенные секции, анимации, иконки и т.д.

Минусы:

  • Чуть больше разметки
  • Нужно следить за уникальностью id
  • Не такая семантика, как у <details>

Примеры, схемы, практические советы

Давайте сравним оба подхода на практике. Вот таблица:

Метод Плюсы Минусы Когда использовать
<details> + <summary>
  • Минимум кода
  • Семантика
  • Доступность
  • SEO
  • Ограниченная кастомизация
  • Не все браузеры (IE11)
Документация, настройки, где важна доступность
Чекбокс + CSS
  • Гибкость
  • Любой дизайн
  • Вложенные секции
  • Больше кода
  • Меньше семантики
Кастомные UI, панели управления, дашборды

Положительный кейс

Внутренняя вики для команды DevOps: используем <details> для разделов “Как поднять VPN”, “Бэкапы”, “Мониторинг”. Всё читаемо, быстро, не надо тянуть JS. Доступно даже с мобильника.

Отрицательный кейс

Пытались сделать кастомные секции с чекбоксами для сложной формы настроек, но забыли про уникальные id — всё ломалось, секции раскрывались не те. Решение: генерировать id динамически или использовать <details> там, где не нужна суперкастомизация.

Команды и сниппеты

Если вы работаете с генерацией HTML (например, через pandoc, mkdocs, hugo), можно вставлять такие секции прямо в markdown:


::: details "Показать конфиг nginx"
server {
listen 80;
server_name example.com;
...
}
:::

Для ручной вставки — просто копируйте шаблон:


<details>
<summary>Показать конфиг nginx</summary>
<pre>server {
listen 80;
server_name example.com;
...
}</pre>
</details>

Если хочется автоматизировать вставку секций в документацию, можно использовать утилиты типа pandoc или mkdocs с поддержкой markdown-экстеншенов.

Похожие решения, программы и утилиты

  • markdown-it — поддерживает расширения для collapsible секций.
  • Docusaurus — генератор документации с поддержкой collapsible секций.
  • Typora — редактор markdown с поддержкой <details>.

Статистика и сравнение с другими решениями

Сравним подходы по производительности и удобству:

Решение Время загрузки Зависимости Доступность Гибкость
CSS-only (<details>) Мгновенно Нет Высокая Средняя
CSS-only (чекбокс) Мгновенно Нет Средняя Высокая
JS-фреймворки (React/Vue) Дольше Да Зависит от реализации Максимальная

Интересный факт: GitHub поддерживает <details> прямо в markdown-issue и pull request, так что можно скрывать логи, конфиги, большие блоки текста.

Нестандартные способы использования

  • Скрывать большие логи или дампы в отчётах CI/CD прямо в HTML-отчётах.
  • Делать FAQ или справку по серверу, где каждый вопрос — это <details>.
  • Встраивать collapsible секции в email-отчёты (работает не везде, но в некоторых почтовиках — да).
  • Использовать для скрытия/раскрытия блоков с чувствительной информацией (пароли, ключи) в приватной документации.

Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?

  • Можно генерировать документацию с collapsible секциями автоматически из скриптов (например, парсить логи и оборачивать их в <details>).
  • Внутри админ-панелей можно делать компактные интерфейсы без JS, что ускоряет загрузку и снижает риски XSS.
  • В скриптах для CI/CD можно формировать HTML-отчёты с секциями для каждого шага билда или деплоя.
  • Внутри внутренних вики или knowledge base можно структурировать большие объёмы информации, не перегружая страницу.

Вывод — заключение и рекомендации

Сворачиваемые секции на CSS — это быстрый, надёжный и безопасный способ сделать интерфейс удобнее, не жертвуя производительностью и поддерживаемостью. Если вам нужно быстро добавить collapsible-блоки в документацию, настройки, дашборды или админки — используйте <details> и <summary>. Если хочется больше кастома — чекбоксы и CSS вам в помощь. Не тащите лишний JS, если можно обойтись без него, особенно в проектах, где важна безопасность и скорость.

Рекомендую:

  • Для документации и справки — <details>
  • Для кастомных UI — чекбоксы + CSS
  • Для автоматизации — генерируйте такие секции прямо из скриптов

Если вы ищете быстрый и надёжный хостинг для своих проектов — заказывайте VPS или выделенный сервер прямо на этом блоге. Всё для того, чтобы ваши проекты работали стабильно и быстро!

Официальные ресурсы для изучения:

Пробуйте, внедряйте, делитесь опытом — и пусть ваши интерфейсы будут не только функциональными, но и удобными!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked