html - 在容器上设置模糊效果,但不是其中的特定元素

标签 html css blur

我如何申请 filter: blur(20px)到类 todo 的 div ,但不是类 modal 的 div ?
是否有可能,也许在 SCSS 的帮助下?
代码:

.todo {
  display: grid;
}

.modal {
  display: grid;
  position: fixed;
  width: 500px;
  height: 200px;
  top: 40%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #fafafa;
  box-shadow: 0 6px 30px rgba(0, 0, 0, 0.3);
  visibility: visible;
  opacity: 1;
}
<div class='todo'>
  <div class='todo__sidebar'>
    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>

    <div class='modal'>
      <span>12345</span>
    </div>
  </div>
</div>

Codepen

最佳答案

您可以将模态包装在容器中并使用 backdrop-filter :

.todo {
  position: relative;
  display: grid;
}

.modal-container {
  display: flex;
  justify-content: center;
  align-items: center;
  position: fixed;
  top: 0;
  left: 0;
  backdrop-filter: blur(5px);
  height: 100vh;
  width: 100%;
}

.modal {
  display: grid;
  width: 500px;
  height: 200px;
  background: #fafafa;
  box-shadow: 0 6px 30px rgba(0, 0, 0, 0.3);
  visibility: visible;
  opacity: 1;
}
<div class='todo'>
  <div class='todo__sidebar'>
    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>

    <div class="modal-container">
      <div class='modal'>
        <span>12345</span>
      </div>
    </div>
  </div>
</div>

虽然,支持是not great .

另一种选择是使用 JS:

document.querySelector('ul').style.filter = 'blur(5px)';
.todo {
  display: grid;
}

.modal {
  display: grid;
  position: fixed;
  width: 500px;
  height: 200px;
  top: 40%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #fafafa;
  box-shadow: 0 6px 30px rgba(0, 0, 0, 0.3);
  visibility: visible;
  opacity: 1;
}
<div class='todo'>
  <div class='todo__sidebar'>
    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>
    <div class='modal'>
      <span>12345</span>
    </div>
  </div>
</div>


或者,您可以在 HTML 中交换它们并使用兄弟选择器( ~ ):

.todo {
  display: grid;
}

.modal {
  display: grid;
  position: fixed;
  width: 500px;
  height: 200px;
  top: 40%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: #fafafa;
  box-shadow: 0 6px 30px rgba(0, 0, 0, 0.3);
  visibility: visible;
  opacity: 1;
  z-index: 1;
}

.modal ~ ul {
  filter: blur(5px);
}
<div class='todo'>
  <div class='todo__sidebar'>
    <div class='modal'>
      <span>12345</span>
    </div>

    <ul>
      <li>item 1</li>
      <li>item 2</li>
    </ul>
  </div>
</div>


这些都不是理想的,但如果您需要它们只是一些选择。

关于html - 在容器上设置模糊效果,但不是其中的特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64661346/

相关文章:

html - 最小化浏览器时列表导航菜单移动 [CSS, HTML]

html - 如何水平扩展一个 div 直到它碰到另一个 div?

jquery 在显示和隐藏 div 后转到 div 或页面的顶部

css - 如何使内部 div 与父级(列)一样宽并且响应迅速?

javascript: <a href ...> 中的目标 div

javascript - jquery css高度选择器?

html - CSS:在放大字体大小时保持div大小相同

iOS 模糊背景像 iTunes Remote App

jquery - 不丢失 jquery 上的焦点事件

c++ - 着色器中的图像模糊效果