框阴影动画在 Safari 浏览器上存在问题

Posted

技术标签:

【中文标题】框阴影动画在 Safari 浏览器上存在问题【英文标题】:Box shadow animation is bugging on Safari browsers 【发布时间】:2022-01-07 02:28:13 【问题描述】:

我的网站上有简单的箱形阴影动画(在 Elementor、WordPress 中构建)。该动画在 Chrome 上运行得非常好,但在 Safari 上,它会创建这个奇怪的方形动画(适用于移动设备和笔记本电脑):

这是我用来创建 Box Shadow 动画的 CSS。你能告诉我我做错了什么吗?

谢谢!

.hero_button_homepage svg
     border-radius: 150px!important;
    animation: pulse-orange 2s infinite!important;
  width:60px;
  height:60px;
  border-color: red;

@keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
    

@-webkit-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
            -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    

@-moz-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    

@-o-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
            -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    
<div class="hero_button_homepage">
  <div class="elementor-widget-container">
    <div class="elementor-icon-box-wrapper">
       <div class="elementor-icon-box-icon">
          <a class="" href="">
            <svg xmlns="http://www.w3.org/2000/svg"   viewBox="0 0 86 86" fill="none"><path d="M57.5 43.866L38 55.1244C37.3333 55.5093 36.5 55.0281 36.5 54.2583L36.5 31.7417C36.5 30.9719 37.3333 30.4907 38 30.8756L57.5 42.134C58.1667 42.5189 58.1667 43.4811 57.5 43.866Z" stroke="#F9F6F1" stroke-></path><circle cx="43" cy="43" r="42" stroke="#F9AC66" stroke- stroke-linecap="round"></circle></svg>               </a>
            </div>
            <div class="elementor-icon-box-content">
                <h3 class="elementor-icon-box-title">
                    <a href=""> Watch the full video</a>
                </h3>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

【参考方案1】:

将您的 svg 包装在一个包装器中并将您的动画应用到该包装器中。 SVG 上的动画可能很棘手,因为您的路径可以剪切某些东西,以实现其外观。

此外,您的 html 缩进很差,这可能就是为什么您在 svg 下有一个结束 div 标记而没有任何相应的开始标记。您的结束 a 标记一直“隐藏”在 svg 行的末尾。

清理并包装你的 svg,你应该很高兴。

注意:我向您申请了margin: 5rem; .hero_button_homepage,以表明它有效。请记住在执行以下操作之前将其删除。

编辑: 我很确定你应该在动画前面加上 -webkit--moz- BEFORE 你的 normal 声明:例如:

.foo-bar 
    -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
    box-shadow: 0 0 0 0 rgba(249,172,102,0.7);

您可以查看应该在shouldiprefix.com 上使用哪些前缀

.hero_button_homepage  margin: 5rem; 
.hero_button_homepage .svg_wrapper 
     border-radius: 150px!important;
    animation: pulse-orange 2s infinite!important;
  width:60px;
  height:60px;
  border-color: red;

.hero_button_homepage svg 
     border-radius: 150px!important;
    animation: pulse-orange 2s infinite!important;
  width:60px;
  height:60px;
  border-color: red;


@keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
    

@-webkit-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
            -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    

@-moz-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    

@-o-keyframes pulse-orange 
    0% 
        box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
            -webkit-box-shadow: 0 0 0 0 rgba(249,172,102,0.7);
        -moz-box-shadow:  0 0 0 0 rgba(249,172,102,0.7);
    
    
    70% 
        box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -webkit-box-shadow: 0 0 0 20px rgba(249, 172, 102, 0);
        -moz-box-shadow:  0 0 0 20px rgba(249, 172, 102, 0);
    
<div class="hero_button_homepage">
  <div class="elementor-widget-container">
    <div class="elementor-icon-box-wrapper">
       <div class="elementor-icon-box-icon">
          <a class="" href="">
             <div class="svg_wrapper">
                <svg xmlns="http://www.w3.org/2000/svg"   viewBox="0 0 86 86" fill="none"><path d="M57.5 43.866L38 55.1244C37.3333 55.5093 36.5 55.0281 36.5 54.2583L36.5 31.7417C36.5 30.9719 37.3333 30.4907 38 30.8756L57.5 42.134C58.1667 42.5189 58.1667 43.4811 57.5 43.866Z" stroke="#F9F6F1" stroke-></path><circle cx="43" cy="43" r="42" stroke="#F9AC66" stroke- stroke-linecap="round"></circle></svg>               </a>
            </div>
            <div class="elementor-icon-box-content">
                <h3 class="elementor-icon-box-title">
                    <a href=""> Watch the full video</a>
                </h3>
            </div>
        </div>
    </div>
</div>

【讨论】:

以上是关于框阴影动画在 Safari 浏览器上存在问题的主要内容,如果未能解决你的问题,请参考以下文章

Chrome/Safari:box-shadow 仅在指定边框时出现在文本输入中

为Input输入框添加圆角并去除阴影 去除获得焦点时方角样式

当手指在屏幕上而不抬起时,javascript动画在ios safari webkit浏览器中停止

固定定位在 Safari 7 中不起作用

如何删除选择输入的默认镀铬样式?

iOS 7 上的 Safari Mobile 上未显示框阴影(横向)