Display details in html

Пояснение элементов “Details” и “Summary”

Многие библиотеки JavaScript были разработаны для того, чтобы размещать на сайтах дополнительные интерактивные виджеты. Аналогичными средствами обладает и HTML5 . В этой статье мы рассмотрим один из таких элементов под названием ( а значит автоматически и элемент ), который дает возможность создавать интерактивные виджеты, похожие на аккордеон.

Использование и

может использоваться в любом месте в пределах тега . Вот простой пример его использования:

 

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas, impedit.

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

Единственное отличие заключается в том, как браузеры отображают этот элемент. Поддерживающие его браузеры, такие как Google Chrome , Safari и последняя версия Opera выводят его с небольшим треугольником сбоку:

Использование <details data-lazy-src=

Открытое состояние

После того, как откроете данные элемента, если просматриваете исходный код с помощью инструментов для разработчиков, вы увидите, что, когда элемент находится в открытом состоянии, браузер добавляет к нему атрибут open . На самом деле мы можем добавить атрибут open в вручную. Тогда содержимое будет отображаться видимым по умолчанию:

 

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas, impedit.

Элемент

применяется вместе с тегом ; два элемента предназначены для совместного использования, но является необязательным.

Так что же происходит, когда вы используете его?

 
Hello World

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas, impedit.

В приведенном выше примере надпись « Подробнее » будет заменена на « Hello World »:

Элемент <summary data-lazy-src=

Назначение стилей для с помощью CSS

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

Также можно использовать селектор атрибута, чтобы указать стили для открытого состояния:

Также вы можете задать стили для элемента . Например, если вы наводите курсор мыши на кнопку или ссылку, то курсор обычно приобретает вид указателя ( ладонь с вытянутым указательным пальцем ).

Но для элемента , который также является кликабельным, курсор приобретает вид текстового курсора, что выглядит немного неестественно. Можно отобразить курсор в виде указателя:

Стили маркера

А можно ли задать стили для стандартного маркера в виде маленького треугольника? Webkit использует для этой цели псевдо-элемент ::-webkit-details-marker . Благодаря этому мы можем задать для треугольника стили по умолчанию, такие как цвет, цвет фона, а также размер:

summary::-webkit-details-marker

К сожалению, заменить треугольник непосредственно через ::-webkit-details-marker невозможно. Единственное работающее решение — это изменить его с помощью ::before или ::after :

summary::-webkit-details-marker < display: none; >summary:before < content: "2714"; /* новая иконка */ color: #696f7c; margin-right: 5px; >

Поддержка браузерами

Поддержка браузерами этих двух элементов значительно улучшилась в последние два года. В 2011 и 2012 годах единственным браузером, который мог отображать и , был Google Chrome . Safari и Opera только недавно начали поддерживать эти элементы.

Так как поддержка в Firefox и Internet Explorer до сих пор оставляет желать лучшего, появилось несколько вариантов универсализации, которые имитируют нужный функционал, например, jQuery Details . Хотя это решение и опирается на JQuery , но размер его файла намного меньше, чем аналог библиотеки JQuery UI .

После его реализации, стили треугольника задаются обычным способом:

Поддержка браузерами

Примеры применения

Вы уже встречались с этим элементом. Например, некоторые интернет-магазины « упаковывают » с помощью него списки желаний. Или используют его в сайдбаре, чтобы отфильтровать результаты:

Примеры применения

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

Заключение

Новый элемент становится все более важен. Когда-нибудь разработка сайтов или веб-приложений с помощью простых виджетов будет меньше зависеть от библиотек JavaScript .

Источник

Знакомьтесь,

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

Вам знаком паттерн верстки компонента, который может менять своё состояние с видимого на скрытый:

toggleButton.onclick = () => component.classList.toggle('open')

А теперь забудьте. Существует элемент, который может делать это из коробки. Знакомьтесь —

Базовое применение

Прежде всего давайте посмотрим как этот элемент работает:

Обратите внимание, что пример работает без каких либо дополнительных стилей или JavaScript. Вся функциональность встроена в сам браузер.

По умолчанию видимый текст зависит от настроек языка вашей системы, но его можно изменить добавив в элемент :

Читайте также:  Exception tree in java

Чтобы изменить состояние элемента в html вам достаточно добавить атрибут open

А чтобы управлять состоянием средствами JavaScript предусмотрен специальный API:

const details = document.querySelector('details') details.open = true // Отобразить содержимое details.open = false // Скрыть содержимое

Пара слов о доступности

Элемент фокусируемый. То есть передвигаясь по странице с клавиатуры вы попадёте на этот элемент. А вот содержимое может попасть в фокус только если открыт, то есть фокус никогда не попадет на невидимые элементы внутри .

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

Примеры использования

Далее я примерно повторю некоторые компоненты из документации bootstrap, но практически без JavaScript.

Изменяем маркер

Первое что вам может понадобится — изменить внешний вид маркера. Делается это очень просто:

summary::-webkit-details-marker < /* Любые стили */ >

Или вы можете скрыть стандартный маркер и реализовать собственный

/* Убираем стандартный маркер Chrome */ details summary::-webkit-details-marker < display: none >/* Убираем стандартный маркер Firefox */ details > summary < list-style: none; >/* Добавляем собственный маркер для закрытого состояния */ details summary:before < content: '\f0fe'; font-family: "Font Awesome 5 free"; margin-right: 7px; >/* Добавляем собственный маркер для открытого состояния */ details[open] summary:before

Collapse Component

Здесь всё просто. Базовый функционал такой же. Нужно лишь немного изменить внешний вид:

Accordion Component

Повторим предыдущий пример, немного изменим внешний вид и получим аккордеон:

Но, как видите, один элемент не закрывается когда открывается другой. Чтобы добиться этого нам понадобится пара строк JavaScript. поддерживает событие toggle . Используя это, можно очень легко отслеживать открытие одного элемента и по этому событию закрывать остальные:

Popover Component

Эта реализация очень похожа на Collapse Component, с той разницей что содержимое имеет абсолютное позиционирование и перекрывает контент.

В своей основе это тот же Popover Component. Отличается лишь внешний вид.

Тот же пример, только с отдельной кнопкой

Но у Dropdown Component есть ещё одно важное отличие: по клику за его пределами он должен скрываться. Чтобы реализовать это снова понадобится написать пару строк JavaScript.

// По клику на тело документа document.body.onclick = () => < // Найти все открытые document.body.querySelectorAll('details.dropdown[open]') // И закрыть каждый из них .forEach(e => e.open = false) >

И напоследок пример модального окна.

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

Ссылки

UPD.
Решил добавить ещё один пример использования — многоуровневая навигация. Ещё раз хочу обратить ваше внимание на то, что пример работает без какого либо JavaScript. И он намного более инклюзивный чем традиционная верстка на .

Источник

Спойлер 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 
Нажать [Закрыть] скрытое/показанное содержимое

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

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

Не получается анимировать блок, когда тот сворачивается. В 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
Текст
скрытое/показанное содержимое

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

 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

Источник

Оцените статью