单击外部时关闭模态框(仅限 CSS + HTML)

2024-02-18

提前致以问候和感谢

Summary

  • Modal
  • Works就像一个魅力(关闭按钮也很好用)
  • 当用户点击外部时需要关闭它
  • 没有 JS/jQuery(仅限 CSS + HTML)

类似的帖子/问题

  • 通过单击远离模态弹出窗口来关闭它 https://stackoverflow.com/questions/10439779/closing-modal-popup-by-clicking-away-from-it (基于脚本的修复)

  • 仅使用 CSS 关闭模态框 https://stackoverflow.com/questions/35230393/close-modal-using-css-only (基于脚本的修复)

  • 禁用外部点击时关闭模式 https://stackoverflow.com/questions/33908243/disable-close-modal-on-outside-click (基于脚本的修复)

  • HTML5 CSS3模态窗口,点击外部时关闭 https://stackoverflow.com/questions/19684599/html5-css3-modal-window-close-when-click-outside (基于脚本的修复)

  • 通过单击外部关闭 div https://stackoverflow.com/questions/17965839/close-a-div-by-clicking-outside (基于脚本的修复)

  • 单击外部或 ESC 时关闭模态窗口 https://stackoverflow.com/questions/21000467/close-modal-window-when-clicking-outside-or-esc (基于脚本的修复)

所需效果的示例 -achived by using script

  • W3.CSS 模态 http://www.w3schools.com/w3css/tryit.asp?filename=tryw3css_modal_close

可能的修复

  • 通过单击框外部关闭模式 https://stackoverflow.com/questions/35302301/close-modal-by-clicking-outside-the-box(请阅读底部最后一个答案)

  • CSS/HTML 模态 - 使用 Escape 键/单击外部关闭 https://stackoverflow.com/questions/27758991/css-html-modal-using-the-escape-key-click-outside-to-close(请注意第一个答案所附的注释)

请注意,关闭模式在技术上仅可通过 CSS/HTML 实现......

Question

我怎样才能做一个模态关闭当用户外部点击通过使用CSS and HTML only?

My CSSand HTML在下面的代码片段中(不完全响应 - 以全屏打开)

body {
  background: #111;
  text-align: center;
}
a {
  text-decoration: none;
}
.content {
  text-align: justify;
  text-justify: trim;
  max-width: 60%;
  margin: auto
}
.mbutton {
  border: 1px solid rgba(115, 117, 117, 0.6);
  padding: 8px 60px 8px 60px;
}
.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  pointer-events: none;
}
.modal:target {
  opacity: 1;
  pointer-events: auto;
}
.modal > div {
  background: rgba(115, 117, 117, 0.6);
  width: 12em;
}
.close {
  margin: 0 auto 0.7em auto;
  max-width: 15%;
}
.wrap,
.modal {
  display: flex
}
.mbutton:hover,
.close,
.mitem {
  color: #111
}
.content,
.mbutton,
.close:hover,
.mitem:hover {
  color: #999
}
.mitem,
.close {
  display: block
}
.wrap,
.modal {
  align-items: center;
  justify-content: center
}
.mbutton:hover,
.mitem {
  background: rgba(150, 150, 150, 0.9);
}
.mitem,
.modal > div {
  padding: 20px;
  border: 1px solid rgba(0, 0, 0, 0.2)
}
.mitem:hover,
.modal {
  background: rgba(0, 0, 0, 0.8)
}
.mbutton,
.modal > div {
  margin: 5% auto;
}
<body>
  <div class="wrap">
    <a href="#M" class="mbutton">Menu</a>
    <div id="M" class="modal">
      <div>
        <a href="#" title="Close Menu" class="close">&#9747;</a>
        <a href="http://google.com" class="mitem">Home</a>
        <a href="http://yahoo.com" class="mitem">Photos</a>
        <a href="http://bing.com" class="mitem">Details</a>
        <a href="https://stackoverflow.com/" class="mitem">Contact</a>
      </div>
    </div>
  </div>
  <div class="content">
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
      voluptas sit aspernatur aut odit aut fugit,
      <br>
      <br>sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam
      aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex</p>
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
      voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi
      <br>
      <br>>qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum
      quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere</p>
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta.</p>
  </div>
</body>

再做一个a在你的目标内,宽度和高度与position:fixed;父母和拥有较少z-index比模型内容div应该是position:relative

Change

在 HTML 中:-

        <a href="#" title="Close Menu" class="bodyclose"></a>

in css:-

.bodyclose {
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  display:none;
  z-index:1;
  position:fixed;
}
.modal:target {
  opacity: 1;
  pointer-events: auto;
}
.modal:target > .bodyclose {
  display:block;
}
.modal > div {
  background: rgba(115, 117, 117, 0.6);
  width: 12em;
  z-index:2;
  position:relative;
}
body {
  background: #111;
  text-align: center;
}
a {
  text-decoration: none;
}
.content {
  text-align: justify;
  text-justify: trim;
  max-width: 60%;
  margin: auto
}
.mbutton {
  border: 1px solid rgba(115, 117, 117, 0.6);
  padding: 8px 60px 8px 60px;
}
.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  pointer-events: none;
}
.bodyclose {
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  display:none;
  z-index:1;
  position:fixed;
}
.modal:target {
  opacity: 1;
  pointer-events: auto;
}
.modal:target > .bodyclose {
  display:block;
}
.modal > div {
  background: rgba(115, 117, 117, 0.6);
  width: 12em;
  z-index:2;
  position:relative;
}
.close {
  margin: 0 auto 0.7em auto;
  max-width: 15%;
}
.wrap,
.modal {
  display: flex
}
.mbutton:hover,
.close,
.mitem {
  color: #111
}
.content,
.mbutton,
.close:hover,
.mitem:hover {
  color: #999
}
.mitem,
.close {
  display: block
}
.wrap,
.modal {
  align-items: center;
  justify-content: center
}
.mbutton:hover,
.mitem {
  background: rgba(150, 150, 150, 0.9);
}
.mitem,
.modal > div {
  padding: 20px;
  border: 1px solid rgba(0, 0, 0, 0.2)
}
.mitem:hover,
.modal {
  background: rgba(0, 0, 0, 0.8)
}
.mbutton,
.modal > div {
  margin: 5% auto;
}
<body>
  <div class="wrap">
    <a href="#M" class="mbutton">Menu</a>
    <div id="M" class="modal">
      <div>
        <a href="#" title="Close Menu" class="close">&#9747;</a>
        <a href="http://google.com" class="mitem">Home</a>
        <a href="http://yahoo.com" class="mitem">Photos</a>
        <a href="http://bing.com" class="mitem">Details</a>
        <a href="http://stackoverflow.com/" class="mitem">Contact</a>
      </div>
        <a href="#" title="Close Menu" class="bodyclose"></a>
    </div>
  </div>
  <div class="content">
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
      voluptas sit aspernatur aut odit aut fugit,
      <br>
      <br>sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam
      aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex</p>
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia
      voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi
      <br>
      <br>>qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum
      quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere</p>
    <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta.</p>
  </div>
</body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击外部时关闭模态框(仅限 CSS + HTML) 的相关文章

  • 仅 IE9_有时_会忽略

    我们正在开发一个大量使用 这是典型的 TYPO3 网站 该网站是在子目录中开发的 稍后将被重新定位到顶级目录 因此我们无法轻易删除 我们的客户告诉我们 有时当她浏览新页面时 她得到的页面内容没有应用布局 我们对此进行了调试 仅在 IE9 中
  • 为什么开发者讨厌 iframe? [复制]

    这个问题在这里已经有答案了 可能的重复 iframe 被认为是 不好的做法 吗 https stackoverflow com questions 362730 are iframes considered bad practice 在与
  • 如何为 HTML 元素创建鼠标拖动滑块?

    我发现的许多滑块插件要么仅单击以查看下一个图像 要么如果它们确实具有鼠标拖动或触摸拖动功能 则仅允许图像 有谁知道为任何 html 元素编写鼠标拖动滑块的插件或可能的方法 我专门使用 SVG 但将来如果能在 div 元素之间滑动就更好了 H
  • 如何在 select2 下拉列表中换行?

    我正在使用 select 2 下拉菜单 然后在其内容中显示一些长句子 我想在句子的正确位置添加换行符 但下拉菜单是自动调整的 For example the content of the dropdown right now looks l
  • 当共享相同的行和列时,将网格项设置为不重叠

    现在 当两个网格项共享相同的行和列时 它们会相互重叠 div class some grid container div Item 1 div div Item 2 div div 我如何让它们不重叠 当共享相同的行和列时 其行为可能类似于
  • 如何在有序列表中组合数字和字母?

    如何在 CSS 中用数字和字母递增有序列表 ol nested margin bottom 0 counter reset item ol nested li display block position relative ol neste
  • Masonry - imagesLoaded - 不是函数

    Masonry and imagesLoaded应加载并正常工作 已经制作了一个类似的网站 并且可以正常运行 我不知道我的问题出在哪里 所以我希望你能看到问题所在 应该是少了点什么 在 Chrome Inspect 中 我收到以下错误 Un
  • 获取 FileReader() 的结果对象

    有什么方法可以在不通过函数的情况下获取 FileReader 的结果对象 我在下面制作了示例代码 HTML br br br div div JS var code lorem ipsum input type file change fu
  • 悬停此元素时隐藏元素后的伪元素

    我的菜单垂直放置在页面左侧和菜单之间 li 我有一个 after那是一个分隔符 我想要的是当我悬停元素本身 如果它是第一个元素 时隐藏 after 元素 或者当它是中间元素时隐藏上面和底部的元素 如果它是最后一个子元素 则隐藏 after前
  • Twitter 卡元标签问题

    有问题的网址 https www halleonard com viewpressreleasedetail action releaseid 10261 https www halleonard com viewpressreleased
  • 有角度的动态背景图片

    在 html 模板中 我有这种带有动态图像的样式 div style background none width 200px height 150px div 它适用于网络浏览器和 Android 浏览器 但是 使用 style 的动态背景
  • CSS 类命名约定

    在网页上 有两个控件块 主要和次要 大多数人会使用什么类名 选择一 div class primary controls div
  • 使用 CSS 使一行 div 高度相同

    我有一排必须具有相同高度的 div 但我无法提前知道该高度可能是多少 内容来自外部源 我最初尝试将 div 放置在封闭的 div 中并将它们向左浮动 然后我将它们的高度设置为 100 但这没有明显的效果 通过将封闭 div 的高度设置为固定
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 图像背景不透明度不影响边框

    如何设置背景不透明度而不影响边框线不透明度 我找到的解决方案没有帮助 div class selected img src assets img image product 1 thumbnail jpg alt product 1 thu
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • CSS溢出文本显示在几行中,没有断字

    我有一些长文本显示在 div 中 该 div 具有固定的宽度和高度 我希望文本显示在几行上 作为 div 高度 并且句子单词不会中断 一行中的单词前缀和下一行中的继续 此外 我想在末尾添加省略号最后一句话 CSS white space n
  • 在 Nexus 7 2013 上更改方向时 CSS 媒体查询不起作用

    我目前正在我的笔记本电脑 台式电脑和 Nexus 7 2013 上测试 CSS 媒体查询 除了 Nexus 7 之外 它们在台式机和笔记本电脑上都运行良好 当我更改方向时 除非刷新页面 否则样式不会应用 例如 以纵向模式握住设备时 页面正常

随机推荐