我想知道有没有办法创建一个真三角形的三角形?还是一种伪造它尽可能接近的方法?
每当你用svg之类的东西绘制一个三角形时,你总是会被一个镜像的透明三角形所困,因为元素被绘制成方框。
我做了一个例子,因为我发现很难解释这个:
http://codepen.io/stephan-v/pen/gaxdjm
svg {
width: 100px;
height: 100px;
position: absolute;
right: 0;
top: 0;
}
svg polygon {
fill: rgba(168, 210, 71, 0.6);
cursor: pointer;
}
svg polygon:hover {
fill: rgba(168, 210, 71, 0.9);
cursor: pointer;
}
article {
position: relative;
width: 200px;
height: 200px;
background-color: whitesmoke;
border: 1px solid lightgrey;
}
article a {
display: block;
width: 100%;
height: 100%;
}

<article>
<a href="#">
</a>
<svg>
<polygon points="0,0 100,0 100,100" />
</svg>
</article>
&#13;
我将整篇文章作为链接,svg三角形也是一个链接。但是因为三角形被渲染成一个块,所以有一小部分正是三角形的镜像不可点击。
对于项目,我想删除无法点击的部分。这是红色部分:
答案 0 :(得分:4)
这可以通过创建元素并旋转它以创建三角形效果来使用纯CSS来完成。
我已经简化了代码,因此您可以清楚地了解正在发生的事情。
div {
width: 200px;
height: 200px;
background: lightgrey;
position: relative;
overflow: hidden;
}
div > a {
width: 50%;
height: 50%;
position: absolute;
left: 65%;
top: 0;
transform-origin: left top;
transform: rotate(-45deg);
background: blue;
}
&#13;
<div>
<a href="#link"></a>
</div>
&#13;
另一种方法是使用clip-path。它在当下得不到很好的支持,但似乎是CSS使用的下一个即将到来的功能。
div {
width: 200px;
height: 200px;
background: lightgrey;
position: relative;
overflow: hidden;
}
div > a {
width: 50%;
height: 50%;
position: absolute;
left: 65%;
top: 0;
-webkit-clip-path: polygon(100% 0, 0 0, 100% 100%);
clip-path: polygon(100% 0, 0 0, 100% 100%);
background: blue;
}
&#13;
<div>
<a href="#link"></a>
</div>
&#13;
答案 1 :(得分:2)
快速修复您的示例是在svg元素上使用pointer-event:none;
。有关pointer-events on MDN的更多信息。有关浏览器支持,请参阅canIuse。
svg {
width: 100px;
height: 100px;
position: absolute;
right: 0;
top: 0;
pointer-events: none;
}
svg polygon {
fill: rgba(168, 210, 71, 0.6);
cursor: pointer;
}
svg polygon:hover {
fill: rgba(168, 210, 71, 0.9);
cursor: pointer;
}
article {
position: relative;
width: 200px;
height: 200px;
background-color: whitesmoke;
border: 1px solid lightgrey;
}
article a {
display: block;
width: 100%;
height: 100%;
}
&#13;
<article>
<a href="#"></a>
<svg>
<polygon points="0,0 100,0 100,100" />
</svg>
</article>
&#13;
另一种方法是将第二个链接放在容器中并使用旋转,overflow:hidden;
您可以获得所需的结果。示例:
div{
position:relative;
width:200px; height:200px;
overflow:hidden;
}
a {display:block}
#l1{
width:100%; height:100%;
background:grey;
}
span{
position:absolute;
left:50%;top:0;
width:50%; height:72%;
transform-origin:0 0;
transform:rotate(-45deg);
overflow:hidden;
}
#l2{
width: 100%; height:70%;
transform-origin:inherit;
transform:rotate(45deg);
background:gold;
}
&#13;
<div>
<a id="l1" href="#link1"></a>
<span>
<a id="l2" href="#link2"></a>
</span>
</div>
&#13;
答案 2 :(得分:0)
这是使用边框操作的纯CSS三角形的代码段:
#triangle{
width: 0;
height: 0;
border-bottom: 25px solid transparent;
border-right: 25px solid black;
}
这样你就不必用SVG添加它。
答案 3 :(得分:0)
#triangle {
width: 0px;
height: 0px;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
border-top: 30px solid #f00;
}
<div id='triangle'></div>
希望这会对你有所帮助。