是的,您可以使用HTML和CSS来实现,就像这样:http://jsfiddle.net/broofa/364Eq/
本质上,它使用了三个div来聚合鼠标事件,如下所示:
<div id="outer">
<div class="inner"></div>
<div class="inner"></div>
</div>
我在外层元素上使用:hover规则来影响内部div的边框颜色:
#outer .inner {border-color: red}
#outer:hover .inner {border-color: blue}
这个标记语言的唯一问题是,内容区域 - 你在图片中绘制的区域 - 是两个div而不是一个。因此,文本不会按照你的预期自动换行和流动。而且,在旧的浏览器(IE6-7)上可能效果不佳。但是FF,Chrome,Safari和Opera应该都没问题。/* relevant styles for shape */
.tab {
border-top-left-radius: 0px;
margin-left: 100px;
}
.tab:before {
content:"";
display: block;
position: relative;
height: 50px;
width: 50px;
right: 52px; /* width + border width */
top: -2px;
background-color: white;
border: inherit;
border-right-width: 0px;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
}
/* styles to look like example */
div{
box-sizing: border-box;
background-color: white;
border: 2px solid red;
height: 100px;
width: 200px;
border-radius: 5px;
}
div:hover {
border-color: green;
}
<div class="tab"></div>
<div id="main">
<div id="div1" class="border">
</div>
<div id="div2" class="border">
</div>
</div>
如果不使用背景图像,肯定需要两个或三个 div。
这里是一个三个 div 的解决方案。
http://jsfiddle.net/pxfunc/SUuF6/
它是跨浏览器兼容的。悬停在IE6中不起作用,但在IE7+中可以。圆角将根据浏览器支持显示。
HTML:
<div id="fancyShape">
<div id="main"><div></div>
<div id="panHandle"></div>
</div>
CSS:
#fancyShape {position:relative;width:504px;height:304px;}
#main {
margin-left:100px;
width:400px;
height:300px;
border:solid 2px #000;
border-radius:0 15px 15px 15px;
}
#panHandle {
width:100px;
height:120px;
position:absolute;
top:0;left:0;
border-top:solid 2px #000;
border-left:solid 2px #000;
border-bottom:solid 2px #000;
border-radius:15px 0 0 15px;
}
/* hover effect */
#fancyShape div {background-color:#fff;}
#fancyShape:hover div {background-color:#ff0;border-color:red;}
你可以使用地图或者使用两个div并改变边框,使其看起来像一个形状。
我能想到的两个选项:
1)给div添加背景图像,并使用CSS伪类:hover将背景图像更改为指示悬停状态的图像
2)在包装器中放置三个div,并将它们定位,以便您在左上角有一个div,然后两个div堆叠在一起,以便您可以模拟较大div的顶部缺少左上角半边框。 我认为CSS无法单独定位所有div以更改其边框,因此可能需要使用JS来执行悬停行为,通过将事件处理程序应用于所有三个div。
不,Divs(指HTML中的div标签)始终是矩形的。您可以通过多种方式来模拟它(使用背景图像是一种选择)。
至于使用两个DIV,当然可以。可以使用CSS3和父级div的子选择器来实现悬停效果,或者可以使用JavaScript在悬停在任何一个div上时更改两个div的类。
<!DOCTYPE HTML>
<html>
<head>
<style>
html{height: 100%; width: 100%;}
body{height: 100%; width: 100%;}
#wrapper{
position: relative;
top: 50px;
right: 25%;
width: 565px;
height: 440px;
margin: 0 auto;
padding: 0px;
}
#left{
position: absolute;
width: 100px;
height: 50px;
border: 2px solid black;
border-right: none;
-moz-border-radius-bottomleft: 10px;
border-bottom-left-radius: 10px;
-moz-border-radius-topleft: 10px;
border-top-left-radius: 10px;
background-color: #ffffff;
}
#right{
position: absolute;
left: 100px;
width: 440px;
height: 440px;
border: 2px solid black;
-moz-border-radius: 10px;
-moz-border-radius-topleft: 0px;
border-top-left-radius: 0px;
border-radius: 10px;
padding-left: 25px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"> </script>
<script type="text/javascript">
$(document).ready(function(){
$('#wrapper').hover(
function () {
$(this).children('#left').css({'border':'2px solid red', 'border-right':'none'});
$(this).children('#right').css({'border':'2px solid red'});
},
function () {
$(this).children('#left').css({'border':'2px solid black', 'border-right':'none'});
$(this).children('#right').css({'border':'2px solid black'});
});
});
</script>
</head>
<body>
<div id="wrapper">
<div id="right">Some content here</div>
<div id = "left"></div>
</div>
</body>
</html>
你可以使用CSSPIE为IE实现圆角