我有一个带有
javascript函数的三角形可以移动该图像.
问题是该元素具有方形形状,因此在三角形之外触发点击和悬停状态(参见下图中的红色部分):
如何防止悬停并在三角形外部单击并仅允许在三角形内部单击/悬停状态?
解决方法
要防止悬停并在CSS三角形外部单击,可以使用变换来制作三角形.
这里描述了这种技术:CSS Triangles with transform rotate
关键是要使用一个带有隐藏溢出的包装器并旋转可点击/可移动元素,使其实际上具有三角形形状,并防止点击事件或悬停状态在三角形外部.
演示:Click and hover on a CSS triangle
.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.7); }
<div class="tr"><a href="#"></a></div>
另一种方法是使用带有可点击三角形的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;}
<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>