Создаём модальное окно для web приложения на чистом CSS

В самой первой статье рубрики «Frontend разработка» мы уже рассматривали создание модальных окон для web приложений и использовали для этого JavaScript. Однако эта задача также может быть успешно решена и при помощи CSS.

Дело в том, что CSS 3 умеет самостоятельно обрабатывать некоторые события при помощи псевдоклассов тем самым позволяя избежать использования для этой цели JavaScript

Так как обычно модальное окно отображается по клику на определённом элементе страницы для решения данной задачи подойдёт псевдокласс target.

По существу, этот псевдокласс определят стиль для целевого элемента после перехода к нему по ссылке. Это и позволяет по клику на гиперссылке вызывать модальное окно на экран.

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

Забегая вперёд, отметим, что для закрытия такого модального окна достаточно просто перейти на туже страницу, но без указания целевого элемента. Что и реализовано путём добавления соответствующей гиперссылки в блок span с классом close.

Ниже приведены стили страницы.

Блок, который является собственно окном (класс modal) вложен в блок для эффекта затемнения (класс overlay) не случайно.

Во-первых, по ссылке можно перейти только к одному целевому элементу. Соответственно псевдокласс target также может отработать только для единственного элемента. Не более.

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

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

Пример разметки:

Пример скорректированных стилей:

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

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

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