Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS/HTML Modal- Using the Escape key/Click outside to close

I have the following modal working,

http://jsfiddle.net/kumarmuthaliar/GG9Sa/1/

on my site. It's exactly what I want in terms of ease of use, and function. The only issue I have is how to make the modal close when the user either A) Clicks outside the modal window, or B) Hits the Escape key.

Any suggestions?

    <a href="#openModal">Open Modal</a>

    <div id="openModal" class="modalDialog">
        <div>   <a href="#close" title="Close" class="close">X</a>

                <h2>Modal Box</h2>

            <p>This is a sample modal box that can be created using the powers of CSS3.</p>
            <p>You could do a lot of things here like have a pop-up ad that shows when your website loads, or create a login/register form for users.</p>
        </div>
    </div>

.modalDialog {
    position: fixed;
    font-family: Arial, Helvetica, sans-serif;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: rgba(0, 0, 0, 0.8);
    z-index: 99999;
    opacity:0;
    -webkit-transition: opacity 400ms ease-in;
    -moz-transition: opacity 400ms ease-in;
    transition: opacity 400ms ease-in;
    pointer-events: none;
}
.modalDialog:target {
    opacity:1;
    pointer-events: auto;
}
.modalDialog > div {
    width: 400px;
    position: relative;
    margin: 10% auto;
    padding: 5px 20px 13px 20px;
    border-radius: 10px;
    background: #fff;
    background: -moz-linear-gradient(#fff, #999);
    background: -webkit-linear-gradient(#fff, #999);
    background: -o-linear-gradient(#fff, #999);
}
.close {
    background: #606061;
    color: #FFFFFF;
    line-height: 25px;
    position: absolute;
    right: -12px;
    text-align: center;
    top: -10px;
    width: 24px;
    text-decoration: none;
    font-weight: bold;
    -webkit-border-radius: 12px;
    -moz-border-radius: 12px;
    border-radius: 12px;
    -moz-box-shadow: 1px 1px 3px #000;
    -webkit-box-shadow: 1px 1px 3px #000;
    box-shadow: 1px 1px 3px #000;
}
.close:hover {
    background: #00d9ff;
}
like image 718
DNevens Avatar asked Jan 03 '15 20:01

DNevens


People also ask

How do you close modal by clicking outside of modal?

Modal Header You have two options to close this modal: Click on the "x" or click anywhere outside of the modal!

How do you stop modal close on outside click?

Data-keyword=”false” is to prevent closing modal while clicking Esc button, while data-backdrop=”static” , allows you keep modal pop-up opened when clicking on Gray area.

How do you close a modal in HTML?

To close a modal, add the w3-button class to an element together with an onclick attribute that points to the id of the modal (id01). You can also close it by clicking outside of the modal (see example below). Tip: &times; is the preferred HTML entity for close icons, rather than the letter "x".

How do I stop my modal from closing when I click inside?

You can prevent closing of modal dialog by setting the beforeClose event argument cancel value to true. In the following sample, the dialog is closed when you enter the username value with minimum 4 characters. Otherwise, it will not be closed.


2 Answers

For this you will need a little javascript. Check the code with some comments.

function modalClose() {
    if (location.hash == '#openModal') {
        location.hash = '';
    }
}

// Handle ESC key (key code 27)
document.addEventListener('keyup', function(e) {
    if (e.keyCode == 27) {
        modalClose();
    }
});

var modal = document.querySelector('#openModal');

// Handle click on the modal container
modal.addEventListener('click', modalClose, false);

// Prevent event bubbling if click occurred within modal content body
modal.children[0].addEventListener('click', function(e) {
    e.stopPropagation();
}, false);

Demo: http://jsfiddle.net/GG9Sa/264/

Note, that closing modal is technically possible with CSS/HTML only, however for handling Escape key press you will need Javascript.

like image 50
dfsq Avatar answered Sep 21 '22 01:09

dfsq


just write these lines in your head tag

$(document).on('keyup',function(evt) {
  if (evt.keyCode == 27) {
    location.href="#close";
  }   
});
like image 27
Suraj Rotkar Avatar answered Sep 21 '22 01:09

Suraj Rotkar