HTML-элемент <details> создаёт спойлер со скрытым изначально содержимым. Его можно переключить в «открытое» состояние путём:
- нажатия пользователем на метку с треугольником ▶,
- добавления атрибута
open.
Простой спойлер: тег <details>
скрытое/показанное содержимое
<details>скрытое/показанное содержимое</details>
Раскрыть спойлер: атрибут open
скрытое/показанное содержимое
<details open>скрытое/показанное содержимое</details>
Изменить текст метки: тег <summary>
Цвет корпуса
Тип управления
Тип очистки
<style>
.filter details + details {
margin-top: 1em;
}
.filter summary {
font-weight: 700; /* жирный шрифт метки */
cursor: pointer; /* курсор на метке имеет вид руки */
}
.filter ul {
list-style: none;
margin: 1em;
padding: 0;
}
.filter summary:hover {
color:#ff3200; /* изменение цвета метки при наведении */
}
</style>
<!-- фильтр товаров на HTML -->
<div class="filter">
<details>
<summary>Группа свойств 1</summary>
<ul>
<li><label><input type="checkbox"/> свойство 1.1</label>
<li><label><input type="checkbox"/> свойство 1.2</label>
</ul>
</details>
<details>
<summary>Группа свойств 2</summary>
<ul>
<li><label><input type="checkbox"/> свойство 2.1</label>
<li><label><input type="checkbox"/> свойство 2.2</label>
</ul>
</details>
</div>
Второй тег <summary> не работает
Нажать
скрытое/показанное содержимоеНажать
<details> <summary>Нажать</summary> скрытое/показанное содержимое <summary>Нажать</summary> </details>
Убрать стрелочку-треугольник у <details> и рамку у <summary>
Посмотреть на карте
скрытое/показанное содержимое<style>
details summary {
display: block; /* у summary по умолчанию свойство display в значении list-item, потому поддерживается свойство list-style */
width: 10em;
width: -webkit-fit-content;
width: -moz-fit-content;
width: fit-content; /* блок раскрывается при щелчке по кнопке, а не по всей строке */
border-bottom: 1px dotted; /* подводка точками или тире часто используется для элементов, с которыми пользователю предлагается взаимодействовать, можно заменить на text-decoration */
outline-style: none; /* удалить обводку при фокусе */
cursor: pointer;
}
details summary::-webkit-details-marker { /* нестандартный псевдоэлемент Google Chrome */
display: none;
}
</style>
<details>
<summary>Посмотреть на карте</summary>
скрытое/показанное содержимое
</details>
Скрыть часть текста под кнопкой «Ещё»
– Потому, – ответил иностранец и прищуренными глазами поглядел в небо, где, предчувствуя вечернюю прохладу, бесшумно чертиличерные птицы, – что Аннушка уже купила подсолнечное масло, и не только купила, но даже разлила.
<style>
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 {
display: none;
}
</style>
Текст <details><summary></summary>скрытое/показанное содержимое</details>
В ряде браузеров <summary> нельзя сделать inline-элементом
Текст до тега <details>.
Метка
Длинное спрятанное содержимое переносится всей строкой отдельно от предыдущего и последующего текста. В браузерах разночтение.<style>
details,
details * {
all: initial;
}
</style>
Текст
<details open>
<summary>Метка</summary>
скрытое/показанное содержимое
</details>
Текст
Вложенный в <summary> тег
Нажать [Закрыть]
скрытое/показанное содержимое<style>
details:not([open]) summary small {
display: none;
}
details[open] summary small {
color: gray;
}
</style>
<details>
<summary>
Нажать
<small>[Закрыть]</small>
</summary>
скрытое/показанное содержимое
</details>
Ссылка внутри <summary>
Позиционирование CSS ⎘
<style>
details {
display: block; /* так как в браузерах, не поддерживающих <details>, этот тег строчный */
overflow: hidden;
border: 1px solid #f1f1f1;
box-shadow: 2px 3px 3px rgba(0, 0, 0, .2);
}
details summary {
padding: .3em;
background: #f1f1f1;
}
details summary a {
font-size: 1.5em;
vertical-align: middle;
text-decoration: none;
}
</style>
<details>
<summary>Позиционирование CSS <a href="/2012/04/pozitsionirovaniye-css.html" target="_blank">⎘</a></summary>
<ul>
<li><a href="/2017/04/position-static.html"><code>position static;</code></a>
<li><a href="/2017/04/position-relative.html"><code>position: relative;</code></a>
<li><a href="/2017/05/position-absolute.html"><code>position: absolute;</code></a>
<li><a href="/2012/04/position-fixed-html.html"><code>position: fixed;</code></a>
<li><a href="/2017/04/position-sticky.html"><code>position: sticky;</code></a>
</ul>
</details>
Сделать плавное открытие и скрытие блока <div> при нажатии
Не получается анимировать блок, когда тот сворачивается. В Mozilla Firefox при
display: contents; элемент <details> раскрывается и его состояние тогда можно менять стилями.<style>
details[open] div {
animation: spoiler 1s;
}
@keyframes spoiler {
0% {opacity: 0;}
100% {opacity: 1;}
}
</style>
<details>
<div>скрытое/показанное содержимое</div>
</details>
Первая цитата
— Это водка? — слабо спросила Маргарита.
Кот подпрыгнул на стуле от обиды.
— Помилуйте, королева, — прохрипел он, — разве я позволил бы себе налить даме водки? Это чистый спирт!
Кот подпрыгнул на стуле от обиды.
— Помилуйте, королева, — прохрипел он, — разве я позволил бы себе налить даме водки? Это чистый спирт!
Вторая цитата
Свежесть бывает только одна — первая, она же и последняя. А если осетрина второй свежести, то это означает, что она тухлая!
Третья цитата
— Вы не Достоевский, — сказала гражданка, сбиваемая с толку
Коровьевым.
— Ну, почем знать, почем знать, — ответил тот.
— Достоевский умер, — сказала гражданка, но как-то не очень уверенно.
— Протестую, — горячо воскликнул Бегемот. — Достоевский бессмертен!
— Ну, почем знать, почем знать, — ответил тот.
— Достоевский умер, — сказала гражданка, но как-то не очень уверенно.
— Протестую, — горячо воскликнул Бегемот. — Достоевский бессмертен!
<style>
.spoiler {
border: 1px solid #e0e0e0;
padding: 0 1em;
}
.spoiler details {
padding: 1em 0;
}
.spoiler details + details {
border-top: 1px solid #e0e0e0;
}
.spoiler summary {
color: #4d5895;
}
.spoiler details div {
overflow: hidden;
padding: 1em 1em 0;
}
.spoiler details[open] div {
animation: spoiler 1s;
}
@keyframes spoiler {
0% {max-height: 0;}
100% {max-height: 10em;}
}
</style>
<div class="spoiler">
<details>
<summary>Заголовок 1</summary>
<div>Содержимое 1</div>
</details>
<details>
<summary>Заголовок 2</summary>
<div>Содержимое 2</div>
</details>
</div>
Блок раскрывается при щелчке по кнопке, а не по всей строке
Нажать
скрытое/показанное содержимое<style>
details summary {
width: -webkit-fit-content;
width: -moz-fit-content;
width: fit-content;
transition: color .3s; /* плавная смена цвета */
cursor: pointer; /* изменение курсора при наведении */
}
details summary:hover,
details[open] summary {
color: FireBrick;
}
</style>
<details>
<summary>Нажать</summary>
скрытое/показанное содержимое
</details>
Текст "открыть/закрыть" при развёртывании и свёртывании содержимого
скрытое/показанное содержимое
<style>
details summary::after {
content: "Открыть";
}
details[open] summary::after {
content: "Закрыть";
}
</style>
<details>
<summary></summary>
скрытое/показанное содержимое
</details>
Поменять стрелочку на знаки плюс и минус
Нажать
Первый способ<style>
details summary {
display: block;
}
details summary::-webkit-details-marker {
display: none;
}
details summary::before {
content: "+ ";
}
details[open] summary::before {
content: "- ";
}
</style>
<details>
<summary>Нажать</summary>
скрытое/показанное содержимое
</details>
Нажать
Второй способ<style>
details summary {
list-style-type: "+ ";
}
details[open] summary {
list-style-type: "- ";
}
</style>
<details>
<summary>Нажать</summary>
скрытое/показанное содержимое
</details>
Код закрывающейся метки внизу блока
– Потому, – ответил иностранец и прищуренными глазами поглядел в небо, где, предчувствуя вечернюю прохладу, бесшумно
чертили черные птицы, – что Аннушка уже купила подсолнечное масло, и не только купила, но даже разлила.
<style>
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; /* переместить запись "СВЕРНУТЬ" вниз <div> */
bottom: 0;
left: 0;
}
summary::before {
content: "ЕЩЁ";
}
details[open] summary::before {
content: "СВЕРНУТЬ";
}
summary::-webkit-details-marker {
display: none;
}
</style>
<div>
Текст
<details>
<summary></summary>
скрытое/показанное содержимое
</details>
</div>
Сделать вложенный спойлер
Cпрятать спойлер и текст под спойлер
ТекстСпрятать текст под спойлер
Текст<style>
details {
display: block;
border: 1px solid silver;
border-radius: 4px;
padding: .5em;
}
details summary {
display: list-item;
margin: -.5em;
padding: .5em;
}
details[open] > summary {
margin-bottom: .5em;
border-bottom: 1px solid silver;
}
</style>
<details class="raz9">
<summary>Cпрятать спойлер и текст под спойлер</summary>
Текст
<details class="raz9">
<summary>Спрятать текст под спойлер</summary>
Текст
</details>
</details>