Модальные окна на CSS
Три разных примера создания модальных окон на чистом CSS.
Первый с использованием HTML-элемента , второй с флажком , а третий с псевдоклассом :target
Вариант с использованием HTML-элемента
В этом примере каждая кнопка открывает одно конкретное всплывающее окно, расположенное под ней.
Закрытие окна происходит по клику вне его области, а крестик показывается как декорация.
Пример:
Модальное окно 1
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis.
Модальное окно 2
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
HTML:
Текст в модальном окне
CSS:
/* Контейнер для кнопки, чтобы не прыгал контент, когда она сменит позиционирование */
.css-modal-details <
height : 60px ;
display : flex ;
align-items : center ;
justify-content : center ;
/* Кнопка для открытия */
.css-modal-details summary <
display : inline-flex ;
margin : 10px ;
text-decoration : none ;
position : relative ;
font-size : 20px ;
line-height : 20px ;
padding : 12px 30px ;
color : #FFF ;
font-weight : bold ;
text-transform : uppercase ;
font-family : 'Roboto' , Тahoma, sans-serif ;
background : #337AB7 ;
cursor : pointer ;
border : 2px solid #BFE2FF ;
overflow : hidden ;
.css-modal-details summary:hover,
.css-modal-details summary:active,
.css-modal-details summary:focus <
color : #FFF ;
.css-modal-details summary:before <
position : absolute ;
right : -50px ;
border-right : 50px solid transparent ;
border-top : 50px solid #2D6B9F ;
transition : transform 0.5s ;
transform : translateX ( -100% ) ;
.css-modal-details summary:hover:before,
.css-modal-details summary:active:before,
.css-modal-details summary:focus:before <
transform : translateX ( 0 ) ;
/* Кнопка при открытом окне переходит на весь экран */
.css-modal-details details[open] summary <
cursor : default ;
opacity : 0 ;
position : fixed ;
width : 100% ;
height : 100% ;
/* Контейнер, который затемняет страницу */
.css-modal-details details .cmc <
display : flex ;
align-items : center ;
justify-content : center ;
.css-modal-details details[open] .cmc <
pointer-events : none ;
position : fixed ;
width : 100% ;
height : 100% ;
animation : bg 0.5s ease ;
background : rgba ( 51, 122, 183, 0.7 ) ;
/* Модальное окно */
.css-modal-details details .cmt <
font-family : Verdana, sans-serif ;
font-size : 16px ;
padding : 20px ;
max-width : 600px ;
max-height : 70% ;
transition : 0.5s ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
background : #FFF ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
text-align : center ;
overflow : auto ;
.css-modal-details details[open] .cmt <
animation : scale 0.5s ease ;
pointer-events : auto ;
/* Декоративная кнопка с крестиком */
.css-modal-details details[open] .cmc:after <
width : 50px ;
height : 50px ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
position : absolute ;
z-index : 10 ;
right : 20px ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
background-image : url ( «data:image/svg+xml;charset=UTF-8,%3csvg xmlns=’http://www.w3.org/2000/svg’ viewBox=’0 0 24 24′ fill=’none’ stroke=’%23337AB7′ stroke-width=’3′ stroke-linecap=’round’ stroke-linejoin=’round’%3e%3cline x1=’18’ y1=’6′ x2=’6′ y2=’18’%3e%3c/line%3e%3cline x1=’6′ y1=’6′ x2=’18’ y2=’18’%3e%3c/line%3e%3c/svg%3e» ) ;
background-color : #FFF ;
background-size : cover ;
animation : move 0.5s ease ;
@keyframes scale <
transform : scale ( 0 ) ;
transform : scale ( 1 ) ;
@keyframes move <
right : -80px ;
right : 20px ;
@keyframes bg <
background : rgba ( 51, 122, 183, 0 ) ;
background : rgba ( 51, 122, 183, 0.7 ) ;
Вариант с использованием флажка
В этом примере одно модальное окно может открываться любым количеством кнопок и располагаться где угодно, например, в подвале.
Закрытие окна происходит по клику на крестик.
Пример:
Модальное окно 1
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Модальное окно 2
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Модальное окно 1
HTML:
Текст в модальном окне
CSS:
/* Контейнер для кнопки */
.css-modal-checkbox-container <
height : 60px ;
display : flex ;
align-items : center ;
justify-content : center ;
/* Убираем флажок */
#css-modal-checkbox <
display : none ;
/* Кнопка для открытия */
.css-modal-checkbox <
display : inline-flex ;
margin : 10px ;
text-decoration : none ;
position : relative ;
font-size : 20px ;
line-height : 20px ;
padding : 12px 30px ;
color : #FFF ;
font-weight : bold ;
text-transform : uppercase ;
font-family : 'Roboto' , Тahoma, sans-serif ;
background : #337AB7 ;
cursor : pointer ;
border : 2px solid #BFE2FF ;
overflow : hidden ;
.css-modal-checkbox:hover,
.css-modal-checkbox:active,
.css-modal-checkbox:focus <
color : #FFF ;
.css-modal-checkbox:before <
position : absolute ;
right : -50px ;
border-right : 50px solid transparent ;
border-top : 50px solid #2D6B9F ;
transition : transform 0.5s ;
transform : translateX ( -100% ) ;
.css-modal-checkbox:hover:before,
.css-modal-checkbox:active:before,
.css-modal-checkbox:focus:before <
transform : translateX ( 0 ) ;
/* Контейнер, который затемняет страницу */
#css-modal-checkbox + .cmc <
display : none ;
#css-modal-checkbox:checked + .cmc <
display : flex ;
align-items : center ;
justify-content : center ;
position : fixed ;
width : 100% ;
height : 100% ;
animation : bg 0.5s ease ;
background : rgba ( 51, 122, 183, 0.7 ) ;
/* Модальное окно */
#css-modal-checkbox:checked + .cmc .cmt <
font-family : Verdana, sans-serif ;
font-size : 16px ;
padding : 20px ;
max-width : 600px ;
max-height : 70% ;
transition : 0.5s ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
background : #FFF ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
text-align : center ;
overflow : auto ;
animation : scale 0.5s ease ;
/* Кнопка с крестиком закрывающая окно */
.css-modal-close <
width : 50px ;
height : 50px ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
position : absolute ;
z-index : 10 ;
right : 20px ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
background-image : url ( «data:image/svg+xml;charset=UTF-8,%3csvg xmlns=’http://www.w3.org/2000/svg’ viewBox=’0 0 24 24′ fill=’none’ stroke=’%23337AB7′ stroke-width=’3′ stroke-linecap=’round’ stroke-linejoin=’round’%3e%3cline x1=’18’ y1=’6′ x2=’6′ y2=’18’%3e%3c/line%3e%3cline x1=’6′ y1=’6′ x2=’18’ y2=’18’%3e%3c/line%3e%3c/svg%3e» ) ;
background-color : #FFF ;
background-size : cover ;
animation : move 0.5s ease ;
cursor : pointer ;
@keyframes scale <
transform : scale ( 0 ) ;
transform : scale ( 1 ) ;
@keyframes move <
right : -80px ;
right : 20px ;
@keyframes bg <
background : rgba ( 51, 122, 183, 0 ) ;
background : rgba ( 51, 122, 183, 0.7 ) ;
Вариант с использованием псевдокласса :target
Этот пример основан на способности якорных ссылок указывать на элементы, которые изначально скрыты на странице и тем самым использоваться в лайтбоксах. Такое модальное окно может открываться любым их количеством и располагаться где угодно, например, в подвале.
Закрытие окна происходит кликом на ссылку с другим якорем.
Пример:
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium quis repellat nesciunt, ex temporibus perspiciatis esse perferendis. Dicta tempore dolore laborum iste rerum quis temporibus voluptate itaque maxime commodi! Maiores.
HTML:
Текст в модальном окне
CSS:
/* Контейнер для кнопки */
.css-modal-target-container <
height : 60px ;
display : flex ;
align-items : center ;
justify-content : center ;
/* Кнопка для открытия */
.css-modal-open <
display : inline-flex ;
margin : 10px ;
text-decoration : none ;
position : relative ;
font-size : 20px ;
line-height : 20px ;
padding : 12px 30px ;
color : #FFF ;
font-weight : bold ;
text-transform : uppercase ;
font-family : 'Roboto' , Тahoma, sans-serif ;
background : #337AB7 ;
cursor : pointer ;
border : 2px solid #BFE2FF ;
overflow : hidden ;
.css-modal-open:hover,
.css-modal-open:active,
.css-modal-open:focus <
color : #FFF ;
.css-modal-open:before <
position : absolute ;
right : -50px ;
border-right : 50px solid transparent ;
border-top : 50px solid #2D6B9F ;
transition : transform 0.5s ;
transform : translateX ( -100% ) ;
.css-modal-open:hover:before,
.css-modal-open:active:before,
.css-modal-open:focus:before <
transform : translateX ( 0 ) ;
/* Контейнер, который затемняет страницу */
.css-modal-target <
display : none ;
.css-modal-target:target <
display : flex ;
align-items : center ;
justify-content : center ;
position : fixed ;
width : 100% ;
height : 100% ;
animation : bg 0.5s ease ;
background : rgba ( 51, 122, 183, 0.7 ) ;
/* Модальное окно */
.css-modal-target .cmt <
font-family : Verdana, sans-serif ;
font-size : 16px ;
padding : 20px ;
max-width : 600px ;
max-height : 70% ;
transition : 0.5s ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
background : #FFF ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
text-align : center ;
overflow : auto ;
animation : scale 0.5s ease ;
/* Кнопка с крестиком закрывающая окно */
.css-modal-close <
position : relative ;
display : block ;
.css-modal-close:after <
width : 50px ;
height : 50px ;
border : 6px solid #BFE2FF ;
border-radius : 12px ;
position : fixed ;
z-index : 10 ;
right : 20px ;
box-shadow : 0 4px 12px rgba ( 0,0,0,0.2 ) , 0 16px 20px rgba ( 0,0,0,0.2 ) ;
background-image : url ( «data:image/svg+xml;charset=UTF-8,%3csvg xmlns=’http://www.w3.org/2000/svg’ viewBox=’0 0 24 24′ fill=’none’ stroke=’%23337AB7′ stroke-width=’3′ stroke-linecap=’round’ stroke-linejoin=’round’%3e%3cline x1=’18’ y1=’6′ x2=’6′ y2=’18’%3e%3c/line%3e%3cline x1=’6′ y1=’6′ x2=’18’ y2=’18’%3e%3c/line%3e%3c/svg%3e» ) ;
background-color : #FFF ;
background-size : cover ;
animation : move 0.5s ease ;
.css-modal-close:before <
width : 100% ;
height : 100% ;
position : fixed ;
cursor : default ;
@keyframes scale <
transform : scale ( 0 ) ;
transform : scale ( 1 ) ;
@keyframes move <
right : -80px ;
right : 20px ;
@keyframes bg <
background : rgba ( 51, 122, 183, 0 ) ;
background : rgba ( 51, 122, 183, 0.7 ) ;
Нравится 22
В закладки
- Опубликовано: 01.08.2021 / Обновлено: 01.09.2022
- Рубрики: Модальные окна
- Метки: CSS, Авторское
- 20012 просмотров
Смотрите также:

Модальное окно для контактов
Модальное окно для контактов или социальных сетей с фиксированной кнопкой

QR-код для ссылки на страницу
Модальное окно с QR-кодом ссылки на текущую страницу

Создание сообщения об использовании куки (cookie)
Создание и установка модального окна с сообщением об использовании файлов cookies
Добавить комментарий:
Ваш комментарий отправлен!
Комментарии:
Павел: 10.11.2023 в 13:15
Здравствуйте! Это лучшее и рабочее решение модального окна! Но подскажите, как сделать, чтобы кнопка не встраивалась в верстку сайта, а была поверх, например, прилипшая сбоку или внизу, поверх всех слоев сайта.
Alexander: 13.11.2023 в 09:41
Обычным позиционированием fixed
Павел: 17.11.2023 в 23:09
Как развернуть эту кнопку на 90 градусов и прилепить справа экрана, если начинаю ее крутить, то стили и модальное окно затрагивают. Не пойму к чему прицепиться.
Alexander: 20.11.2023 в 10:49
Например для варианта с target добавить так:
.css-modal-target-container
СЕРГЕЙ: 16.04.2023 в 19:46
Люди добрые! Подскажите, как вместо кнопки оформить ссылку на текст?
СЕРГЕЙ: 10.04.2023 в 23:55
Здравствуйте! А можно ли сделать так, чтобы окно открывалось при клике на текст с ссылкой? И на каждую ссылку отдельное окно?
Alexander: 11.04.2023 в 07:43
А чем последний вариант не устраивает?
Серега: 23.03.2023 в 05:40
Добрый день, а почему весь контент страницы пролетает сверху модального окна? Как можно сделать чтобы форма оставалась на верху всего контента?
Alexander: 24.03.2023 в 06:25
Попробуйте прибавить значение z-index
Алексей Ершов: 18.03.2023 в 15:17
Очень крутая работа. Взял себе. Спасибо.
Сергей: 13.02.2023 в 07:54
Здравствуйте.
Подскажите, пожалуйста, а как сделать два модальных окна, так чтобы второе можно было открыть из первого поверх него и не закрывая его?
Я уже пробовал сделать ссылку на второе модальное окно в тексте первого, но, открывая его, закрывается первое. А надо, чтобы оно оставалось на странице и было активно после закрытия второго окна.
Alexander: 13.02.2023 в 13:09
Какой именно вариант не получается?
Сергей: 13.02.2023 в 13:53
Спасибо, Alexander, что так быстро среагировали на вопрос.
Уже разобрался, все работает.
izi4: 23.07.2022 в 19:14
Здравствуйте Уважаемые!
Скажите пожалуйста, как позиционировать крестик в окне из примера N#1?
/* Декоративная кнопка с крестиком */
Alexander: 24.07.2022 в 12:38
Я так понимаю, вы хотите кнопку к окну подвинуть?
Можно так:
HTML
Название кнопки Текст в модальном окне


