将单击限制为特定形状

gn6*_*n66 10 css css3 css-shapes

我在css中定义了这个图像/多边形,如下所示:

.post-wrapper {
    position: relative;
    width: 250px;
    height: 420px;
    float: left;
    background-color: #ddc;
    -webkit-clip-path: polygon(50% 100%, 100% 50%, 50% 0, 0 50%);
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover; 
}
Run Code Online (Sandbox Code Playgroud)

你可以看到图像:

以CSS形状维护click事件

它定义了一种矩形,这是一个可点击的图像,可以重定向到另一个页面,人们可以点击矩形的任何部分,但我只想让它们点击多边形.任何人都知道如何在我的代码中执行此操作?

Fidde

web*_*iki 7

CSS解决方案

您可以使用css转换属性来维护菱形的边界,并仅使图像中的部分可单击.关键是要使用skew属性,以便链接实际上具有菱形形状,因此在该形状之外不可点击(参见下面的演示和屏幕截图).然后,您需要"反转换"内容,使其不会偏斜.

DEMO

截图:

具有适当边界的钻石形状

相关CSS:

a{
    width: 216px;
    height: 250px;
    overflow:hidden;
    display:inline-block;
    background:red;

    -webkit-backface-visibility:hidden; /* to reduce pixelisation on borders in chrome */

    -webkit-transform-origin:0 0;
    -ms-transform-origin:0 0;
    transform-origin:0 0;


    -webkit-transform: translate(55%,0) rotate(30deg) skewY(30deg);
    -ms-transform: translate(55%,0) rotate(30deg) skewY(30deg);
    transform: translate(55%,0) rotate(30deg) skewY(30deg);
}

.post-wrapper {
    width: 250px;
    height: 432px;
    background: url(http://lorempixel.com/output/people-h-c-250-432-8.jpg) center center;
    background-size: cover; 

    -webkit-transform-origin:0 0;
    -ms-transform-origin:0 0;
    transform-origin:0 0;

    -webkit-transform:   skewY(-30deg) rotate(-30deg) translate(-50%,0);
    -ms-transform:   skewY(-30deg) rotate(-30deg) translate(-50%,0);
    transform:   skewY(-30deg) rotate(-30deg) translate(-50%,0);
}
Run Code Online (Sandbox Code Playgroud)


Nit*_*Nit 5

这可以通过SVG路径和Javascript轻松实现.示例实现如下:
创建一个透明的SVG形状,覆盖您想要点击的区域.然后使用Javascript将单击侦听器附加到路径.

示例Jsfiddle.

HTML:

<div id="status"></div>
<div id="sample_image">
    <svg id="cover" preserveAspectRatio="none">
        <path d="M 70,266 L 196,56 320,266 196,478 z"></path>
    </svg>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#sample_image {
    background-image: url('http://i.stack.imgur.com/m4zEw.png');
    width: 448px;
    height: 701px;
}

#cover {
    width: 100%;
    height: 100%;
}

#cover path {
    fill: transparent;
}
Run Code Online (Sandbox Code Playgroud)

JS:

$('#cover path').on('click', function() {
    //Used only for sample output
    $('#status').append("<span>Click received.</span> ");
})
Run Code Online (Sandbox Code Playgroud)