【问题标题】:How do I make svg path hover area bigger如何使 svg 路径悬停区域更大
【发布时间】:2020-08-07 09:05:57
【问题描述】:

我有什么:

#poly-1:hover {
    stroke: green;
}
<svg width="1000" height="500" id="chart-main-canvas" style="background-color: bisque; z-index:5000;"> 
    <path id="poly-1" d="M 5,10 C 24,88 60.99999999999998,322 100,400 C 139,478 149,470 200,400 C 251,330 295,30.000000000000007 355,50 C 415,70 470.99999999999994,410 500,500" fill="none" stroke="red" style="z-index:6000;"></path>
</svg>

如果我将鼠标准确地悬停在 path 上,这是一项棘手的任务,它会将颜色变为绿色。

我想要做的是让这条路径的悬停区域更大,所以我可以将光标移动到靠近path 区域的某个位置+-5px,它仍然会改变颜色。

我知道我能做的只有两种方法:

  1. 使stroke-width 变大,但我不希望它的实际大小与红色增加。
  2. 使用我的主路径创建具有更大 stroke-width 的不可见复制路径,并添加条件,如果我将鼠标悬停在其上 - 我的主路径将改变颜色。

但是有什么简单的方法可以做到吗?

【问题讨论】:

  • 我会选择选项 2。为什么你认为这很困难?
  • @RobertLongson 我是这个绘图的新手,只是想问一下我是否让事情变得复杂
  • 试试这个:&lt;svg width="1000" height="500" id="chart-main-canvas" style="background-color: bisque; z-index:5000;"&gt; &lt;defs&gt;&lt;path id="poly-1" d="M 5,10 C 24,88 61,322 100,400 C 139,478 149,470 200,400 C 251,330 295,30 355,50 C 415,70 471,410 500,500" fill="none" &gt;&lt;/path&gt;&lt;/defs&gt; &lt;g id="group"&gt; &lt;use xlink:href="#poly-1" stroke-width="10" pointer-events="stroke"/&gt; &lt;use class="use" xlink:href="#poly-1" /&gt; &lt;/g&gt; &lt;/svg&gt; 使用这个 CSS:#group .use{stroke:red} #group:hover .use{ stroke: green; }
  • @enxaneta 我认为这种方式是最简单的,你只是接受了我的假设。如果你写在下面,我会把它作为答案

标签: css svg


【解决方案1】:

这个答案实际上是你的第二个选择。

我将路径 #poly-1 放在 defs 中,并首先使用它,笔画宽度较宽,没有笔画。为了让它对我使用的鼠标敏感pointer-events="stroke"

<use xlink:href="#poly-1" stroke-width="10" pointer-events="stroke"/>

接下来是另一种用途 - 可见的 - 用红色笔划。

我将两个 use 元素放在一个组中。当我将鼠标悬停在组上时,第二个使用元素的笔画会发生变化。

#group .use{
stroke:red
} 
#group:hover .use{
stroke: green; 
}
<svg width="1000" height="500" id="chart-main-canvas" style="background-color: bisque; z-index:5000;">
<defs>
<path id="poly-1" d="M 5,10 C 24,88 61,322 100,400 C 139,478 149,470 200,400 C 251,330 295,30 355,50 C 415,70 471,410 500,500" fill="none" ></path>
</defs>
<g id="group">
<use xlink:href="#poly-1" stroke-width="10" pointer-events="stroke"/>
<use class="use" xlink:href="#poly-1" />
</g>
</svg>

【讨论】:

  • 谢谢!宽字符串和pointer-events="stroke" 的好主意
【解决方案2】:

我为颜色更改添加了笔触宽度以突出显示。 请试试这个..

#poly-1:hover {
    stroke: green !important;
    stroke-width:2px;
}
<svg width="1000" height="500" id="chart-main-canvas" style="background-color: bisque; z-index:5000;"> 
    <path id="poly-1" d="M 5,10 C 24,88 60.99999999999998,322 100,400 C 139,478 149,470 200,400 C 251,330 295,30.000000000000007 355,50 C 415,70 470.99999999999994,410 500,500" fill="none" stroke="red" style="z-index:6000;"></path>
</svg>

【讨论】:

  • 这不是我想做的。我希望这段代码中现在为绿色的区域是一个悬停区域,所以我可以通过鼠标重叠轻松获得它,path 应该只是将颜色更改为绿色,而不更改其大小
  • 我现在看到了你的编辑,但我仍然需要将鼠标悬停在这个小 2px 区域
  • 移除描边宽度:2px;
  • 我现在无法在您的代码中删除它。如果我删除它,从我的出发点没有任何变化。
  • !important 用于中风:绿色 !important;悬停路径时会将颜色变为绿色
猜你喜欢
  • 2015-05-24
  • 2021-05-10
  • 2013-03-07
  • 2016-01-31
  • 2015-06-23
  • 2019-10-20
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
相关资源
最近更新 更多