CSS二级弹出悬浮菜单是一种常见的网页交互设计,它允许用户通过点击或悬停在一个菜单项上,展开一个包含多个子菜单项的二级菜单。这种设计可以提高用户体验,使用户能够更方便地访问网站的深层内容。
以下是一个简单的CSS二级弹出悬浮菜单的示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS 二级弹出悬浮菜单</title>
<style>
.menu {
list-style: none;
padding: 0;
margin: 0;
}
.menu li {
display: inline-block;
position: relative;
}
.menu li a {
display: block;
padding: 10px;
text-decoration: none;
color: #333;
}
.submenu {
display: none;
position: absolute;
top: 100%;
left: 0;
background-color: #fff;
border: 1px solid #ccc;
list-style: none;
padding: 0;
margin: 0;
}
.menu li:hover .submenu {
display: block;
}
</style>
</head>
<body>
<ul class="menu">
<li><a href="#">菜单1</a>
<ul class="submenu">
<li><a href="#">子菜单1-1</a></li>
<li><a href="#">子菜单1-2</a></li>
</ul>
</li>
<li><a href="#">菜单2</a>
<ul class="submenu">
<li><a href="#">子菜单2-1</a></li>
<li><a href="#">子菜单2-2</a></li>
</ul>
</li>
</ul>
</body>
</html>原因:移动设备的触摸事件与鼠标悬停事件不同,导致悬停展开的菜单无法正常工作。
解决方法:
<script>
document.addEventListener('DOMContentLoaded', function() {
const menuItems = document.querySelectorAll('.menu > li');
menuItems.forEach(item => {
item.addEventListener('touchstart', function() {
this.querySelector('.submenu').style.display = 'block';
});
item.addEventListener('touchend', function() {
this.querySelector('.submenu').style.display = 'none';
});
});
});
</script>通过以上方法,可以解决二级菜单在移动设备上的显示问题。