html - CSS/HTML 模式 - 使用 Escape 键/单击外部关闭

标签 html css modal-dialog

我有以下模态工作,

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

在我的网站上。就易用性和功能而言,这正是我想要的。我遇到的唯一问题是当用户 A) 在模态窗口外单击,或 B) 点击 Escape 键时如何关闭模态。

有什么建议吗?

    <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;
}

最佳答案

为此,您需要一些 javascript。检查代码并添加一些注释。

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);

演示:http://jsfiddle.net/GG9Sa/264/

请注意,关闭模式在技术上仅可通过 CSS/HTML 实现,但是要处理 Escape 键按下,您将需要 Javascript。

关于html - CSS/HTML 模式 - 使用 Escape 键/单击外部关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758991/

相关文章:

jquery - 将 td append 到表行添加标记名而不是标记本身

html - 页面顶部的空白

html - 如何禁用 Chrome 自动填充用户名/电子邮件密码?

html - 始终在动态内容 div 中获得阅读更多链接的相同位置

CSS:在屏幕外 float 两个宽度为 100% 的 div 元素?

html - 标题的 Flexbox 宽度与内容的外部对齐

javascript - 带有显示 XML 数据的 HTML 的空白页面

ios - 向部分脱离 View 的模态视图添加关闭按钮

javascript - 模态对话框中的 CKEditor 和 elFinder

python-3.x - Tkinter 模态窗口不允许主窗口最大化