css - 可以将 CSS3 动画文本阴影样式应用于 SVG 吗?

标签 css

我找到了这个 cool neon CSS effect我希望能够将它应用到 SVG 中。不幸的是,它使用的是 text-shadow 所以我想知道是否有办法将相同类型的样式应用于我的 SVG。我尝试将 text-shadow 更改为 box-shadow,但这仅适用于 SVG 的外边框。

body {
  background-color: #222222;
  background: repeating-linear-gradient(45deg, #2b2b2b 0%, #2b2b2b 10%, #222222 0%, #222222 50%) 0 / 15px 15px;
}

h2 {
  font-family:sans-serif;
  font-size:30px;
  color: #FFDD1B;
  -webkit-animation: neon 1.5s ease-in-out infinite alternate;
  animation: neon 1.5s ease-in-out infinite alternate;
  -webkit-transition: all 0.5s;
  transition: all 0.5s;
}

img {
  width:150px;
  -webkit-animation: neonSVG 1.5s ease-in-out infinite alternate;
  animation: neonSVG 1.5s ease-in-out infinite alternate;
  -webkit-transition: all 0.5s;
  transition: all 0.5s;
}

body {
  background-color: #222222;
  background: repeating-linear-gradient(45deg, #2b2b2b 0%, #2b2b2b 10%, #222222 0%, #222222 50%) 0 / 15px 15px;
}

h2 {
  font-family:sans-serif;
  font-size:30px;
  color: #FFDD1B;
}

img {
  width:150px;
}

@keyframes neon {
  from {
    text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #FFDD1B, 0 0 70px #FFDD1B, 0 0 80px #FFDD1B, 0 0 100px #FFDD1B, 0 0 150px #FFDD1B;
  }
  to {
    text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FFDD1B, 0 0 35px #FFDD1B, 0 0 40px #FFDD1B, 0 0 50px #FFDD1B, 0 0 75px #FFDD1B;
  }
}
@-webkit-keyframes neon {
  from {
    text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #FFDD1B, 0 0 70px #FFDD1B, 0 0 80px #FFDD1B, 0 0 100px #FFDD1B, 0 0 150px #FFDD1B;
  }
  to {
    text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FFDD1B, 0 0 35px #FFDD1B, 0 0 40px #FFDD1B, 0 0 50px #FFDD1B, 0 0 75px #FFDD1B;
  }
}

@keyframes neonSVG {
  from {
    box-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #FFDD1B, 0 0 70px #FFDD1B, 0 0 80px #FFDD1B, 0 0 100px #FFDD1B, 0 0 150px #FFDD1B;
  }
  to {
    box-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FFDD1B, 0 0 35px #FFDD1B, 0 0 40px #FFDD1B, 0 0 50px #FFDD1B, 0 0 75px #FFDD1B;
  }
}
@-webkit-keyframes neonSVG {
  from {
    box-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #fff, 0 0 40px #FFDD1B, 0 0 70px #FFDD1B, 0 0 80px #FFDD1B, 0 0 100px #FFDD1B, 0 0 150px #FFDD1B;
  }
  to {
    box-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #fff, 0 0 20px #FFDD1B, 0 0 35px #FFDD1B, 0 0 40px #FFDD1B, 0 0 50px #FFDD1B, 0 0 75px #FFDD1B;
  }
}
<h2>This is some text</h2>

<img src="https://camo.githubusercontent.com/133ab8b9b686378b2f2c70b215b369ec4d24c8a9/68747470733a2f2f63646e2e737667706f726e2e636f6d2f6c6f676f732f616479656e2e737667" />

最佳答案

您需要使用 filter 使其与 SVG 一起工作。然后使用普通的 CSS 过渡或@keyframes 对其进行动画处理。

这是一个悬停动画示例。

svg {
  filter: drop-shadow(12px 12px 7px rgba(0,0,0,0.5));
  transition: all 0.25s ease-in-out;
}

svg:hover {
  filter: drop-shadow(5px 5px 3px rgba(67,237,82,0.9));
}
<?xml version="1.0" encoding="UTF-8"?>
<svg width="180px" height="49px" viewBox="0 0 180 49" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="svgText" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" font-family="Lato-Black, Lato" font-size="40" font-weight="700" letter-spacing="-0.333333343">
        <text id="SVG-Text" fill="#A5A5A7">
            <tspan x="8" y="40">SVG Text</tspan>
        </text>
    </g>
</svg>

关于css - 可以将 CSS3 动画文本阴影样式应用于 SVG 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54695080/

相关文章:

jquery - 文本区域滚动条不起作用

javascript - Vuetify2 垂直 slider 高度不可配置

php - MPDF57 CSS3 列表样式 :none not being applied (or isn't supported) for <UL> items inside <TD> element

html - 响应式设计 3 列到 1?

php - 自定义小部件包括主题和插件?

html - 使用边界半径时边界被切断?

html - Chrome : Automatic shift of web elements

html - 表格行无边框(包括最左和最右)

javascript - CSS:每隔几秒更改一次背景?

html - Chrome css 变换比例/字体大小问题