Узнать, как создать модальное окно с помощью CSS и JavaScript.
Создать модальное окно
Модаль — это диалоговое окно/всплывающее окно, которое отображается в верхней части текущей страницы:
Модальный заголовок
Модальный нижний колонтитул
Шаг 1) Добавить HTML:
Пример
class=»modal» is a container element for the modal and the div with class=»modal-content» is where you put your modal content (headings, paragraphs, images, etc).
The element with class=»close» should be used to close the modal.
Шаг 2) Добавить CSS:
Пример
/* Модальный (фон) */ .modal display: none; /* Скрыто по умолчанию */ position: fixed; /* Оставаться на месте */ z-index: 1; /* Сидеть на вершине */ left: 0; top: 0; width: 100%; /* Полная ширина */ height: 100%; /* Полная высота */ overflow: auto; /* Включите прокрутку, если это необходимо */ background-color: rgb(0,0,0); /* Цвет запасной вариант */ background-color: rgba(0,0,0,0.4); /* Черный с непрозрачностью */ >
/* Модальное содержание/коробка */ .modal-content background-color: #fefefe; margin: 15% auto; /* 15% сверху и по центру */ padding: 20px; border: 1px solid #888; width: 80%; /* Может быть больше или меньше, в зависимости от размера экрана */ >
The .modal class represents the window BEHIND the actual modal box. The height and width is set to 100%, which should create the illusion of a background window.
Добавить a black background color with opacity.
Set position to fixed; meaning it will move up and down the page when the user scrolls.
It is hidden by default, and should be shown with a click of a button (we’ll cover this later).
The .modal-content class
This is the actual modal box that gets focus. Do whatever you want with it. We have got you started with a border, some padding, and a background color. The margin: 15% auto is used to push the modal box down from the top (15%) and centering it (auto).
We also set the width to 400px — this could be more or less, depending on screen size. We will cover this later.
The .close class
The close button is styled with a large font-size, a specific color and floats to the right. We have also added some styles that will change the color of the close button when the user moves the mouse over it.
Шаг 3) Добавить JavaScript:
Пример
// Получить модальный var modal = document.getElementById(«myModal»);
// Получить кнопку, которая открывает модальный var btn = document.getElementById(«myBtn»);
// Получить элемент , который закрывает модальный var span = document.getElementsByClassName(«close»)[0];
// Когда пользователь нажимает на кнопку, откройте модальный btn.onclick = function() modal.style.display = «block»; >
// Когда пользователь нажимает на (x), закройте модальное окно span.onclick = function() modal.style.display = «none»; >
// Когда пользователь щелкает в любом месте за пределами модального, закройте его window.onclick = function(event) if (event.target == modal) modal.style.display = «none»; > >
Добавить верхний и нижний колонтитулы
Добавить класс для модального заголовка, модального тела и модального нижнего колонтитула:
Пример
×
Модальный заголовок
Некоторый текст в модальном теле
Какой-то другой текст.
Модальный нижний колонтитул
!-->
Стиль модального заголовка, тела и нижнего колонтитула, а также добавить анимацию (слайд в модели):
Пример того, как создать модальный режим полной ширины, который скользит снизу:
Пример
Совет:Кроме того, проверить Модальные изображения и Лайтбокс.
Как сделать модальное окно на сайте
Привет друзья, в этому году меня несколько раз просили объяснить, как сделать модальное окно на сайте. Кто-то, изучая азы веб-разработки неизбежно приходил к ситуации, когда часть контент необходимо отобразить в модальном окне, кто-то, работая с формами, хочет показать ее не в открытом виде, а в pop-up при клике на кнопку.
Несмотря на то, что на блоге уже были статьи, косвенно связанные с реализацией этого эффекта, вопросы все равно остаются и я решил сделать несколько статей, связанных с этой темой. Сегодня разберемся просто с модальными окнами, а в следующий раз сделаем пульсирующую кнопку в углу экрана, как у сервисов обратного звонка и еще просили урок с анимацией блика на кнопке.
Все это выйдет друг за другом. Конечно, это статьи, ориентированные на новичков, и мастодонтам они будут не очень интересны, но тем, кто использует блог как справочник, возможно, пригодятся эти наработки, чтобы быстро реализовывать тот или иной эффект, не описывая одно и тоже каждый раз в новом проекте и сэкономят немного времени. Приступим.
Чтобы статья получилась максимально полной, будем придерживаться следующего плана и сделаем:
модальное окно с использованием jQuery.
Простое модальное окно с использованием чистого js.
Конечно же я покажу как вызывать несколько модальных окно на станице, так как это тоже один из частых вопросов, возникающих у новичков. Разберем возможность закрытия окна при клике вне области контента, решим проблему вертикальной прокрути и другие нюансы, которые возникнут в ходе работы или о которых сообщите вы в комментариях.
Структура проекта для понимания какие файлы и где находятся.
Начнем с разметки. Для создания модального окна я обычно пользуюсь такой структурой.
Где «modal» — это затемненный фон, а «modal__content» — область контента. При этом, когда срабатывает триггер, вызывающий окно, например нажатие кнопки, то к «modal» добавляется класс «modal_active», который дает понять, что модальное окно находится в открытом состоянии. Добавляя или удаляя «modal_active» мы будем открывать или скрывать модальное окно манипулирую стилями.
Большинству читающих нужна будет форма в модальном окне. Можно использовать эту.
Я, для примера, просто выведу текст:
Smartlanding
тут.
Создал простейшую шапку сайта с кнопкой обратного звонка, которая должна вызвать модальное окно. Классический пример любого лендинга.
Давайте добавим немного стилей и приведем в порядок открытое состояние модалки. Вот, что получилось у меня.
Обратите внимание, что в правом углу контентной области модального окна появилась кнопка с изображением крестика. Файл лежит в папке «img», рядом с папкой «js» и «css».
Тут нас больше всего интересует класс «.modal». Как я и говорил, это само модальное окно с полупрозрачным фоном. Давайте подробнее разберем что там за стили.
Первым делом «вырвем» из потока блок с модальным окном при помощи фиксированного позиционирования. Затем, при помощи свойств «top», «left», «right», «bottom» растянем модальное окно по ширине на весь экран. Z-index — нужен для того, чтобы расположить окно над всеми элементами. Если у кого-то другого элемента значение этого свойства будет выше, то модальное окно не перекроет его.
Окно прекрасно смотрится, но есть одно «но!». Помните я говорил, что активное состояния модального окна, это когда у нас есть класс «modal_active», а без этого класса, окно закрыто? Сейчас мы доведем до ума эту концепцию. Суть в том, чтобы при «modal» сделать окно скрытым, а при «modal_active» — показать.
Давайте создадим этот класс в стилях и настроим отображение окна только при его наличии.
Для показа/скрытия окна будем пользоваться «visibility», «opacity», «position» и свойство «transition» для плавности анимации появления.
Если еще подробнее, то сначала зададим нулевую прозрачность, а при помощи абсолютного позиционирования и свойства «top» уберем модальное окно за пределы видимости. Дополнительно, для надежности, при помощи свойства «visibility» скроем разметку окна.
В момент, когда появится класс «modal_active» инвертируем «visibility» и «opacity», а также поменять «position» и положение в свойстве «top».
Звучит страшнее, чем кажется, на сам деле все довольно просто.
Попробуйте добавить вручную и убедиться, что окно успешно появляется.
Пол дела сделали, осталось добавлять этот класс модальному окну при клике по кнопке. Тут подход и разделится. Первый вариант сделаем с использованием jQuery, а второй без него на чистом js.
Но прежде нужно подключить файл скриптов к нашей html страничке. Делается это так:
Smartlanding
тут.
Вызов модального окна при помощи jQuery
Исходник модального окна с использованием jQuery
Компонент Модальное окно Modal
Шикарный компонент для создания модальных диалоговых окон с разными стилями и переходами. Модификаторы. Руководство.
Модальный компонент состоит из перекрытия (overlay), диалогового окна и необязательной кнопки закрытия. Вы можете использовать любой элемент для переключения модального окна.
Руководство
Modal
Чтобы включить необходимый JavaScript, добавьте атрибут uk-toggle . Элемент должен быть связан с модальным идентификатором (id). Если вы используете другой элемент, например кнопку, просто добавьте атрибут uk-toggle=»target: #ID» , чтобы указать в нём идентификатор модального контейнера.
Добавьте к элементу атрибут uk-modal , чтобы создать модальный контейнер и наложение (перекрытие, overlay), которое затемняет страницу. Важно добавить id , чтобы указать цель для переключения. Обратите внимание на следующие классы и используйте их при создании модальных окон.
Класс
Описание
.uk-modal-dialog
Добавьте этот класс в дочерний элемент для создания диалогового окна.
.uk-modal-body
Добавьте этот класс для создания внутренних отступов между модальным окном и его содержимым.
.uk-modal-title
Добавьте этот класс к элементу заголовка, чтобы создать модальный заголовок.
.uk-modal-close
Добавьте этот класс к элементу или , чтобы создать кнопку закрытия и включить ее функциональность. По умолчанию не имеет стилей.
Модальный заголовок
Изображение Видео YouTube Vimeo
Изображение + диалоговое окно Изображение + диалоговое окно + внутренние отступы
Модальные группы
Вызвать модальное окно из модального окна
Вы можете сгруппировать несколько модальных окон, связывая одно окно с другим, по типу вперёд и назад. Используйте этот вариант, при создании модальных окон с «шагами», многошаговых модалок, как модальное окно в модальном c неограниченной вложенностью.
Далее
Предыдущее
Результат
Разметка
Модальный заголовок 1
Ну вот живет генерал в своем поместье в две тысячи душ, чванится, третирует мелких соседей как приживальщиков и шутов своих. Всё, что ты вновь возвестишь, посягнет на свободу веры людей, ибо явится как чудо, а свобода их веры тебе была дороже всего еще тогда, полторы тысячи лет назад. Вспомни первый вопрос; хоть и не буквально, но смысл его тот. Вместо твердого древнего закона — свободным сердцем должен был человек решать впредь сам, что добро.
Модальный заголовок 2
Скажут это они в отчаянии, и сказанное ими будет богохульством, от которого они станут еще несчастнее, ибо природа. Кто знает, может быть, случались и между римскими первосвященниками эти единые. Даже подивиться можно было нелогичности и беспорядку иных желаний его, поневоле выходивших наружу и всегда одинаково неясных. Вот они и поймут, что нечто случилось внезапное и что оченно надо мне их видеть, и тоже мне отопрут, а я войду и доложу.
Модальное окно 1 Модальное окно 2
Ну вот живет генерал в своем поместье в две тысячи душ, чванится, третирует мелких соседей как приживальщиков и шутов своих. Всё, что ты вновь возвестишь, посягнет на свободу веры людей, ибо явится как чудо, а свобода их веры тебе была дороже всего еще тогда, полторы тысячи лет назад.
Вспомни первый вопрос; хоть и не буквально, но смысл его тот. Вместо твердого древнего закона — свободным сердцем должен был человек решать впредь сам, что добро.
Далее
Скажут это они в отчаянии, и сказанное ими будет богохульством, от которого они станут еще несчастнее, ибо природа. Кто знает, может быть, случались и между римскими первосвященниками эти единые. Даже подивиться можно было нелогичности и беспорядку иных желаний его, поневоле выходивших наружу и всегда одинаково неясных. Вот они и поймут, что нечто случилось внезапное и что оченно надо мне их видеть, и тоже мне отопрут, а я войду и доложу.
Предыдущее окно
Параметры для атрибута
При использовании компонента Modal к атрибуту можно применить любой из этих параметров. Разделяйте несколько вариантов точкой с запятой. Для получения дополнительной информации ознакомьтесь с главой Конфигурация компонента.
Опции компонента
Опция
Значение
По умолчанию
Описание
esc-close
Boolean
true
Закрытие модального при нажатии клавиши Esc.
bg-close
Boolean
true
Закрытие модального при нажатии на фон.
stack
Boolean
false
Модальные стеки, когда открыто более одного. По умолчанию предыдущее модальное будет скрыто.
container
String
true
Определите целевой контейнер с помощью селектора, чтобы указать, где модальный объект должен быть добавлен в DOM. Установка в false предотвратит это поведение.
cls-page
String
‘uk-modal-page’
Класс для добавления в , когда модальное окно активно.
cls-panel
String
‘uk-modal-dialog’
Класс элемента, который следует считать модальной панелью.
CSS селектор для всех элементов, которые должны вызывать закрытие модального окна.
JavaScript
Узнайте больше о использовании JavaScript в компонентах фреймворка UIkit 3.
Инициализация
UIkit.modal(element, options);
События
Следующие события будут инициированы для элементов компонента «Modal»:
Имя события
Описание
beforeshow
Срабатывает до показа элемента.
show
Срабатывает после показа элемента.
shown
Запускается после завершения анимации показанного элемента.
beforehide
Срабатывает до того, как элемент скрыт.
hide
Запускается после запуска анимации скрытия элемента.
hidden
Срабатывает после того, как элемент скрыт.
Методы
Для компонента «Modal» доступны следующие методы:
Show
UIkit.modal(element).show();
Показывает модальное окно.
Hide
UIkit.modal(element).hide();
Скрывает модальное окно.
Пример скрытия
Пример кода для скрытия открытого модального окна с ID myModal . При нажатии на кнопку с ID myBtnClose метод setTimeout() установит таймаут, модальное окно будет закрыто через четыре секунды. В примере испольуется JavaScript утилита UIkit.util.on().
Компонент поставляется с рядом подготовленных модальных диалогов, которые вы можете использовать для взаимодействия с пользователем. Вы можете вызвать диалог напрямую из JavaScript и использовать функции обратного вызова.
Код
Описание
UIkit.modal.alert(‘Уведомление Alert UIkit 3!’)
Показывает окно оповещения с одной кнопкой.
UIkit.modal.confirm(‘UIkit confirm!’)
Показывает диалог подтверждения с вашим сообщением и двумя кнопками.
UIkit.modal.prompt(‘Имя:’, ‘Ваше имя’)
Показывает диалог, запрашивающий ввод текста.
UIkit.modal.dialog(‘
UIkit 3 диалог!
‘);
Показывает диалог с любым содержимым HTML.
Для обработки пользовательского ввода модальное окно использует интерфейс на основе промисов (promise), который предоставляет функцию then() для регистрации ваших функций обратного вызова. Однако функция UIkit.modal.dialog вернет само модальное окно.
UIkit.modal.confirm('UIkit confirm!').then(function() < console.log('Confirmed.') >, function () < console.log('Rejected.') >);
Возвращаемое обещание (дословный перевод слова «промис») имеет свойство dialog , которое содержит ссылку на само модальное окно. Это позволяет вам манипулировать, например, разметкой модального элемента.
const modal = UIkit.modal.confirm('UIkit confirm!').dialog; // Модальный компонент const el = modal.$el; // Модальный элемент
Alert Confirm Prompt Dialog
Доступность
Компонент «Модальное окно» (Modal) придерживается Dialog (Modal) Pattern и автоматически устанавливает соответствующие роли, состояния и свойства WAI-ARIA.
Область modal имеет роль dialog и свойство aria-modal .
Компонент Close автоматически устанавливает соответствующие роли и свойства WAI-ARIA.
Значок закрытия имеет свойство aria-label , а если используется элемент , то роль button .
Взаимодействие с клавиатурой
Доступ к модальному компоненту можно получить с помощью клавиатуры, используя следующие клавиши:
Клавиша esc закрывает модальное окно. Если параметр установлен bg-close: false , то это поведение отключено.
Как создать простое модальное окно на CSS
Модальные (всплывающие) окна – это очень популярный элемент интерфейса современных сайтов. Оно может использоваться для вывода различного контента веб-страниц такого, например, как формы (обратной связи, регистрации, авторизации), блоки рекламной информации, изображения, уведомления и др.
В большинстве случаев модальное окно создают на JavaScript. Но его можно создать не только с помощью JavaScript, но и посредством только HTML5 и CSS3.
Демо модального окна
Демонстрацию всплывающего окна, работающего только на HTML5 и CSS3, вы можете посмотреть здесь:
HTML и CSS код модального окна
HTML разметка модального окна:
Название ×
Содержимое модального окна.
Ссылка, с помощью которой осуществляется открытие модального окна:
CSS модального окна:
/* стилизация содержимого страницы */ body { font-family: -apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; font-size: 16px; font-weight: 400; line-height: 1.5; color: #292b2c; background-color: #fff; } /* свойства модального окна по умолчанию */ .modal { position: fixed; /* фиксированное положение */ top: 0; right: 0; bottom: 0; left: 0; background: rgba(0,0,0,0.5); /* цвет фона */ z-index: 1050; opacity: 0; /* по умолчанию модальное окно прозрачно */ -webkit-transition: opacity 200ms ease-in; -moz-transition: opacity 200ms ease-in; transition: opacity 200ms ease-in; /* анимация перехода */ pointer-events: none; /* элемент невидим для событий мыши */ margin: 0; padding: 0; } /* при отображении модального окно */ .modal:target { opacity: 1; /* делаем окно видимым */ pointer-events: auto; /* элемент видим для событий мыши */ overflow-y: auto; /* добавляем прокрутку по y, когда элемент не помещается на страницу */ } /* ширина модального окна и его отступы от экрана */ .modal-dialog { position: relative; width: auto; margin: 10px; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 30px auto; /* для отображения модального окна по центру */ } } /* свойства для блока, содержащего контент модального окна */ .modal-content { position: relative; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid rgba(0,0,0,.2); border-radius: .3rem; outline: 0; } @media (min-width: 768px) { .modal-content { -webkit-box-shadow: 0 5px 15px rgba(0,0,0,.5); box-shadow: 0 5px 15px rgba(0,0,0,.5); } } /* свойства для заголовка модального окна */ .modal-header { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: justify; -webkit-justify-content: space-between; -ms-flex-pack: justify; justify-content: space-between; padding: 15px; border-bottom: 1px solid #eceeef; } .modal-title { margin-top: 0; margin-bottom: 0; line-height: 1.5; font-size: 1.25rem; font-weight: 500; } /* свойства для кнопки "Закрыть" */ .close { float: right; font-family: sans-serif; font-size: 24px; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: .5; text-decoration: none; } /* свойства для кнопки "Закрыть" при нахождении её в фокусе или наведении */ .close:focus, .close:hover { color: #000; text-decoration: none; cursor: pointer; opacity: .75; } /* свойства для блока, содержащего основное содержимое окна */ .modal-body { position: relative; -webkit-box-flex: 1; -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; padding: 15px; overflow: auto; }
Если вам необходимо убрать скролл страницы после отображения модального окна, то к элементу body нужно добавить CSS-свойство overflow со значением hidden . А после скрытия модального окна данное свойство убрать у элемента body . Данное действие можно осуществить только с помощью JavaScript: