html - Safari:即使有隐藏元素,阴影过滤器仍然可见

标签 html css safari

我将投影过滤器应用于根据用户交互显示和隐藏的 div(下拉列表),但是,在 Safari 中,即使元素被隐藏,投影仍然可见。

该错误仅发生在 Safari 中。

document.querySelector('.bt').addEventListener('click', function () {
    let b = document.querySelector('.b');

    if (b.style.display === "none") {
        b.style.display = "block";
    } else {
        b.style.display = "none";
    }
})
.bt {
    padding: 10px;
    margin-bottom: 40px;
}

.a {
    height: 100px;
    padding: 20px;
    background: #ccc;
}

.b {
    position: relative;
    width: 50px;
    height: 50px;
    background: #0f0;
    filter: drop-shadow(0 0 0.125rem #000);
}

.b::after {
    content: '';
    position: absolute;
    display: inline-block;
    width: 0;
    height: 0;
    border-right: .5rem solid transparent;
    border-left: .5rem solid transparent;
    border-bottom: .5rem solid #0f0;
    top: -.5rem;
    left: .5rem;
}
<h1>drop-shadow filter bug with Safari</h1>

<button class="bt">CLICK ME!</button>

<div class="a">
    <div class="b">
        .b
    </div>
</div>

最佳答案

我想我找到了一个可行的解决方法。

尝试将 will-change: filter; 添加到您的 .b { ... } 样式中。问题似乎已通过这种方式解决。

这是修复后的代码片段:

document.querySelector('.bt').addEventListener('click', function () {
    let b = document.querySelector('.b');

    if (b.style.display === "none") {
        b.style.display = "block";
    } else {
        b.style.display = "none";
    }
})
.bt {
    padding: 10px;
    margin-bottom: 40px;
}

.a {
    height: 100px;
    padding: 20px;
    background: #ccc;
}

.b {
    will-change: filter;
    position: relative;
    width: 50px;
    height: 50px;
    background: #0f0;
    filter: drop-shadow(0 0 0.125rem #000);
}

.b::after {
    content: '';
    position: absolute;
    display: inline-block;
    width: 0;
    height: 0;
    border-right: .5rem solid transparent;
    border-left: .5rem solid transparent;
    border-bottom: .5rem solid #0f0;
    top: -.5rem;
    left: .5rem;
}
<h1>drop-shadow filter bug with Safari</h1>

<button class="bt">CLICK ME!</button>

<div class="a">
    <div class="b">
        .b
    </div>
</div>

关于html - Safari:即使有隐藏元素,阴影过滤器仍然可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478925/

相关文章:

javascript - ReactJS 在 HTML 中创建额外的跨度

javascript - 动态显示滚动内的隐藏元素

html - 使用 CSS 包含自定义字体以使其与大多数浏览器兼容的最佳方法是什么?

javascript - 在两个 div jQuery 之间切换隐藏/显示

jquery - 在路径悬停时显示路径标题

java - 如何使用 selenium webdriver 在 SafariDriver/Safari 中上传文件?

javascript - 如何使用 jQuery 知道 "select"输入值已更改?

css - 水平滚动标题栏布局

open-source - Safari的“阅读器模式”-开源解决方案?

iPhone:如何让 safari 识别 vcard?