Блог веб разработки

Блог веб-разработки статьи | видеообзоры | исходный код

Модальные окна HTML

Всем привет! Наверняка на многих сайтах вы встречались с модальными окнами, различных баннеров, форм заполнения, приглашений подписаться и т. д. В html5 есть специальный тег dialog для создания модальных окон.

Допустим у нас есть небольшая форма подписки на сайте:

<dialog >
    <button id="none" style="float:right;" >x</button>
    <h3>Подписка</h3>
    <form action="/" method="post">
        <input type="email" placeholder="Введите ваш email" required>
        <br>
        <br>
        <input type="submit" style="text-align:center;" value="Оставить данные">
    </form>
</dialog>

и данную форму мы обернули в тег dialog. Изначально содержимое данного тега не отображается.

Создаем дополнительную кнопку и навешиваем на нее событие клика.

<button id="ok">Подписаться</button>
<script>
    var dialog = document.querySelector('dialog');
    document.querySelector('#ok').addEventListener('click', function(){
        dialog.showModal();
    });
    document.querySelector('#none').addEventListener('click', function(){
        dialog.close();
    });
</script>

Мы создали кнопку подписаться, а ниже написали небольшой js код. Вначале мы получаем элемент элемент dialog, а затем в зависимости от нажатой кнопки разворачиваем или сворачиваем модальное окно.

С помощью метода showModal() элемента dialog мы разворачиваем модальное окно. Обратите внимание модальное окно с нашей формой подписки появляется в самом центре страницы. Весь фон вокруг модального окна немного затемняется тем самым акцентируя внимание на самом окне.

C помощью псевдоселектора backdrop в css мы можем самостоятельно задавать фон вокруг модального окна:

dialog::backdrop {
    background: rgba(0,0,0,0.7);
}

Здесь в качестве фона мы задали черный цвет с прозрачностью 0.7

Метод close() элемента dialog сворачивает(закрывает) модальное окно.

Элемент dialog поддерживается во всех современных браузерах. Однако его методы showModal() и close() на данный момент поддерживаются только в браузерах webkit(google, opera).

Однако проявив немного изобретательности можно обойти данное ограничение:

var dialog = document.querySelector('dialog');
document.querySelector('#ok').addEventListener('click', function(){
    if(dialog.showModal){
        dialog.showModal();
    }else{
        dialog.style.display = "block";
    }
});
document.querySelector('#none').addEventListener('click', function(){
    if(dialog.close){
        dialog.close();
    }else{
        dialog.style.display = "none";
    }
});

Ничего не мешает нам проверить поддержку методов showModal() и close(). Если они не поддерживаются, используем просто значения свойства display(block - показать модальное окно или none - свернуть модальное окно). К сожалению псевдоселектор backdrop поддерживается пока только в браузерах webkit. Однако и здесь проявив смекалку можно обойти данное ограничение просто добавив строчку.

document.querySelector("body").style.background = 'rgba(0,0,0,0.7)';

Используя элемент dialog вам не придется писать стилей для позиционирования модального окна и предварительного его скрытия. И это может быть очень удобно.

На этом данная статья подошла к концу. Если у вам возникли вопросы оставляйте их в комментариях или группе

ВК

На этом я с вами прощаюсь. Желаю успехов и удачи! Пока!

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

Еще статьи

HTML Drag-and-drop

файловая система PHP

iframe javaScript

tkinter создание окна

tkinter события

border image css

wget python

BeautifulSoup4 python

css zoom

Комментарии

Антон

Перезвоните мне пожалуйста 8 (812) 389-60-30 Антон.

11:53 15-08-2019

История

    НОВОСТИ

    • Опубликовал приложение под android 'Аудиокниги'. Кому интересно, переходите по ссылке