gpt4 book ai didi

html - 使用单独的 div 对整个元素应用过滤器

转载 作者:行者123 更新时间:2023-11-28 04:11:40 24 4
gpt4 key购买 nike

我想制作一个覆盖类。我的 dom 元素树如下所示:

<body>
<div id="root">
</div>
<div class="overlay">
<div class="gaussian-blur"></div>
<div class="modal"></div>
</div>
</body>

#root 是我的应用程序将被渲染的地方。 .overlay 将有条件地添加到单击事件的 dom 中。我希望 .overlay > .gaussian-blur 在整个应用程序上应用 mask ,不包括 .overlay > .modal

我的 .gaussian-blur CSS 如下所示:

.overlay > .gaussian-blur {
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100vw;
height: 100vh;
z-index: 1000;
position: absolute;
filter: blur(6px);
transition: filter 200ms ease-in-out;
}

但是,这似乎并没有像覆盖层一样模糊 #root 组件。

我可以将样式直接添加到将应用模糊的根组件,但不能添加到覆盖它的 div 上。

有什么办法可以用 CSS 做到这一点吗?

最佳答案

您可以在流程中使用 sibblings 和 javascript 或输入元素。

您只需在需要时(使用 CSS 或 javascript)模糊根元素本身。

这是一个简单的 CSS/HTML 示例,使用 input + label 来切换模态元素和模糊根

input#modal ~ .overlay {
display:none;
}
.overlay {
align-items:center;
justify-content:center;
position:fixed;
background:rgba(0,0,0,0.2);
top:0;
left:0;
height:100%;
width:100%;
}
input#modal:checked ~ .overlay {
display:flex;
}
input#modal:checked ~ #root {
filter:blur(3px);
}
.modal {
background:white;
border:solid;
padding:1em;
max-width:75%;
}
#modal {
position:absolute;
left:-9999px;
}
[for="modal"] {
border:solid;
text-decoration:underline;
color:blue;
padding:0.25em;
background:lightgray;
}

#root {
background:url(http://lorempixel.com/800/800/nature/1);
background-size:cover
}
<!-- demo purpoe but usable for nowdays browsers -->
<input type="checkbox" id="modal"/>

<div id="root">
<label for="modal">Show modal </label>
<h1>HTML Ipsum Presents</h1>

<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>

<h2>Header Level 2</h2>

<ol>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ol>

<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p></blockquote>

<h3>Header Level 3</h3>

<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
</ul>

<pre><code>
#header h1 a {
display: block;
width: 300px;
height: 80px;
}
</code></pre>
</div>
<div class="overlay">
<div class="modal">
<label for="modal">Hide modal </label>
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. </p>
</div>
</div>

关于html - 使用单独的 div 对整个元素应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com