CSS下拉菜单鼠标移入菜单内容时,菜单隐藏消失的问题

问题描述

在使用CSS制作下拉菜单时,鼠标在移动到下拉标题上,下拉菜单内容显示,鼠标移开时,菜单隐藏起来,但是但我们试图把鼠标移动到菜单内容上时,菜单内容也隐藏了。代码是仿照实现某网站的一个小的下拉菜单。

html


<body>

<div class="droplist">

  <p class="droptext">Xiaomi 手机</p>
  <div class="content">
  
  <div class="p1">
    <img src="1.png"
     width="200" height="138" /> 
    <a class="text1" href="#">Xiaomi 12 Pro<br/>
    <span>4699元起</span></a>
  </div>
  
  <div class="p1">
    <img src="2.png" width="200" 
    height="138" /> 
    <a class="text1" href="#">Xiaomi 12<br/>
    <span>3699元起</span></a>
  </div>
  
  <div class="p1">
    <img src="3.png" width="200" 
    height="138" /> 
    <a class="text1" href="#">Xiaomi 12X<br/>
    <span>2999元起</span></a>
  </div>
  
  <div class="p1">
    <img src="4.png" width="200" 
    height="138" /> 
    <a class="text1" href="#">Xiaomi 11 青春活力版<br/>
    <span>1899元起</span></a>
  </div>
  
  <div class="p1">
    <img src="5.png" width="200" 
    height="138" /> 
    <a class="text1" href="#">Xiaomi Civi<br/>
    <span>2299元起</span></a>
  </div>

</div>
</div>

</body>

CSS

.droplist{
	position:relative;
	display:block;
	cursor:pointer;
	padding:0;
	}
.content{
	margin:0;
	position:absolute;
	display:none;
	}
.droptext{
	margin-bottom:0;}
	
.droplist:hover .droptext{
	color:#F30;
	}
	
.droplist:hover .content{
	display:block;
	margin-top:0;}
	
.p1{
	margin:0;
	width:200px;
	text-align:center;
	float:left;}

.p1 span{
	color:#F33;
	}

.content a{
	text-decoration:none;
	color:#000;}	

原因和解决方案

首先,我们用css写下拉菜单,一般过程是这样:一个大的父元素框架——droplist,包含一个触发下拉菜单的起点——droptext,和一个菜单内容——content,鼠标移动到父元素上时,下拉菜单显示,鼠标移开时,菜单内容隐藏。按照道理来说,鼠标放置父元素整体范围是不会收起菜单内容的,经过排错后发现,content与droptext存在空隙,鼠标移动到那个缝隙时,就离开了父元素,所以会存在鼠标移动时,菜单内容收起的情况。

解决方法之一:让空隙消失,设置 droptext的下外边距为0即 margin-bottom:0; content的上外边距为0 即 margin-top:0。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用HTML和CSS来实现导航栏鼠标经过显示下二级菜单的效果。具体实现步骤如下: 1. HTML结构 首先需要在HTML中添加导航栏的结构,包括导航栏的主菜单和下的子菜单。 ```html <nav> <ul> <li><a href="#">主菜单1</a> <ul> <li><a href="#">子菜单1-1</a></li> <li><a href="#">子菜单1-2</a></li> <li><a href="#">子菜单1-3</a></li> </ul> </li> <li><a href="#">主菜单2</a> <ul> <li><a href="#">子菜单2-1</a></li> <li><a href="#">子菜单2-2</a></li> </ul> </li> <li><a href="#">主菜单3</a></li> </ul> </nav> ``` 2. CSS样式 接下来需要使用CSS来设置导航栏的样式,包括主菜单和子菜单的样式。主菜单需要设置为横向排列,子菜单需要设置为隐藏。 ```css nav ul { list-style: none; margin: 0; padding: 0; display: flex; } nav li { position: relative; flex: 1; text-align: center; } nav li:hover ul { display: block; } nav ul ul { display: none; position: absolute; top: 100%; left: 0; width: 100%; } nav ul ul li { text-align: left; } ``` 3. JavaScript交互 最后需要使用JavaScript来实现鼠标经过主菜单显示对应的子菜单。具体实现方式可以使用事件监听器来监听鼠标出事件,并根据事件来控制子菜单的显示和隐藏。 ```javascript var mainMenu = document.querySelectorAll('nav ul li'); for (var i = 0; i < mainMenu.length; i++) { mainMenu[i].addEventListener('mouseover', function() { this.querySelector('ul').style.display = 'block'; }); mainMenu[i].addEventListener('mouseout', function() { this.querySelector('ul').style.display = 'none'; }); } ``` 以上就是使用HTML和CSS实现导航栏鼠标经过显示下二级菜单的完整实现过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值