svg的渐变元素用法

svg中的渐变元素有两种,分别是线性渐变<linearGradient>和径向渐变<radialGradient>。这两种渐变作为背景被填充时都需要用url的形式导入到具体元素中。

1、线性渐变<linearGradient>

主要属性有x1、y1、x2、y2,分别表示水平渐变起点、垂直渐变起点、水平渐变终点、垂直渐变终点,都是以左上角作为原点进行偏移,其值一般用百分比表示。渐变只发生在起点和终点范围内,在范围外则按原色处理。这几个属性实际上只是渐变起点和终点的第一级,内部元素<stop>中的offset属性会影响渐变起点和终点的第二级。这几个属性还能调整渐变的角度,具体表现为:

  • 当x1、x2为任意值,y1=y2=0时,表现为水平渐变。
  • 当y1、y2为任意值,x1=x2=0时,表现为垂直渐变。
  • 对于其他情况,则表现为斜向渐变,且渐变向量(x,y) = 终止偏移量(x,y) - 起始偏移量(x,y),与以左上角为原点的坐标系夹角为arctan(y/x),正值斜向下。

这里渐变内部的<stop>元素,该元素是渐变必须的,且至少要两个才能画出渐变。其中两个重要属性offset和stop-color,分别表示渐变第二级的偏移点和停止颜色。渐变第二级的偏移点是建立在第一级的范围内的,相邻两个颜色的offet依次分别表示起始偏移点和终止偏移点。第一个偏移点的前侧和最后一个偏移点的后侧因为没有其他元素则不发生偏移。

以下是svg的水平线性渐变的一个案例:

    <svg width="320" height="320" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <!--关键定义-->
        <linearGradient id="grad" x1="10%" x2="85%" y1="0" y2="0">
          <stop offset="20%" stop-color="#35fe98"></stop>
          <stop offset="70%" stop-color="#ea73f4"></stop>
        </linearGradient>
      </defs>

      <rect x="40" y="40" width="200" height="200" fill="url(#grad)"></rect>

      <path d="M 40,36 l 0,-10 M 42,31 l 80,0 M 240,36 l 0,-10 M 238,31 l -80,0"
        stroke="#464646" 
      />
      <text x="128" y="36" font-size="15px">200</text>

      <path d="M 60,236 l 0,-10 M 62,231 l 20,0 M 210,236 l 0,-10 M 208,231 l -20,0"
        stroke="#464646"
      />
      <text x="90" y="234" font-size="15px">200*75%=150</text>

      <path id="arrow" 
          d="M 60,245 l -8,8 m 8,-8 l 8,8 m -8,-8 l 0,20" 
          fill="none"  
          stroke="#333333"
          stroke-width="2"
        />
      <text x="10" y="280" font-size="13px">x1(200*10%)</text>

      <use href="#arrow" transform="translate(150,0)"></use>
      <text x="190" y="280" font-size="13px">x2(200*85%)</text>

      <path id="arr"
        d="M 90,245 l -8,8 m 8,-8 l 8,8 m -8,-8 l 0,50"
        fill="none"  
        stroke="#484848"
      />
      <text x="20" y="310" font-size="13px">offset1(150*20%)</text>

      <use href="#arr" transform="translate(75,0)"></use>
      <text x="140" y="310" font-size="13px">offset2(150*70%)</text>
    </svg>

 

以下是斜向渐变的一个案例:

    <svg width="320" height="320" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <!--关键定义-->
        <linearGradient id="grad" x1="10%" x2="85%" y1="50%" y2="20%">
          <stop offset="20%" stop-color="#35fe98"></stop>
          <stop offset="70%" stop-color="#ea73f4"></stop>
        </linearGradient>
      </defs>

      <rect x="40" y="40" width="200" height="200" fill="url(#grad)"></rect>

      <path d="M 40,36 l 0,-10 M 42,31 l 80,0 M 240,36 l 0,-10 M 238,31 l -80,0"
        stroke="#464646" 
      />
      <text x="128" y="36" font-size="15px">200</text>

      <path d="M 36,40 l -10,0 M 31,42 l 0,80 M 36,240 l -10,0 M 31,238 l 0,-80"
        stroke="#464646" 
      />
      <text x="36" y="128" font-size="15px" transform="rotate(90,36,128) translate(0,12)">200</text>

      <path d="M 40,40 l 20,100 -6,-10 m 6,10 l 2,-12" fill="none" stroke="#333333"></path>
      <text x="55" y="90">起始</text>
      <path d="M 40,40 l 170,40 -12,2 m 12,-2 l -9,-8" fill="none" stroke="#333333"></path>
      <text x="110" y="80">终止</text>
      <path d="M 60,140 L 210,80 m -50,20 l -12,-1 m 12,2 l -6,8" fill="none" stroke="#333333"></path>
      <text x="120" y="130">合成(150, -60) = </text>
      <text x="80" y="150" font-size="13">终止(200*85% , 200*20%) - </text>
      <text x="80" y="175" font-size="13">起始(200*10% , 200*50%)</text>
      <text x="42" y="200" font-size="12">角度为arctan(-60/150)=-21.8°斜向上</text>
    </svg>

2、径向渐变<radialGradient>

径向渐变与线性渐变用法类似。主要是两组属性:

  • cx、cy、r:表示渐变终止圆,值用百分比表示,相对于绘图元素的边界矩形。
  • fx、fy、fr:表示渐变起始圆,值用百分比表示,相对于绘图元素的边界矩形。

以下是径向渐变的一个案例:

    <svg width="320" height="320" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <!--关键定义-->
        <radialGradient id="grad" cx="35%" cy="40%" r="30%" fx="20%" fy="35%" fr="5%">
          <stop offset="0%" stop-color="#ffffff"></stop>
          <stop offset="100%" stop-color="#333333"></stop>
        </radialGradient>
      </defs>

      <circle cx="160" cy="160" r="100" fill="url(#grad)"></circle>
      
      <circle cx="130" cy="140" r="60" fill="none" stroke="red"></circle>
      <text x="140" y="220" font-size="13" fill="red">终止圆</text>
      <text x="120" y="240" font-size="13" fill="red">(130,140),r=60</text>
      <circle cx="100" cy="130" r="10" fill="none" stroke="blue"></circle>
      <text x="110" y="160" font-size="13" fill="blue">起始圆</text>
      <text x="90" y="180" font-size="13" fill="blue">(110,160),r=10</text>
    </svg>

 

最后,讲一个渐变元素上的gradientTransform属性,该属性可以对渐变进行变换,用法和css的transform类似。案例如下:

    <svg width="320" height="320" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <!--关键定义-->
        <radialGradient id="grad" cx="35%" cy="40%" r="30%"
        gradientTransform="translate(0,-0.1) scale(1.5,1) skewX(-10) skewY(-10)">
          <stop offset="0%" stop-color="#ffffff"></stop>
          <stop offset="100%" stop-color="#333333"></stop>
        </radialGradient>
      </defs>

      <circle cx="160" cy="160" r="100" fill="url(#grad)"></circle>
    </svg>

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SVG文本动画可以通过CSS动画或JavaScript实现。以下是两种实现方式: 1. CSS动画:使用CSS的@keyframes规则定义动画,并将其应用于SVG文本元素。例如,可以使用以下代码创建一个向上移动的文本动画: ``` <svg> <text x="50%" y="50%" text-anchor="middle">Hello World!</text> </svg> <style> text { animation: move-up 2s ease-in-out infinite; } @keyframes move-up { 0% { transform: translateY(0); } 50% { transform: translateY(-20px); } 100% { transform: translateY(0); } } </style> ``` 2. JavaScript:使用SVG的API(如getBBox()和setAttribute())来操作SVG文本元素的属性,从而创建动画效果。例如,可以使用以下代码创建一个文本放大缩小的动画: ``` <svg> <text x="50%" y="50%" text-anchor="middle" font-size="24">Hello World!</text> </svg> <script> var textElem = document.querySelector('text'); var originalFontSize = textElem.getAttribute('font-size'); var scaleFactor = 1.2; function animate() { textElem.setAttribute('font-size', originalFontSize); textElem.animate([ { transform: 'scale(1)' }, { transform: 'scale(' + scaleFactor + ')' }, { transform: 'scale(1)' } ], { duration: 1000, easing: 'ease-in-out', iterations: Infinity }); } animate(); </script> ``` 这些例子仅仅是SVG文本动画的简单介绍,你可以根据自己的需求和创意,使用更多的SVG API和CSS属性来创建更加复杂和炫酷的动画效果。 ### 回答2: SVG(可缩放矢量图形)是一种用于在网页上创建图形的XML标记语言。在SVG中,我们可以使用文本元素创建文字,并通过动画效果使其呈现出各种变化。 要创建SVG文本动画,我们通常可以使用CSS或JavaScript来实现。 使用CSS,我们可以通过@keyframes规则来定义动画的关键帧。我们可以为文本元素添加CSS类,并为该类添加动画属性,例如动画名称、持续时间和重复次数。然后,我们可以定义具体的关键帧,例如起始状态、中间状态和结束状态,以实现文本的动态效果。通过在关键帧之间设置适当的过渡,我们可以创建平滑的动画效果。最后,通过将CSS动画应用于文本元素,我们可以触发动画的播放。 另一种方法是使用JavaScript来实现SVG文本动画。我们可以使用SVG DOM API来获取文本元素,然后使用JavaScript来对元素属性进行动态修改。通过改变文本的位置、旋转角度、透明度等属性,我们可以实现各种动画效果。我们还可以使用JavaScript库如GSAP来简化动画的操作和控制。 无论我们选择CSS还是JavaScript,都可以使用SVG的特性和功能来创建各种文本动画效果。我们可以实现闪烁的字体、文字路径动画、字体逐渐出现和消失等效果。通过探索不同的动画属性和效果,我们可以创造出独特且吸引人的SVG文本动画效果。 ### 回答3: SVG文本动画是一种使用可缩放矢量图形(SVG)来创建动画效果的技术。SVG文本动画可以通过在SVG文本元素中应用不同的属性和效果来实现。 首先,我们可以使用CSS来为SVG文本元素应用一些基本的动画效果。可以使用@keyframes规则来定义动画的关键帧,并使用animation属性将其应用于SVG文本元素。通过指定关键帧的属性值和持续时间,可以创建各种效果,比如逐字显示、渐变、旋转等。 其次,我们可以使用SVG的<animate>元素来创建更复杂的文本动画效果。通过在SVG文本元素中插入<animate>元素并设置关键属性,我们可以实现文本的平移、缩放、旋转等动态效果。可以通过设置不同的动画属性值、持续时间和重复次数来控制动画的效果。 此外,我们还可以使用JavaScript来控制SVG文本的动画。通过使用SVG的DOM API,我们可以动态地改变SVG文本元素的属性值来实现动画效果。可以通过在JavaScript中编写动画函数,并将其与SVG文本元素关联起来,实现更复杂的动画交互效果。 总之,SVG文本动画是一种强大的技术,可以为网页和应用程序添加各种吸引人的动画效果。通过合理地运用CSS、SVG和JavaScript,我们可以创造出丰富多样的SVG文本动画,提升用户体验并增加视觉吸引力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值