如何将渐变应用于标记?

How to apply a gradient to a marker?

在 SVG 中,如何将应用于线条的渐变应用到其标记端?

<?xml version='1.0' encoding='UTF-8' standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="820px"
     height="500px"
     viewBox="0 0 820 500"
     version="1.1" >
  <style>
    .axis3 {
         stroke-width: 40px;
         marker-end:url(#arrow);
         stroke: url('#gradient_3');
         fill: url('#gradient_3');
         height: 30px;
    }
    .axis4 {
         stroke-width: 40px;
         marker-end:url(#arrow);
         stroke: url('#gradient_4');
         fill: url('#gradient_4'); /* corrected */
         height: 30px;
    }
  </style>
  <defs>
    <marker
       id="arrow"
       markerWidth="20"
       markerHeight="40"
       refX="0"
       refY="20"
       orient="auto"
       markerUnits="userSpaceOnUse"
       style="fill:inherit;">
      <path style="stroke:none;fill:inherit;overflow:visible;" d="M0 0 L20 20 L0 40 Z" />
    </marker>

    <linearGradient id="gradient_3" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse" >
      <stop offset="0%"  stop-color="yellow" />
      <stop offset="20%" stop-color="red" />
    </linearGradient>
    <linearGradient id="gradient_4" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse" >
      <stop offset="0%"  stop-color="blue" />
      <stop offset="20%" stop-color="green" />
    </linearGradient>
  </defs>

  <line class="axis3" x1="50" x2="400" y1="50" y2="50" />
  <line class="axis4" x1="50" x2="400" y1="100" y2="100" />
</svg>

使用上面的代码,标记总是黑色的。

由于有多个元素线具有不同的渐变,渐变不能直接应用在路径上。 我尝试添加 style="fill:inherit" - 但没有成功。

我会这样做:

我为 svg 元素设置了两个 css 变量,而不是 fill:inherit;style="--fill:url(#gradient_3); --stroke:url(#gradient_4)"。线条和标记都在使用 fillstroke 的这些变量。

或者您可以选择直接在代码中使用渐变 <path style="overflow:visible;fill:url(#gradient_3);"...

我在您的代码中添加了一个 #gradient_3,因为您正在使用它。

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="820px"
     height="500px"
     viewBox="0 0 820 500"
     version="1.1"  
     style="--fill:url(#gradient_3); --stroke:url(#gradient_4)">
  <style>
    .axis {
         stroke-width: 40px;
         marker-end:url(#arrow);
         height: 30px;
         stroke:var(--stroke);
    }
  </style>
  <defs>
    <marker
       id="arrow"
       markerWidth="20"
       markerHeight="40"
       refX="0"
       refY="20"
       orient="auto"
       markerUnits="userSpaceOnUse">
      <path style="overflow:visible;fill:var(--fill);" d="M0 0 L20 20 L0 40 Z" />
    </marker>
    <linearGradient id="gradient_3" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse" >
      <stop offset="0%" stop-color="green" />
      <stop offset="20%"  stop-color="blue" /> 
    </linearGradient>

    <linearGradient id="gradient_4" x1="0%" y1="0%" x2="100%" y2="0%" gradientUnits="userSpaceOnUse" >
      <stop offset="0%"  stop-color="blue" />
      <stop offset="20%" stop-color="green" />
    </linearGradient>
  </defs>

  <line class="axis" x1="50" x2="400" y1="50" y2="50" />
</svg>

对“Make marker-end same color as path?”的回答提到没有从相关路径继承颜色。 自此回答以来,情况没有发生变化。