首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将旋转SVG裁剪为HTML/CSS中的文本

将旋转SVG裁剪为HTML/CSS中的文本
EN

Stack Overflow用户
提问于 2022-12-04 02:17:40
回答 1查看 28关注 0票数 0

我有一个使用星暴模式动画旋转的SVG图像,以及它旁边的一个文本元素。每当星光较亮的部分与文字重叠时,我希望文字的那一部分改变颜色。基本上,恒星爆发应该剪辑到文本,同时旋转。

基本设置是:

代码语言:javascript
复制
<div class="header">
    <div class="starburst-image">
        <img src="starburst-dark.svg" class="starburst"></img>
        <img src="starburst-bright.svg" class="starburst starburst-bright"></img>
    </div>
    <div class="title-wrapper">
        <h1 class="title-text">Title</h1>
    </div>
</div>

在这里,两个starburst图像都有position: absolute,完全一致,并且都是使用CSS动画旋转的。整个starburst-dark应该显示在背景中而不需要剪裁,而starburst-bright应该在它旋转时剪辑到title-text

在使用clip-pathbackground-clip这样的属性之后,我似乎无法让SVG既旋转又剪辑到文本。我还尝试将文本放在svg <text>元素中,而不是<h1>中,并将其封装到<clipPath>中,但似乎文本剪辑相对于starburst SVG的坐标而不是标题文本本身的坐标进行了定位。

一定有办法在HTML/CSS中做到这一点,对吗?

EN

回答 1

Stack Overflow用户

发布于 2022-12-04 02:29:59

是的,您可以使用CSS中的clip-path属性将一个元素剪辑成另一个元素的形状,包括文本。您也可以使用mask属性,它类似于clip-path,但它允许您使用更复杂的形状和图像集作为裁剪路径。

下面是一个示例,说明如何使用clip-path属性实现您想要的效果:

代码语言:javascript
复制
<div class="header">
    <div class="starburst-image">
        <img src="starburst-dark.svg" class="starburst"></img>
        <img src="starburst-bright.svg" class="starburst starburst-bright"></img>
    </div>
    <div class="title-wrapper">
        <h1 class="title-text">Title</h1>
    </div>
</div>

<style>
    .starburst-bright {
        clip-path: inset(0 0 0 0 round 9px);
        -webkit-clip-path: inset(0 0 0 0 round 9px);
    }

    .title-text {
        clip-path: inset(0 0 0 0 round 9px);
        -webkit-clip-path: inset(0 0 0 0 round 9px);
    }
</style>

在本例中,clip-path属性同时用于starburst-brighttitle-text元素。inset()函数用于创建一个带有9px圆角的圆形矩形形状,然后用于夹紧这两个元素。这将导致将starburst-bright图像剪裁成title-text元素的形状,从而产生所需的效果。

您还可以使用mask属性而不是clip-path属性,后者允许更复杂的裁剪路径。例如:

代码语言:javascript
复制
<div class="header">
    <div class="starburst-image">
        <img src="starburst-dark.svg" class="starburst"></img>
        <img src="starburst-bright.svg" class="starburst starburst-bright"></img>
    </div>
    <div class="title-wrapper">
        <h1 class="title-text">Title</h1>
    </div>
</div>

<style>
    .starburst-bright {
        mask: url(title-mask.svg#mask);
        -webkit-mask: url(title-mask.svg#mask);
    }

    .title-text {
        mask: url(title-mask.svg#mask);
        -webkit-mask: url(title-mask.svg#mask);
    }
</style>

在本例中,mask属性同时用于starburst-brighttitle-text元素,并使用单独的SVG映像作为掩码。这允许您使用SVG路径或其他形状创建更复杂的掩码形状,而不是使用inset()函数创建的简单矩形形状。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74672392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档