这是另一种方法,在我看来远远优于使用地图或过多的 JS。将<div>
元素放在带有背景图像的元素顶部,让 HTML 和 CSS 为您完成繁重的工作。
在 JSFiddle 上查看
HTML
HTML 应该看起来很漂亮,可以理解,我们<div>
用类创建 shotspot
并依赖于某些存在的东西。即.text
(显示数字)、.hover-popup
(悬停时显示)和.click-popup
(在内部.hover-popup
并在单击时显示)。
<div id="hotspot1" class="hotspot">
<div class="text">1</div>
<div class="hover-popup">
I was hovered!
<div class="click-popup">
I was clicked on!
</div>
</div>
</div>
<div id="hotspot2" class="hotspot">
<div class="text">2</div>
<div class="hover-popup">
I was hovered!
<div class="click-popup">
I was clicked on!
</div>
</div>
</div>
CSS
这是大多数魔法发生的地方,请参阅评论以获得进一步的解释。
/* These two position each hotspot */
#hotspot1 {
left:15%; /* we could use px or position right or bottom also */
top:20%;
}
#hotspot2 {
left:35%;
top:25%;
}
/* General styles on the hotspot */
.hotspot {
border-radius:50%;
width:40px;
height:40px;
line-height:40px;
text-align:center;
background-color:#CCC;
position:absolute;
}
.hotspot .text {
width:40px;
height:40px;
}
/* Show the pointer on hover to signify a click event */
.hotspot .text:hover {
cursor:pointer;
}
/* hide them by default and bring them to the front */
.hover-popup,
.click-popup {
display:none;
z-index:1;
}
/* show when clicked */
.hotspot.clicked .click-popup {
display:block;
}
/* show and position when clicked */
.hotspot:hover .hover-popup {
display:block;
position:absolute;
left:100%;
top:0;
width:300px;
background-color:#BBB;
border:1px solid #000;
}
JavaScript(使用 jQuery)
不幸的是,您将不得不为点击部分使用一些 JavaScript,因为 CSS 没有“点击”状态(在带有复选框的黑客之外)。我正在使用 jQuery,因为它很容易做我想做的事。
$(document).ready(function () {
$('.hotspot').click(function () {
$(this).toggleClass('clicked');
});
});
创建箭头
在css-tricks:before
上,您可以找到使用和/或:after
伪元素将箭头附加到元素的教程。您甚至可以通过将:after
元素放在:before
. 但是,是的,有很多关于如何做到这一点的资源。