Как сделать спойлер в html
Перейти к содержимому

Как сделать спойлер в html

  • автор:

Как сделать спойлер на сайте

Как сделать спойлер на сайте

На этом уроке вы узнаете, как на языке JavaScript сделать простой спойлер. Спойлер на сайте — это скрытая часть контента, которая будет скрыта до тех пор, пока пользователь сам не захочет увидеть её.

Изначально на странице контентная часть скрыта и мы видим только одни заголовки и только при клике по заголовку, появляется блок с контентом.

Как сделать спойлер на сайте.

Как сделать спойлер на сайте.

HTML разметка спойлера

Создадим flex-контейнер list-group для блоков с заголовками и контентом. Блоки с заголовками пометим классом list-header, а блоки с контентом — классом list-content.

Заголовок #1

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

Заголовок #2

Quae eum ipsum tempora voluptatum officiis alias harum itaque atque veniam perferendis odio deserunt, distinctio ad quibusdam a mollitia quia at consequuntur.

Заголовок #3

Dicta, architecto a id deleniti odio sapiente illum molestiae distinctio debitis earum, maiores ut nemo nihil tempora! Animi, sunt! Cumque, exercitationem qui.

CSS код спойлера

body max-width: 600px;
margin: 0 auto;
padding: 50px 15px;
font-family: sans-serif;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #9d10a1;
text-align: left;
background-color: #fff;
>

.list-group display: flex;
flex-direction: column;
>

.list-group-item position: relative;
display: block;
padding: 0.75rem 1.25rem;
margin-bottom: -1px;
background-color: rgb(187, 238, 235);
border: 1px solid rgba(0, 0, 0, 0.125);
>

.list-header font-weight: 700;
>

.list-content background-color: rgb(216, 246, 239);
>

На всех блоках с контентом имеется класс spoiler-body, который делает эти блоки невидимыми.

JavaScript код спойлера

Создадим переменную headers, которой присвоим все заголовки, помеченные в HTML разметке дата-атрибутом spoiler-title при помощи метода querySelectorAll. Данный метод нам больше всего подходит из-за своей гибкости, ведь администратор сайта может впоследствии добавлять новые блоки у спойлера. Поэтому все новые добавленные блоки с дата-атрибутом spoiler-title, автоматически станут спойлерами.

const headers = document.querySelectorAll(«[data-name=’spoiler-title’]»);

Далее нам нужно отловить все клики по заголовкам, для этого в цикле forEach переберем все заголовки (item). Слушатель событий addEventListener запустит для каждого элемента функцию headerClick, после клика по нему.

headers.forEach(function(item) item.addEventListener(«click», headerClick);
>);

Опишем ниже, что должна делать функция при клике по блоку с заголовком. Эта функция должна выбрать следующий элемент после заголовка и удалить у него класс spoiler-body, чтобы блок с контентом стал видимым. Метод nextElementSibling возвращает следующий элемент. Элемент, по которому был сделан клик, можно заменить на оператор this (этот). Метод toggle добавит класс spoiler-body, если его нет или удалит, если он есть.

function headerClick() this.nextElementSibling.classList.toggle(«spoiler-body»);
>

Демонстрация работы спойлера

Создано 20.04.2020 10:39:41

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Спойлер HTML: теги и

    – Потому, – ответил иностранец и прищуренными глазами поглядел в небо, где, предчувствуя вечернюю прохладу, бесшумно чертили черные птицы, – что Аннушка уже купила подсолнечное масло, и не только купила, но даже разлила.

     details < display: inline;/* текст на текущей строке */ > details[open] < display: contents;/* спрятанный текст на текущей строке (в Google Chrome отсутствует реализация на момент написания статьи) */ > details summary < list-style-type: "[. ]";/* такие слова, как «Ещё», «Читать дальше», «Нажать» лучше вносить в list-style-type, чтобы они не были видны в браузерах, не поддерживающих тег details (в Google Chrome отсутствует реализация на момент написания статьи) */ color: blue; cursor: pointer; > details[open] summary Текст 
    скрытое/показанное содержимое

    В ряде браузеров нельзя сделать inline-элементом

    Текст до тега

    . Метка Длинное спрятанное содержимое переносится всей строкой отдельно от предыдущего и последующего текста. В браузерах разночтение. Текст после закрывающегося тега

    .

      Текст 
    Метка скрытое/показанное содержимое
    Текст

    Вложенный в тег

    Нажать [Закрыть] скрытое/показанное содержимое

     details:not([open]) summary small  display: none; > details[open] summary small 
    Нажать [Закрыть] скрытое/показанное содержимое

    Ссылка внутри

    • position static;
    • position: relative;
    • position: absolute;
    • position: fixed;
    • position: sticky;

    Сделать плавное открытие и скрытие блока при нажатии

    Не получается анимировать блок, когда тот сворачивается. В Mozilla Firefox при display: contents; элемент

    раскрывается и его состояние тогда можно менять стилями.

      
    скрытое/показанное содержимое

    Первая цитата

    — Это водка? — слабо спросила Маргарита.
    Кот подпрыгнул на стуле от обиды.
    — Помилуйте, королева, — прохрипел он, — разве я позволил бы себе налить даме водки? Это чистый спирт!

    Вторая цитата

    Свежесть бывает только одна — первая, она же и последняя. А если осетрина второй свежести, то это означает, что она тухлая!

    Третья цитата

    — Вы не Достоевский, — сказала гражданка, сбиваемая с толку Коровьевым.
    — Ну, почем знать, почем знать, — ответил тот.
    — Достоевский умер, — сказала гражданка, но как-то не очень уверенно.
    — Протестую, — горячо воскликнул Бегемот. — Достоевский бессмертен!

      
    Заголовок 1
    Содержимое 1
    Заголовок 2
    Содержимое 2

    Блок раскрывается при щелчке по кнопке, а не по всей строке

    Нажать скрытое/показанное содержимое

     details summary < width: -webkit-fit-content; width: -moz-fit-content; width: fit-content;transition: color .3s; /* плавная смена цвета */ cursor: pointer; /* изменение курсора при наведении */ > details summary:hover, details[open] summary 
    Нажать скрытое/показанное содержимое

    Текст «открыть/закрыть» при развёртывании и свёртывании содержимого

    скрытое/показанное содержимое

      
    скрытое/показанное содержимое

    Поменять стрелочку на знаки плюс и минус

    Нажать Первый способ

      
    Нажать скрытое/показанное содержимое

    Нажать Второй способ

      
    Нажать скрытое/показанное содержимое

    Код закрывающейся метки внизу блока

    – Потому, – ответил иностранец и прищуренными глазами поглядел в небо, где, предчувствуя вечернюю прохладу, бесшумно чертили черные птицы, – что Аннушка уже купила подсолнечное масло, и не только купила, но даже разлила.

     div < position: relative; > details, summary < display: inline; >details[open] < display: contents; >details[open]::after < /* пространство для записи "СВЕРНУТЬ" */ display: block; content: "\00a0"; > summary < color: gray; cursor: pointer; >details[open] summary < position: absolute; /* переместить запись "СВЕРНУТЬ" вниз 
    */ bottom: 0; left: 0; > summary::before < content: "ЕЩЁ"; >details[open] summary::before < content: "СВЕРНУТЬ"; >summary::-webkit-details-marker
    Текст
    скрытое/показанное содержимое

    Сделать вложенный спойлер

    Cпрятать спойлер и текст под спойлер Текст Спрятать текст под спойлер Текст

     details < display: block; border: 1px solid silver; border-radius: 4px; padding: .5em; >details summary < display: list-item; margin: -.5em; padding: .5em; >details[open] > summary 
    Cпрятать спойлер и текст под спойлер Текст
    Спрятать текст под спойлер Текст

    Стилизация: красивый спойлер CSS

    • Показать\скрыть текст HTML
    • Раскрывающийся древовидный список
    • Раскрывающаяся таблица по клику
    • Модальное окно
    • Табы CSS
    • Accordion CSS

    Тег details

    Тег details создает спойлер на HTML, то есть используется для информации, которую можно скрыть или показать по желанию пользователя.

    По умолчанию содержимое тега скрыто, для его показа по требованию пользователя следует добавить тег summary, который указывает заголовок для тега details . Этот заголовок всегда виден на странице (даже если содержимое details находится в свернутом состоянии) и по нему можно щелкать для разворачивания скрытого текста или сворачивания.

    Так же для показа скрытого содержимого можно использовать атрибут open тега details (например, для показа содержимого details с помощью JavaScript).

    Пример

    Давайте посмотрим, как работает тег details :

    Спойлер

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

    Вид содержимого 

<details></p><div class='code-block code-block-16' style='margin: 8px 0; clear: both;'>
<!-- 16agladky -->
<script src=

    » width=»450″ height=»249″ />

    Рис. 1. Вид содержимого

    В примере 1 показано использование элемента для создания спойлеров.

    Пример 1. Спойлер, сделанный через

    В браузерах IE и Edge элементы и не работают, текст спойлера в них отображается сразу же. Поэтому для универсальности рассмотрим альтернативную реализацию через псевдокласс :checked .

    Пример 2. Структура спойлера

    Внимание, спойлер!
    Убийца — дворецкий!

    Сперва прячем и текст спойлера через свойство display со значением none .

    .spoiler input, .spoiler div

    А затем показываем его через псевдокласс :checked с помощью всё того же свойства display .

    .spoiler :checked ~ div

    Этого уже достаточно, чтобы при щелчке по ниже расположенный отображался и скрывался. Всё остальное это косметические детали для оформления. Добавим перед заголовком стрелку, как это реализовано в , через псевдоэлемент ::before и свойство content, значением которого будет символ стрелки, направленной вправо или вниз.

    /* Закрытый спойлер */ .spoiler label::before < content: '►'; margin-right: 5px; >/* Открытый спойлер */ .spoiler :checked + label::before

    Окончательный код продемонстрирован в примере 3.

    Пример 3. Спойлер, сделанный через :checked

    Результат данного примера в браузере Internet Explorer показан на рис. 2.

    Вид спойлера

    Рис. 2. Вид спойлера

    Теперь наш спойлер работает во всех основных браузерах. К недостаткам метода следует отнести громоздкий код HTML — при добавлении нескольких спойлеров каждому внутри spoiler надо давать уникальный id и это же значение затем писать в атрибуте for для .

    См. также

    • display
    • display в CSS
    • relative и absolute
    • Аккордеон меню
    • Блочные элементы
    • Вкладки на CSS
    • Выпадающее меню
    • Добавление тени
    • Использование :checked
    • Использование в вёрстке
    • Не только текст
    • Описание float
    • Открываем блочную модель
    • Подробнее о позиционировании
    • Псевдокласс :checked
    • Псевдоэлемент ::before
    • Псевдоэлементы
    • Псевдоэлементы ::after и ::before
    • Создание флексбоксов
    • Стилизация переключателей
    • Стилизация флажков
    • Строчно-блочные элементы
    • Строчные элементы

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *