gn6*_*n66 8 css geometry svg css3 css-shapes
我有一个带有javascript函数的三角形可以移动该图像.
问题是该元素具有方形形状,因此在三角形之外触发点击和悬停状态(参见下图中的红色部分):
如何防止悬停并在三角形外部单击并仅允许在三角形内部单击/悬停状态?
web*_*iki 14
要防止悬停并在CSS三角形外部单击,可以使用变换来制作三角形.
这里描述了这种技术:带有变换旋转的CSS三角形
关键是要使用一个带有隐藏溢出的包装器并旋转可点击/可移动元素,使其实际上具有三角形形状,并防止点击事件或悬停状态在三角形外部.
.tr {
width: 40%;
padding-bottom: 28.2842712474619%; /* = width / sqrt(2) */
position: relative;
overflow: hidden;
}
.tr a {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
background-color: rgba(0, 122, 199, 0.7);
transform-origin: 0 100%;
transform: rotate(45deg);
transition: background-color .3s;
}
/** hover effect **/
.tr a:hover {
background: rgba(255, 165, 0, 0.7);
}
Run Code Online (Sandbox Code Playgroud)
<div class="tr"><a href="#"></a></div>
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用带有可点击三角形的SVG:
#tr{
fill:transparent;
transition:fill .3s;
}
#tr:hover{
fill: orange;
}
/** for the demo **/
html,body{height:100%;margin:0; padding:0;}
body{background:url('https://farm8.staticflickr.com/7435/13629508935_62a5ddf8ec_c.jpg') center no-repeat;background-size:contain;}
svg{display:block;width:30%;margin:0 auto;}
Run Code Online (Sandbox Code Playgroud)
<svg viewbox="-2 -2 104 64">
<a xlink:href="#">
<polygon id="tr" points="50 0 100 60 0 60" fill="transparent" stroke="darkorange" stroke-width="2"/>
</a>
</svg>
Run Code Online (Sandbox Code Playgroud)
您应该能够只使用图像映射。只需通过将坐标设置为宽度和高度的(w/2, 0), (w, h), (0, h)
位置w
和h
位置来创建一个覆盖三角形的多边形。(假设像您的示例中那样是等边三角形。否则只需使用图像编辑器找到点。)
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Green_equilateral_triangle_point_up.svg/600px-Green_equilateral_triangle_point_up.svg.png"
width="60" height="52"
usemap="#imgmap" />
<map name="imgmap">
<area href="javascript:alert('Triggered')"
shape="poly"
coords="30,0,60,52,0,52"
style="outline:none;"
target="_self" />
</map>
Run Code Online (Sandbox Code Playgroud)
演示:http : //jsfiddle.net/QXv2c/