Модальное окно jquery css

Как сделать модальное окно на сайте

Привет друзья, в этому году меня несколько раз просили объяснить, как сделать модальное окно на сайте. Кто-то, изучая азы веб-разработки неизбежно приходил к ситуации, когда часть контент необходимо отобразить в модальном окне, кто-то, работая с формами, хочет показать ее не в открытом виде, а в pop-up при клике на кнопку.

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

Все это выйдет друг за другом. Конечно, это статьи, ориентированные на новичков, и мастодонтам они будут не очень интересны, но тем, кто использует блог как справочник, возможно, пригодятся эти наработки, чтобы быстро реализовывать тот или иной эффект, не описывая одно и тоже каждый раз в новом проекте и сэкономят немного времени. Приступим.

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

  • модальное окно с использованием jQuery.
  • Простое модальное окно с использованием чистого js.

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

Структура проекта для понимания какие файлы и где находятся.

Читайте также:  Шифровка паролей в php

Начнем с разметки. Для создания модального окна я обычно пользуюсь такой структурой.

Где «modal» — это затемненный фон, а «modal__content» — область контента. При этом, когда срабатывает триггер, вызывающий окно, например нажатие кнопки, то к «modal» добавляется класс «modal_active», который дает понять, что модальное окно находится в открытом состоянии. Добавляя или удаляя «modal_active» мы будем открывать или скрывать модальное окно манипулирую стилями.

Большинству читающих нужна будет форма в модальном окне. Можно использовать эту.

Я, для примера, просто выведу текст:

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

Шапка с кнопкой для вызова модального окна

Давайте добавим немного стилей и приведем в порядок открытое состояние модалки. Вот, что получилось у меня.

как сделать модальное окно для сайта

Обратите внимание, что в правом углу контентной области модального окна появилась кнопка с изображением крестика. Файл лежит в папке «img», рядом с папкой «js» и «css».

.modal < position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1000; background: rgba(0, 0, 0, 0.9); display: flex; justify-content: center; align-items: flex-start; overflow-y: scroll; padding: 60px 15px; >.modal__content < width: 100%; max-width: 500px; padding: 50px; background: #f9f9f9; border-radius: 3px; position: relative; box-shadow: 0 5px 15px black; >.modal__close-button < background: #ff0000; height: 30px; width: 30px; display: flex; justify-content: center; align-items: center; border: none; position: absolute; right: 0; top: 0; background: none; cursor: pointer; transition: .3s; outline: none; >.modal__close-button:hover < transition: .3s; transform: rotate(180deg); >.modal__title < font-size: 1.8rem; text-transform: uppercase; margin: 0 0 15px; >.modal__description

Тут нас больше всего интересует класс «.modal». Как я и говорил, это само модальное окно с полупрозрачным фоном. Давайте подробнее разберем что там за стили.

Первым делом «вырвем» из потока блок с модальным окном при помощи фиксированного позиционирования. Затем, при помощи свойств «top», «left», «right», «bottom» растянем модальное окно по ширине на весь экран. Z-index — нужен для того, чтобы расположить окно над всеми элементами. Если у кого-то другого элемента значение этого свойства будет выше, то модальное окно не перекроет его.

position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1000;

Далее задаю цвет фона модального окна.

Цвет задаю в RGBA формате. Первые 3 цифры — это цвет, а последняя — прозрачность. Где «.9» — это прозрачность в 90%.

Далее использую flexbox для центрирования элемента «modal__content» внутри «modal», задаю возможность вертикальной прокрутки и внутренние отступы.

display: flex; justify-content: center; align-items: flex-start; overflow-y: scroll; padding: 60px 15px;

Окно прекрасно смотрится, но есть одно «но!». Помните я говорил, что активное состояния модального окна, это когда у нас есть класс «modal_active», а без этого класса, окно закрыто? Сейчас мы доведем до ума эту концепцию. Суть в том, чтобы при «modal» сделать окно скрытым, а при «modal_active» — показать.

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

Для показа/скрытия окна будем пользоваться «visibility», «opacity», «position» и свойство «transition» для плавности анимации появления.

Если еще подробнее, то сначала зададим нулевую прозрачность, а при помощи абсолютного позиционирования и свойства «top» уберем модальное окно за пределы видимости. Дополнительно, для надежности, при помощи свойства «visibility» скроем разметку окна.

В момент, когда появится класс «modal_active» инвертируем «visibility» и «opacity», а также поменять «position» и положение в свойстве «top».

Звучит страшнее, чем кажется, на сам деле все довольно просто.

Теперь в таком состоянии окно скрыто:

Попробуйте добавить вручную и убедиться, что окно успешно появляется.

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

Но прежде нужно подключить файл скриптов к нашей html страничке. Делается это так:

Вызов модального окна при помощи jQuery

Исходник модального окна с использованием jQuery

Источник

Модальное окно на затемненном фоне

Для модальных окон есть множество плагинов такие, как fancybox, Twitter Bootstrap и т.д. Но бывают случаи когда нет возможности их использовать, рассмотрим примеры статического окна и всплывающего по клику.

Затемнение фона

Для затемнения сайта достаточно добавить в верстку и CSS стили к нему:

Стили задаются псевдоклассом :before для того чтобы opacity не влиял на контент, который будет в этом блоке. Полупрозрачный фон будет растянут на все окно браузера.

Верстка модального окна

Добавим в div.popup-fade блок с контентом, ссылку «закрыть» и стили для них.

Закрыть

Всплывающие окна имеют широкий диапазон применений.

События jQuery

$(document).ready(function($) < // Клик по ссылке "Закрыть". $('.popup-close').click(function() < $(this).parents('.popup-fade').fadeOut(); return false; >); // Закрытие по клавише Esc. $(document).keydown(function(e) < if (e.keyCode === 27) < e.stopPropagation(); $('.popup-fade').fadeOut(); >>); // Клик по фону, но не по окну. $('.popup-fade').click(function(e) < if ($(e.target).closest('.popup').length == 0) < $(this).fadeOut(); >>); >);

Результат

Всплывающее окно по клику

Для реализации popup-а достаточно скрыть блок .popup-fade и добавить событие для открытия окна.

Открыть popup 
Закрыть

Всплывающие окна имеют широкий диапазон применений.

.popup-fade < display: none; >.popup-fade:before < content: ''; background: #000; position: fixed; left: 0; top: 0; width: 100%; height: 100%; opacity: 0.7; z-index: 9999; >.popup < position: fixed; top: 20%; left: 50%; padding: 20px; width: 360px; margin-left: -200px; background: #fff; border: 1px solid orange; border-radius: 4px; z-index: 99999; opacity: 1; >.popup-close

Комментарии 4

Просто и со вкусом! Спасибо!
Подскажите, а как реализовать это решение для следующей задачи:
На странице расположены несколько превьюшек изображений по ходу статьи.
Нужно чтобы по клику на превьюхе, в модальном окне, открывался соотвтествующий ей хайрез.
Пробовал разные стили назначать, но открываются всё равно сразу все, просто в одну колонку ((

Здравствуйте. Взял ваш скрипт и внедрил в свою верстку. Работает. Но есть одно Но. Как сделать так, чтобы можно было прочитать содержимое попапа, если там много текста? Скрол крутит только задний фон. А как прочитать попап не понятно. Вот например

Авторизуйтесь, чтобы добавить комментарий.

Другие публикации

Отслеживание окончания доменов и SSL-сертификатов

При работе с множеством сайтов возникает необходимость в постоянном контроле срока окончания доменов и особенно.

Источник

Создаем простое модальное окно с помощью JQuery

В этой статье мы рассмотрим, как создать простое всплывающее окно HTML :

Для начала создадим базовую HTML-разметку модального окна и открывающейся ссылки:

 Простое модельное окно  

Простое jQuery модальное окно

В приведенном выше коде мы создали ссылку. Затем мы создали само всплывающее окно при нажатии на ссылку HTML .

В следующем шаге нам нужно добавить стили модального окна:

.modalwindow < position:fixed; display:none; /* Скрываем модальное окно по умолчанию */ z-index:9999; width:500px; background: #FF5722; -webkit-box-shadow: 0 8px 6px -6px black; -moz-box-shadow: 0 8px 6px -6px black; box-shadow: 0 8px 6px -6px black; -webkit-box-shadow: 0 8px 6px -6px black; -moz-box-shadow: 0 8px 6px -6px black; box-shadow: 0 8px 6px -6px black; >h2 < background-color: #E64A19; padding: 15px; font-size: 25px; color: #000; margin: 0; font-family: arial; text-align: center; >.content < padding: 20px; color: #fff; font-size: 22px; line-height: 30px; >.close

Перед тем, как сделать всплывающее окно в HTML , осталось добавить JQuery , чтобы оно выводилось при клике по ссылке и размещалось в середине экрана:

//выбираем все теги с именем modal $('a[name=modal]').click(function(e) < //Отменяем поведение ссылки e.preventDefault(); //Получаем тег A var //Получаем ширину и высоту окна var winH = $(window).height(); var winW = $(window).width(); //Устанавливаем всплывающее окно по центру id.css('top', winH/2-id.height()/2); id.css('left', winW/2-id.width()/2); //эффект перехода id.fadeIn(500); >); //если нажата кнопка закрытия окна $('.modalwindow .close').click(function (e) < //Отменяем поведение ссылки e.preventDefault(); $('.modalwindow').fadeOut(500); >);

Не забудьте подключить библиотеку JQuery , иначе создать всплывающее окно HTML не получится:

Все готово, и наше простое JQuery модальное окно должно работать нормально.

Настройка cookies

Если вы не хотите, чтобы всплывающее окно выводилось каждый раз при загрузке страницы, тогда используйте cookies . Для этого создадим новый файл с именем popup.js . Он будет содержать весь код JS и JQuery . Сначала добавим в него функции createCookie() , readCookie() и eraseCookie() :

function createCookie(name,value,days) < if (days) < var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); >else var expires = «»; document.cookie = name+»=»+value+expires+»; path=/»; > function readCookie(name) < var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) < var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); >return null; > function eraseCookie(name)

После этого нужно изменить наш код JQuery для HTML всплывающего окна с текстом и поместить его в функцию с именем myPopup() :

Как видите, мы удалили функцию .click() , так как всплывающее окно не будет управляться внешней функцией. Мы также удалили e.preventDefault() . Следовательно, мы не будем использовать ссылку для вывода модального окна.

После того, как мы добавили эти четыре функции в файл popup.js , нужно добавить последнюю часть кода JQuery , которая будет закрывать всплывающее окно HTML .

//если нажата кнопка закрытия окна $('.modalwindow .close').click(function (e) < //отменяем поведение ссылки e.preventDefault(); $('.modalwindow').fadeOut(500); >);

Все готово. Давайте поэкспериментируем с функциями и сделаем так, чтобы модальное окно показывалось только каждые 7 дней. Для этого создаем переменную с именем popup , которая считывает cookies с именем popup :

// считываем куки 'popup' var popup = readCookie('popup');

Затем создаем конструкцию if else , чтобы проверить, существуют ли cookies . Если да, то ничего не делаем. Иначе входим в цикл, создаем cookies на 7 дней и выводим всплывающее окно при нажатии на ссылку HTML :

// Проверяем, существуют cookies или нет if ( popup != 'hide' ) < // если не существуют, создаем их на 7 дней createCookie('popup','hide','7'); // выводим модельное окно. myPopup(); >// если cookies существуют, ничего не происходит.

Вот и все! Мы реализовали простую систему cookie . Теперь можно удалить следующую часть из HTML-кода , если мы используем куки:

Если у вас возникли какие-либо вопросы, оставьте их в комментариях!

Вадим Дворников автор-переводчик статьи « Create a Simple jQuery Modal Window »

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

Источник

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