Во-первых, давайте создадим файл HTML и назовем его «demo.html». Как вы можете видеть — структура довольно простая, если брать в расчет именно разметку модальных окон и кнопок (ссылок) для их вызова. Каждая панель (всплывающее окно), назовем ее так, содержит ничто иное как блочный элемент DIV с определенным содержанием внутри, ну и конечно же кнопку «Закрыть». Дальше приведу пример кода демо-страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; Windows-1251"> <meta name="keywords" content="модальное окно" /> <meta name="description" content="всплывающие модальные окна" /> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> <title>Модальные всплывающие окнa</title> </head> <body> <h2>Модальные всплывающие окна с помощью CSS3 без Javascript</h2> <center> <!-- Ссылки на вызов моалных окон--> <p><a href="#win1" id="win_pop">Открыть модельное окно!</a></p><br/> <h2>Нажмите на изображение чтобы посмотреть масштабную фотграфию в модальном окне.</h2> <p><a href="#win2" id="win_pop"><img title="coloboc" src="imges/coloboc.png" width="128" height="110" alt="coloboc" /></a><p><br/> </center> <!-- Модальное окно №1 --> <a href="#x" class="overlay" id="win1"></a> <div class="popup"> <img src="imges/user.png" width="100" height="102" alt="Веб-приложения" style="float:left;margin:5px 10px 5px 0;" /> <p>Противостояние жизненно перечеркивает азимут, это довольно часто наблюдается у сверхновых звезд второго типа. Параллакс, несмотря на внешние воздействия, отражает центральный экватор, а оценить проницательную способность вашего телескопа поможет следующая формула: Mпр.= 2,5lg Dмм + 2,5lg Гкрат + 4. Спектральный класс, и это следует подчеркнуть, гасит вращательный лимб, и в этом вопросе достигнута такая точность расчетов, что, начиная с того дня, как мы видим, указанного Эннием и записанного в "Больших анналах", было вычислено время предшествовавших затмений солнца, начиная с того, которое в квинктильские ноны произошло в царствование Ромула. Угловое расстояние иллюстрирует экваториальный возмущающий фактор, это довольно часто наблюдается у сверхновых звезд второго типа. Дип-скай объект, после осторожного анализа, притягивает радиант – север вверху, восток слева. Это можно записать следующим образом: V = 29.8 * sqrt(2/r – 1/a) км/сек, где уравнение времени решает популяционный индекс, однако большинство спутников движутся вокруг своих планет в ту же сторону, в какую вращаются планеты. </p> <a class="close"title="Закрыть" href="#close"></a> </div> <!-- Модальное окно №2 --> <a href="#x" class="overlay" id="win2"></a> <div class="popup"> <center><img title="Гипперреализм" src="imges/coloboc.png" alt="coloboc" /></center> <a class="close" title="Закрыть" href="#close"></a> </div> </body> </html> |
В вышеприведенном примере код модальных окон окрашен в зеленый цвет. Вам остается в div контейнер всплывающего окна поместить свое содержание, будь то просто текст, картинки или видео.
Далее важно подготовить необходимые стили для нашего модального окошка, пропишем их в отдельном файле «style.css»
Файл style.css:
h2 { font: 28px Tahoma, Helvetica, Arial, Sans-Serif; text-align: center; color: #222; text-shadow: 0px 2px 3px #555; } /* Базовые стили модального окна */ .overlay { background-color: rgba(0, 0, 0, 0.7); bottom: 0; cursor: default; left: 0; opacity: 0; position: fixed; right: 0; top: 0; visibility: hidden; z-index: 1; -webkit-transition: opacity .5s; -moz-transition: opacity .5s; -ms-transition: opacity .5s; -o-transition: opacity .5s; transition: opacity .5s; } .overlay:target { visibility: visible; opacity: 1; } .popup { background-color: #fff; border: 3px solid #fff; display: inline-block; left: 30%; opacity: 0; padding: 15px; position: fixed; text-align: justify; font: 14px Helvetica, Arial, Sans-Serif; top: 25%; visibility: hidden; z-index: 10; -webkit-transform: translate(-17%, -17%); -moz-transform: translate(-17%, -17%); -ms-transform: translate(-17%, -17%); -o-transform: translate(-17%, -17%); transform: translate(-17%, -17%); -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; -o-border-radius: 10px; border-radius: 10px; -webkit-box-shadow: 0 1px 1px 2px rgba(0, 0, 0, 0.4) inset; -moz-box-shadow: 0 1px 1px 2px rgba(0, 0, 0, 0.4) inset; -ms-box-shadow: 0 1px 1px 2px rgba(0, 0, 0, 0.4) inset; -o-box-shadow: 0 1px 1px 2px rgba(0, 0, 0, 0.4) inset; box-shadow: 0 1px 1px 2px rgba(0, 0, 0, 0.4) inset; -webkit-transition: opacity .5s, top .5s; -moz-transition: opacity .5s, top .5s; -ms-transition: opacity .5s, top .5s; -o-transition: opacity .5s, top .5s; transition: opacity .5s, top .5s; } .overlay:target+.popup { top: 25%; opacity: 1; visibility: visible; } .close { background-color: rgba(0, 0, 0, 0.8); height: 30px; line-height: 30px; position: absolute; right: 0; text-align: center; text-decoration: none; top: -15px; width="99%"; -webkit-border-radius: 15px; -moz-border-radius: 15px; -ms-border-radius: 15px; -o-border-radius: 15px; border-radius: 15px; } .close:before { color: rgba(255, 255, 255, 0.9); content: "X"; font-size: 24px; text-shadow: 0 -1px rgba(0, 0, 0, 0.9); } .close:hover { background-color: rgba(64, 128, 128, 0.8); } .popup p, .popup div { padding: 0px 5px 0px 5px; } |
Как видите, все довольно просто. Если все проделаете правильно, то получите замечательное модальные всплывающее окно, в которое сможете разместить любой контент, будь то элементы текста, фотографии, формы регистрации, или же видео из любого источника.
Ipman спасибо ОГРОМНОЕ! отличная статья!
Татьяна Подскажите, а куда необходимо закинуть фаил style.css?
sasha Рядом с файлом: «demo.html» То есть, в той-же папке… Так называемый «корень Вашего сайта», в той папке где хранятся все основные файлы Вашего сайта.
Виталий Спасибо! Прикручу к своему сайту
Искандар на гугл хроме не работает, появляется и сразу исчезает окно
sasha У меня установлена последняя версия хрома, и вроде работает все нормально…
Михаил Все работает! Спасибо! Однако, можно ли вызывать данное модальное окно через button? попытался сделать так: — модальное окно не появляется…
sasha Кнопку необходимо поместить в форму, а на форму повесить переход по ссылке:
Михаил А как сделатьтак? если имеется: Сходу не получилось заделать модальное окно по нажатию кнопки submit.
sasha Точно так-же, помешаем «submit» в форму а форму ссылаем на id окна:
Михаил А это куда?
Прот….неты.
sasha В любом месте, между тегами «body»
!!!сюда!!!Екатерина Спасибо за урок. Работает. Но есть вопрос. Как убрать полосу прокрутки у подложки у вашего модального окна? Именно в момент открытия модального окна.
sasha Не совсем понял вопрос, в моем примере я ни где не нашел полосу прокрутки.
Екатерина Верно, в вашем примере полосы прокрутки нет. Я столкнулась с этой проблемой у себя, модальное окно сделано по вашему примеру. Имеется ввиду полоса прокрутки на самой странице. Когда открывается модальное окно, то оно как бы перемещается вместе со станицей. Суть в том, чтобы, когда мы открываем модальное окно, пользоваться прокруткой на странице нельзя было. Заранее спасибо за ответ.
sasha Екатерина, к сожалению Вам не удастся решить эту проблему одним-лишь css. Вам придется прибегнуть к JavaScript или jQuery. Здесь я не буду описывать как это реализовать, потому что это материал для небольшой статьи. Если Вам это нужно реализовать в ближайшее время, то Вы можете найти в интернете кучу готовых решений. Например по запросу: «Как убрать скроллинг при открытом модальном окне»
Борис Здравствуйте,Саша! Спасибо за полезный урок. В Вашем примере: если окно открыто, то http://www.web-shpargalka.ru/modal_ocno/demo.html#win1 при закрытии окна по нажатию на крестик — http://www.web-shpargalka.ru/modal_ocno/demo.html#close при закрытии другого окна по нажатию за пределами окна (не на крестик), — http://www.web-shpargalka.ru/modal_ocno/demo.html# Мне бы хотелось связать с помощью js открытие и закрытие конкретного окна с запуском функций, влияющих на содержимое основного окна, и поместить скрипт в тело основного окна. Блок-схема простая: if Правильно писать в условии Открытия окна именно так или по иному? (<http://www.web-shpargalka.ru/modal_ocno/demo.html#win1> == true) { function1 () } else if Правильно писать в условии Закрытия окна именно так или по иному? (http://www.web-shpargalka.ru/modal_ocno/demo.html#close == true) { function2 () } Else { } Подскажите, пожалуйста, как точно написать эти две строки в условиях – if и else if, чтобы по факту работали обе функции (на открытии и закрытии), или хотя бы function1 () срабатывала сразу после открытия окна. Благодарю заранее.