我在我的页面上将一个SVG图像文件包含在object标记内,如下所示:

<object type="image/svg+xml" data="linkto/image.svg">
   <!-- fallback image in CSS -->
</object>

所讨论的图像是一张世界 map ,我想在鼠标悬停在group上时转换fill属性,在本例中,我按大陆对SVG进行了分组,因此南美洲看起来像这样:

<g id="south_america">
    <path fill="#FAFAFA" d="(edited for brevity)"/>
</g>

通过在SVG文档顶部使用以下CSS,我可以让fill属性在悬停时更改:

<style>
#south_america path {
    transition: fill .4s ease;
}
#south_america:hover path {
    fill:white;
}
</style>

但是我不能让fill色在CSS转换中褪色, colored颜色 只是瞬间改变,有人能解释一下吗?

推荐答案

In order to transition/fade, CSS needs a starting value and an ending value.
因为您使用SVG属性fill="#FAFAFA"设置了路径的 colored颜色 ,所以CSS不会处理它,过渡也不会淡入淡出.

相反,如果您使用CSS来设置 colored颜色 ,转换将按预期进行

所以我要做的就是给#europe个开始填上一个开始的填充物就可以了.

 path { transition: fill .4s ease; }
 /* set fill for before and for during hover */
 #europe       path { fill: red; }
 #europe:hover path { fill: white; }

这是一张JSFiddle英镑的现成钞票.


或者,内联执行可能更方便(style=""):

<path style="fill: #FAFAFA;" d="..."/>

为了让CSS进行淡入淡出,它需要处理CSS/内联样式中的起始值和结束值(与使用SVGfill=属性相反).

Css相关问答推荐

如何在CSS中使用nextJs来指定基色?

实现前景渐变到背景的平滑混合

Nuxt 3+sass:不能将包含路径与@IMPORT和@USE一起使用

尽管 URL 路径正确,但背景图像未显示

在 Next.js 中使用 .modules.scss 时未应用样式

Nextjs Tailwind Marquee 组件溢出

如何在悬停另一个部分的元素时使元素可见?

我无法在 next.js 应用程序中传播 daisyui 的主题

如何测试页面上的文本被删除

如何将 Google 字体链接到我的 Nuxt 文件?

如何更改下拉列表的宽度?

重置子元素的不透明度 - Maple Browser (Samsung TV App)

单击时 HTML 输入字段未获得焦点

使用 float:left 后如何获得新行?

输入/按钮元素不会在 flex 容器中缩小

CSSzoom 高度以匹配宽度 - 可能与外形尺寸

让 div 占据 100% 身体高度,减go 固定高度的页眉和页脚

从 css 添加标题属性

仅使用 CSS 交换 DIV 位置

CSS显示:表格列应该如何工作?