
Спойлеры на форумах – это не просто элемент дизайна, а функциональный инструмент, который скрывает текст или изображения до момента, когда пользователь решит их раскрыть. В зависимости от движка форума (phpBB, vBulletin, XenForo, Discourse или самописные решения) реализация может отличаться, но базовые принципы остаются неизменными. В 90% случаев спойлеры создаются с помощью BB-кодов или HTML-тегов, которые поддерживаются большинством популярных платформ.
Например, в phpBB стандартный синтаксис спойлера выглядит так: [spoiler]Скрытый текст[/spoiler]. Однако если форум использует расширенные редакторы (как TinyMCE или CKEditor), спойлер может добавляться через кнопку в панели инструментов. Для самописных форумов потребуется вручную прописать JavaScript-функцию, которая будет обрабатывать клик по кнопке и переключать видимость контента. Ключевой момент – убедиться, что используемый код не конфликтует с существующими скриптами форума.
Для стабильной работы спойлера важно учитывать два аспекта: кроссбраузерность и адаптивность. В Chrome и Firefox спойлеры на основе CSS-свойства display: none работают без проблем, но в Safari или старых версиях Edge могут возникать баги с анимацией. Решение – использовать visibility: hidden в сочетании с height: 0 для плавного раскрытия. На мобильных устройствах спойлеры должны корректно отображаться при тапе, а не только при клике мышью – это достигается добавлением обработчика событий touchstart.
Если форум поддерживает HTML, простейший спойлер можно создать так:
<details>
<summary>Показать спойлер</summary>
<p>Скрытый контент</p>
</details>
Этот метод не требует JavaScript и работает во всех современных браузерах. Однако для кастомизации внешнего вида (цвета кнопки, отступов) потребуется добавить CSS-стили. Пример минимального оформления:
details {
border: 1px solid #ddd;
border-radius: 4px;
padding: 0.5em;
}
summary {
cursor: pointer;
font-weight: bold;
}
Какие теги и синтаксис используют для спойлеров на разных платформах

На форумах phpBB спойлеры создаются через BBCode-теги [spoiler] и [/spoiler]. Для добавления заголовка используется параметр: [spoiler=текст]. Некоторые модификации поддерживают [hide] или [s], но стандартный вариант остаётся наиболее совместимым. Вложенные спойлеры работают не везде, поэтому их лучше избегать.
В Discourse спойлеры реализуются через Markdown-синтаксис: ???текст???. Для заголовка добавляется строка перед содержимым: ??? "Заголовок" ???текст???. Платформа автоматически преобразует это в интерактивный блок с кнопкой. Поддерживается только один уровень вложенности.
На Reddit используется синтаксис >!текст!<, где содержимое скрывается до наведения курсора. Для многострочных спойлеров каждый абзац нужно оборачивать отдельно. Альтернативный вариант – [SPOILER]текст[/SPOILER], но он работает только в некоторых сабреддитах с включёнными расширениями.
В XenForo спойлеры создаются через BBCode [spoiler] или [spoiler=заголовок]. Администраторы могут добавлять кастомные теги через плагины, например, [collapse] для сворачиваемых блоков с дополнительными стилями. Вложенные спойлеры поддерживаются, но могут ломать верстку при глубокой вложенности.
На форумах vBulletin стандартный синтаксис – [spoiler]текст[/spoiler]. Некоторые версии поддерживают [spoiler=заголовок], но это зависит от установленных модификаций. Для совместимости рекомендуется использовать базовый вариант без параметров.
В Flarum спойлеры реализуются через расширение, добавляющее тег [spoiler] или Markdown-подобный синтаксис ::: spoiler
текст
:::. Заголовок указывается в первой строке блока. Без расширения функциональность недоступна.
На GitHub скрытый текст оформляется через HTML-тег <details> с вложенным <summary>. Пример: <details><summary>Заголовок</summary>Текст</details>. Это единственный способ создать спойлер в README-файлах или issue-комментариях.
В Telegram скрытый текст помечается через ||текст||. Содержимое отображается при нажатии или выделении. Для многострочных спойлеров каждый блок нужно оборачивать отдельно. В ботах и каналах работает аналогично, но без поддержки заголовков.
Как добавить спойлер с помощью BB-кодов в популярных движках форумов

В phpBB спойлеры реализуются через теги `[spoiler]` и `[/spoiler]`. Для скрытия текста достаточно обернуть его этими тегами: `[spoiler]Секретный контент[/spoiler]`. Некоторые модификации форума поддерживают расширенный синтаксис с заголовком: `[spoiler=Подсказка]Текст[/spoiler]`, где "Подсказка" отображается на кнопке. Если стандартный BB-код не работает, проверьте наличие плагина "Advanced BBCode Box" или аналогичного в админ-панели.
На форумах vBulletin спойлеры добавляются через `[HIDE]` или `[SPOILER]`. Базовый вариант: `[SPOILER]Скрытый текст[/SPOILER]` создаёт кнопку с надписью "Показать спойлер". Для кастомизации используйте `[HIDE=Причина]Текст[/HIDE]`, где "Причина" заменяет стандартный текст кнопки. В версиях 5.x и новее может потребоваться включить опцию "BBCode Spoiler" в настройках стиля.
В движке XenForo спойлеры работают через `[SPOILER]` и `[SPOILER=Заголовок]`. Пример: `[SPOILER=Ответ]42[/SPOILER]` отобразит кнопку с текстом "Ответ", при нажатии на которую появится "42". Для многострочных спойлеров используйте переносы строк внутри тегов. Если форум использует дополнение "XenForo Enhanced Spoiler", доступны дополнительные параметры, например, `[SPOILER class="custom"]` для стилизации через CSS.
На форумах IP.Board (Invision Community) спойлеры добавляются через `[spoiler]` или `[hide]`. Стандартный синтаксис: `[spoiler]Текст[/spoiler]` – создаёт блок с кнопкой "Показать содержимое". Для версии 4.x и выше рекомендуется использовать `[hide]Текст[/hide]`, так как он поддерживает вложенные теги и лучше интегрируется с редактором. В админ-панели можно настроить отображение спойлеров в разделе "BBCode Management".
Способы скрыть текст в спойлере без плагинов и расширений
На большинстве форумов с поддержкой BBCode или HTML можно создать спойлер с помощью встроенных тегов. Например, в phpBB или vBulletin используйте конструкцию [spoiler]Скрытый текст[/spoiler], а в Discourse – [details="Заголовок"]Содержимое[/details]. Если форум поддерживает только HTML, подойдет тег <details> с атрибутом open для раскрытого состояния по умолчанию:
<details><summary>Показать/Скрыть</summary>Текст спойлера</details>– работает в большинстве современных браузеров.- Для старых версий форумов (например, IPB 3.x) используйте JavaScript-решение:
<div onclick="this.querySelector('.spoiler-content').style.display = this.querySelector('.spoiler-content').style.display === 'none' ? 'block' : 'none'"><b>Показать спойлер</b><div class="spoiler-content" style="display:none">Скрытый текст</div></div>.
Если форум ограничивает HTML, но разрешает CSS, примените псевдокласс :hover или :active для скрытия текста. Пример:
- Добавьте в сообщение блок с классом:
<div class="manual-spoiler">Наведи, чтобы увидеть<span class="hidden-text">Секретный контент</span></div>. - Вставьте CSS в сообщение (если разрешено) или в профиль пользователя:
.manual-spoiler .hidden-text { display: none; } .manual-spoiler:hover .hidden-text { display: inline; }. - Для мобильных устройств замените
:hoverна:activeили добавьте кнопку с JavaScript.
На форумах с поддержкой Markdown (GitHub, Reddit) используйте HTML-теги напрямую. В Reddit спойлер создается двойными угловыми скобками: >!Скрытый текст!<. Для GitHub Issues или Wiki подойдет HTML-вариант с <details>. Проверьте документацию форума – часто скрытые возможности описаны в разделе "Расширенное форматирование".
Настройка видимости спойлера: цвет, рамка и анимация
Цвет фона спойлера влияет на восприятие контента до и после раскрытия. Используйте контрастные оттенки для заголовка и содержимого: например, #f0f0f0 для фона заголовка и #ffffff для тела. Для темных тем форума подойдут #333333 (заголовок) и #222222 (тело). Избегайте ярких цветов – они отвлекают от текста.
Рамка спойлера задается через свойство border. Оптимальная ширина – 1px, стиль solid, цвет на 10–20% темнее фона заголовка. Пример: border: 1px solid #cccccc;. Для акцента на активном состоянии добавьте box-shadow: 0 0 5px rgba(0,0,0,0.1);. Если рамка не нужна, используйте border: none;, но оставьте отступы через padding.
Анимация раскрытия улучшает пользовательский опыт. Стандартный подход – transition: all 0.3s ease; для плавного изменения высоты. Для более сложных эффектов используйте @keyframes:
| Тип анимации | CSS-код | Применение |
|---|---|---|
| Плавное появление | opacity: 0; transition: opacity 0.3s; |
Добавляется к содержимому спойлера |
| Скольжение вниз | max-height: 0; overflow: hidden; transition: max-height 0.5s; |
Для контейнера с динамической высотой |
| Поворот стрелки | transform: rotate(0deg); transition: transform 0.3s; |
Для иконки-индикатора раскрытия |
Цвет текста в спойлере должен быть читаемым на выбранном фоне. Для светлых тем используйте #333333, для темных – #e0e0e0. Заголовок спойлера можно выделить жирным шрифтом (font-weight: bold;) или увеличенным размером (font-size: 1.1em;). Избегайте подчеркивания – оно ассоциируется с ссылками.
Для интерактивности добавьте изменение цвета заголовка при наведении. Пример: .spoiler-header:hover { background-color: #e6e6e6; }. В активном состоянии (при раскрытом спойлере) используйте другой оттенок: .spoiler-header.active { background-color: #d9d9d9; }. Это визуально сигнализирует пользователю о текущем состоянии.
Если спойлер содержит код или таблицы, задайте моноширинный шрифт для содержимого: font-family: 'Courier New', monospace;. Для выделения синтаксиса используйте библиотеки вроде Prism.js или подсветку через CSS-классы. Пример стиля для кода: background-color: #f5f5f5; padding: 10px; border-left: 3px solid #4CAF50;.
Тестируйте спойлер на разных устройствах. На мобильных экранах увеличьте отступы (padding: 12px;) и размер шрифта (font-size: 16px;). Для touch-устройств добавьте cursor: pointer; к заголовку, чтобы указать на интерактивность. Проверьте контрастность через инструменты вроде WebAIM Contrast Checker.
Типичные ошибки при создании спойлеров и как их избежать

Первая ошибка – игнорирование поддержки мобильных устройств. Около 60% пользователей форумов заходят с телефонов, но многие спойлеры не адаптированы под сенсорные экраны. Кнопки с маленькими размерами (менее 48x48 пикселей) или узкие области для нажатия вызывают раздражение. Решение: используйте CSS-свойство min-width: 100% для кнопки и padding: 12px, чтобы увеличить кликабельную зону. Проверяйте отображение на эмуляторах iOS и Android через инструменты разработчика в браузере.
Вторая проблема – отсутствие визуальной обратной связи при взаимодействии. Пользователь не понимает, открыт спойлер или нет, если нет явных изменений: смены цвета кнопки, анимации или текста "Скрыть/Показать". Добавьте псевдокласс :active для кнопки и атрибут aria-expanded для скринридеров. Пример: button[aria-expanded="true"] { background: #4CAF50; }. Это снижает количество случайных кликов на 30%.
Третья ошибка – перегрузка спойлера тяжелым контентом. Вставка изображений в формате PNG с разрешением 4K или видеоплееров без ленивой загрузки замедляет страницу. Оптимизируйте медиафайлы: сжимайте изображения через TinyPNG (до 70% уменьшения веса), используйте формат WebP, а для видео – loading="lazy" и превью. Если спойлер содержит код, оборачивайте его в <pre><code> с подсветкой синтаксиса через Prism.js.
Последняя распространенная ошибка – некорректная работа спойлеров вложенных друг в друга. При клике на внутренний спойлер часто срабатывает и внешний, что ломает логику. Решается добавлением event.stopPropagation() в обработчик клика внутреннего спойлера. Пример: innerSpoiler.addEventListener('click', (e) => { e.stopPropagation(); toggleSpoiler(e.target); });. Тестируйте вложенность на глубину не менее 3 уровней.
Примеры готовых решений для спойлеров на PHPBB, vBulletin и Discourse

PHPBB предлагает встроенный BBCode для спойлеров, который активируется через панель администратора. В разделе "Сообщения" → "BBCodes" добавьте новый тег с параметрами:
[spoiler]{TEXT}[/spoiler]– базовый вариант;[spoiler=Заголовок]{TEXT}[/spoiler]– с заголовком;- HTML-замена:
<div class="spoiler"><div class="spoiler-title">{OPTION}</div><div class="spoiler-content" style="display:none">{TEXT}</div></div>.
Для работы требуется CSS-стиль: .spoiler-title { cursor: pointer; } .spoiler-content { margin-top: 5px; }. Расширение "Spoiler BBCode" автоматизирует процесс.
vBulletin использует плагины или модификации шаблонов. Стандартный способ – через "Продукты и плагины" → "Добавить новый BBCode". Пример настроек:
- Тег:
spoiler; - Замена:
<div onclick="this.querySelector('.spoiler-text').style.display = this.querySelector('.spoiler-text').style.display === 'none' ? 'block' : 'none'"><b>Спойлер:</b> <span class="spoiler-text" style="display:none">{param}</span></div>; - Пример:
[spoiler]Скрытый текст[/spoiler].
Для vBulletin 5.x рекомендуется плагин "Spoiler BBCode for vB5", добавляющий поддержку через JavaScript без редактирования шаблонов.
Discourse предоставляет нативный синтаксис спойлеров через Markdown: %%спойлер%% или HTML-блок <details><summary>Заголовок</summary>Скрытый текст</details>. Для кастомизации используйте тему-компонент "Spoiler Alert", который позволяет:
- Настраивать анимацию разворачивания;
- Менять цвет фона и текста;
- Добавлять иконки (например, ⚠️).
Установите компонент через админ-панель: "Настройки" → "Темы" → "Импортировать". Поддерживается совместимость с плагинами типа "Discourse Spoiler Tags".
Для PHPBB альтернативой BBCode служит расширение "Advanced Spoiler", добавляющее:
- Поддержку вложенных спойлеров;
- Настройку скорости анимации;
- Возможность скрывать изображения и видео.
Установите через Composer: composer require alfredoramos/spoiler-extension. После активации в ACP настройте права доступа для групп пользователей.
vBulletin 4.x требует ручного добавления JavaScript. В шаблоне headinclude вставьте:
<script>
function toggleSpoiler(element) {
var content = element.nextElementSibling;
content.style.display = content.style.display === 'none' ? 'block' : 'none';
}
</script>
Затем в BBCode-замене используйте: <div onclick="toggleSpoiler(this)" style="cursor:pointer">Показать спойлер</div><div style="display:none">{param}</div>. Метод работает без плагинов, но не поддерживает заголовки.
Discourse позволяет расширять функционал через плагины на Ruby. Пример для добавления спойлеров с паролем:
- Создайте файл
plugin.rbв директорииplugins/; - Добавьте код:
after_initialize do
add_to_serializer(:post, :spoiler_password) { object.custom_fields["spoiler_password"] }
register_editable_post_custom_field :spoiler_password
end
Используйте синтаксис [spoiler password="123"]Текст[/spoiler]. Для работы требуется пересборка контейнера: ./launcher rebuild app.
Сравнение решений:
| Платформа | Метод | Особенности | Сложность |
|---|---|---|---|
| PHPBB | BBCode/Расширение | Вложенность, CSS-стили | Низкая |
| vBulletin | Плагин/JS | Анимация, совместимость с vB5 | Средняя |
| Discourse | Markdown/HTML/Плагин | Пароли, иконки, темы | Высокая |
