鼠标移动到div上显示子div实现要点

本例实现这样一个效果,当鼠标移动到div元素上时,显示子div,并且鼠标移到子div上子div仍然保持显示。当鼠标移出父子div时子div才又重新隐藏起来。子div显示的时候,重叠在后面其他div上,不能挤压后面其他div。网上找了很多例子没法完全达到这个效果,自己经过各种试验折腾了一天才搞出来,记录下来备忘。


本例使用CSS样式来控制,先贴代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>






<style>




.Content{	
	padding:10px 10px;10px;10px;
	position:relative;  /**父元素设置为relative,不设置overflow属性,否则隐藏的子div显示出来会不正常。*/
	z-index:1;
}
/*注:Content-Left定义多个div从左到右排列在一行,使用了float:left;*/
.Content-Left{
	margin-left: 0px;
	margin-right: 5px;
	margin-top: 0px;
	margin-bottom: 0px;
	border:none;
	float: left;
	color:#000;
	position: relative;  /**父元素设置为relative,不设置overflow属性,否则隐藏的子div显示出来会不正常。*/
	z-index: 1;
}






.hide{
	/** display设置为none表示默认隐藏,这里要使用绝对定位position:absolute,可以重叠在其他div上面,显示的时候不会挤压后面的其他div。
	并且,父div不能设置overflow属性,否则隐藏的div显示就无法超出父元素的当前显示的内容范围。 */
	display:none;   
	position:absolute; 
	left:0px; 
	top:15px; 
	padding:10px 10px 10px 0px; 
	width:100px; 
	z-index:1;
}




.Content-Left:hover .hide{  
	display:block;  /** 当父div类 LinkContent-Left鼠标移上去的时候,将隐藏的子div类hide显示出来 */
}  




</style>


<body>






<!--第一行div
鼠标移到第一行div父元素的时候,子元素显示出来会重叠在第二行div上面。
因为子元素和第二行div重叠,第一行div的z-index必须比第二行div的大,
否则鼠标移出第一行div父元素的时候,还没有移入子div时,会被认为已移出第一行div,
导致第一行div的子div又隐藏起来。
这里把第一行div的z-index设置为100,第二行为99。
z-index只会同级别的div有效,因此即使把第一行div的子div的z-index调高是无效的。
-->
<div  class="Content" style="z-index:100">
        
    <div class="Content-Left" >第一行div父元素A
        <div  class="hide" align="left"  style="width:400px">
            第一行div父元素A子div     
        </div>
    </div>   
    
    <div class="Content-Left" >|</div>
    
    <div class="Content-Left" >第一行div父元素B
        <div  class="hide" align="left"  style="width:400px">
            第一行div父元素B子div     
        </div>
    </div>   




</div><!--第一行div结束-->




<!--第二行div-->
<div  class="Content" style="z-index:99">
    <div class="Content-Left">第二行div</div>
</div><!--第二行div结束-->






</body>
</html>

代码实现说明:

两行div并列,样式为Content。

第一行div有多个div从左到右排列,样式为Content-Left。

第一行div内的元素有个子div,默认隐藏,样式为hide。当鼠标移到Content-Left元素上时,显示子元素。


实现要点:

1. 通过CSS的hover控制修改子div的display属性来实现显示隐藏的子div。

.Content-Left:hover .hide{  
	display:block;  /** 当父div类 LinkContent-Left鼠标移上去的时候,将隐藏的子div类hide显示出来 */
}  

2.隐藏的子div要使用绝对定位,父div使用相对定位,并且父div不能设置overflow属性,否则子div无法不挤压其他div直接重叠显示在后面的第二行div上。

hide类设置position:absolute为绝对定位。

父div类Content和Content-Left设置position: relative为相对定位,且没有overflow属性。


3.第一行div的z-index必须比它的子div会重叠显示的其他div的z-index大,否则鼠标移到被重叠div上的时候,子div又会被隐藏起来。z-index只对同级的div有效,因此设置被隐藏的子div的z-index是无效的。

本例中第一行div的z-index为100,第二行设置为99。









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值