Аккордеон на чистом HTML и CSS
Начнём с разметки. Добавим контейнер для галереи. Так будет проще структурировать элементы.
Добавим первый элемент аккордеона с картинкой яхты, который будет раскрыт по умолчанию.
Добавим описание первого элемента. Описание состоит из заголовка и текста.
Попробуйте закрыть и открыть описание. Для этого нажмите на картинку. По значку маркера можно понять открыт элемент или закрыт.
Добавим второй элемент аккордеона с картинкой, заголовком и текстом с описанием.
Добавим третий элемент аккордеона с изображением рифа, заголовком и описанием карточки.
Добавим базовые стили для галереи. Выстроим карточки в ряд за счёт display: flex
. Определим размеры карточек. Ширину картинки подстроим под размеры карточки.
После этого убедимся, что все элементы галереи правильно структурированы и отображаются на странице.
Попробуйте открыть все элементы. А затем закрыть их.
Для всех элементов галереи details
добавим одинаковое значение атрибута name
. Для того, чтобы объединить их в группу, в которой одновременно может быть открыт только один элемент. Это позволит создать эффект аккордеона, когда открытие одного элемента автоматически приводит к закрытию других элементов в той же группе.
Попробуйте снова открыть и закрыть элементы и посмотрите, что изменилось.
Чтобы управлять стилями открытого элемента, используется селектор .gallery-item[open]
. То есть мы выбираем элемент с классом gallery-item
, у которого есть атрибут open
.
Для начала попробуем менять ширину карточки. Пусть для закрытой карточки ширина будет 100 пикселей, а для открытой — 300.
Продолжим стилизацию.
Уберём значки по умолчанию для маркеров. Добраться до маркера можно через псевдоэлемент ::marker
. Для компактности записи используем вложенный селектор.
Элемент с картинкой (<summary>
) вынесем в отдельный слой за счёт абсолютного позиционирования. И растянем его по размерам карточки (<details>
).
Аналогичным образом картинку разместим на фоне <summary>
.
Чтобы картинка не деформировалась и сохраняла свои пропорции, добавим object-fit: cover
.
Перейдём к описанию.
С помощью position: relative
поместим элемент с описанием в одну стопку с <summary>
. Добавим поля. И поменяем цвет текста.
Ещё немного поработаем с карточками.
Добавим скругление. А за счёт overflow: hidden
скроем лишнее.
Добавим подсказку для пользователя, о том что элемент интерактивный. Поменяем курсор по умолчанию на pointer
.
Чтобы текст лучше читался на фоне изображения, сделаем изображение темнее. Используем для этого CSS-фильтры.
Добавим анимацию перехода.
Будем отслеживать CSS-свойство width
для карточки.
А для изображения будем отслеживать CSS-свойство filter
.
На финальном шаге добавим стили для состояния Наведение для карточки. С помощью CSS-свойства filter
сделаем картинку светлее.
Попробуйте полистать карточки галереи.
Вёрстка галереи завершена!