1. Главная страница » Как сделать...? » Модальные всплывающие окна с помощью CSS

Модальные всплывающие окна с помощью CSS

Автор: | 05.04.2013

Во-первых, давайте создадим файл 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;
}

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

Посмотреть, что получилось

Скачать одним архивом

Модальные всплывающие окна с помощью CSS: 17 комментариев

  1. Татьяна

    Татьяна Подскажите, а куда необходимо закинуть фаил style.css?

  2. sasha

    sasha Рядом с файлом: «demo.html» То есть, в той-же папке… Так называемый «корень Вашего сайта», в той папке где хранятся все основные файлы Вашего сайта.

  3. Искандар

    Искандар на гугл хроме не работает, появляется и сразу исчезает окно

  4. sasha

    sasha У меня установлена последняя версия хрома, и вроде работает все нормально…

  5. Михаил

    Михаил Все работает! Спасибо! Однако, можно ли вызывать данное модальное окно через button? попытался сделать так: — модальное окно не появляется…

  6. sasha

    sasha Кнопку необходимо поместить в форму, а на форму повесить переход по ссылке:

  7. Михаил

    Михаил А как сделатьтак? если имеется: Сходу не получилось заделать модальное окно по нажатию кнопки submit.

  8. sasha

    sasha Точно так-же, помешаем «submit» в форму а форму ссылаем на id окна:

  9. Михаил

    Михаил А это куда?         

  10. Екатерина

    Екатерина Спасибо за урок. Работает. Но есть вопрос. Как убрать полосу прокрутки у подложки у вашего модального окна? Именно в момент открытия модального окна.

  11. sasha

    sasha Не совсем понял вопрос, в моем примере я ни где не нашел полосу прокрутки.

  12. Екатерина

    Екатерина Верно, в вашем примере полосы прокрутки нет. Я столкнулась с этой проблемой у себя, модальное окно сделано по вашему примеру. Имеется ввиду полоса прокрутки на самой странице. Когда открывается модальное окно, то оно как бы перемещается вместе со станицей. Суть в том, чтобы, когда мы открываем модальное окно, пользоваться прокруткой на странице нельзя было. Заранее спасибо за ответ.

  13. sasha

    sasha Екатерина, к сожалению Вам не удастся решить эту проблему одним-лишь css. Вам придется прибегнуть к JavaScript или jQuery. Здесь я не буду описывать как это реализовать, потому что это материал для небольшой статьи. Если Вам это нужно реализовать в ближайшее время, то Вы можете найти в интернете кучу готовых решений. Например по запросу: «Как убрать скроллинг при открытом модальном окне»

  14. Борис

    Борис Здравствуйте,Саша! Спасибо за полезный урок. В Вашем примере: если окно открыто, то 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 () срабатывала сразу после открытия окна. Благодарю заранее.

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

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

*

code