You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下拉菜单被头部遮挡截断,如何使其正常显示在触发链接下方?

问题解决方案

核心问题分析

  1. 下拉菜单被截断:是因为父元素.nav设置了overflow: hidden,会裁剪超出导航区域的内容
  2. 定位偏移:.dropdownList使用position: absolute时,没有以触发它的.dropdownItem为基准定位,而是相对于上层的.nav
  3. position: fixed不跟随:固定定位是基于视口的,自然不会随滚动的导航菜单移动

分步修复代码

1. 移除导致截断的设置

删除.nav中的overflow: hidden,让下拉菜单能正常超出导航区域显示:

.nav{
    width: 100%;
    height: 100%;
    position: relative;
    background-color: var(--black);
    /* 移除 overflow: hidden */
}

2. 设置下拉菜单的定位基准

给下拉菜单的父元素.dropdownItem添加position: relative,让absolute定位的下拉菜单以它为基准:

.dropdownItem {
    position: relative;
}

3. 调整下拉菜单的定位样式

修改.dropdownList的样式,确保它紧贴触发项底部,同时优化宽度和动画:

.dropdownList {
    position: absolute;
    background: #ededed;
    min-width: 150px; /* 自适应内容或设固定宽度 */
    top: 100%; /* 紧贴触发项底部 */
    left: 0;
    visibility:hidden;
    opacity:0;
    transition:all 0.2s linear;
    margin-top: 0; /* 用top控制位置,移除多余margin */
}

/* 优化下拉选项的交互体验 */
.dropdownList a {
    color: #36383F;
    display: block;
    padding: 12px 16px;
}

.dropdownList a:hover {
    background-color: #ddd;
}

4. 简化鼠标事件(可选)

移除不必要的display: block,仅用visibility和opacity控制显示隐藏:

const dropdownItem = document.getElementById('dropdownItem');
const dropdownList = document.getElementById('dropdownList');

dropdownItem.addEventListener('mouseover', () => {
    dropdownList.style.opacity = 1;
    dropdownList.style.visibility = 'visible';
    dropdownList.style.marginTop = '0';
})

dropdownItem.addEventListener('mouseout', () => {
    dropdownList.style.opacity = 0;
    dropdownList.style.visibility = 'hidden';
    dropdownList.style.marginTop = '5px'; /* 保留位移动画 */
})

完整修改后代码

HTML

<header class="header">                 
    <nav class="nav">
        <ul class="menu">
            <li><a href="#">Gallery</a></li>
            <li class="dropdownItem" id="dropdownItem">
                <p>Areas</p>
                <div class="dropdownList" id="dropdownList">
                    <a href="#">Sub-Area 1</a>
                    <a href="#">Sub-Area 2</a>
                    <a href="#">Sub-Area 3</a>
                    <a href="#">Sub-Area 4</a>
                </div>                        
            </li>
            <li><a href="#">Blog</a> </li>               
            <li><a href="#">About</a></li>                   
        </ul>
    </nav>
</header>

CSS

/* Theming */
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap");

:root{
    --white: #f9f9f9;
    --black: #36383F;
    --grey: #85888C;
}

/* Reset */
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    background-color: var(--white);
    font-family: "Poppins", sans-serif;
   
}

a{
    text-decoration: none;
}

ul{
    list-style: none;
}

.header {
    background-color: var(--black);
    box-shadow: 1px 1px 5px 0px var(--grey);
    position: sticky;
    top: 0;
    width: 100%;
}

.nav{
    width: 100%;
    height: 100%;
    position: relative;
    background-color: var(--black);
}

.nav{
    height: 100%;
    transition: height .5s ease-out;
}

.menu {
    display: flex;
    justify-content: end;
}

.menu a{
    display: block;
    padding: 30px;
    color: var(--white);    
}

.menu p {
    display: block;
    padding: 30px;
    color: var(--white);
}

.menu li:hover{
    background-color: var(--grey);
}

.dropdownItem {
    position: relative;
}

.dropdownList {
    position: absolute;
    background: #ededed;
    min-width: 150px;
    top: 100%;
    left: 0;
    visibility:hidden;
    opacity:0;
    transition:all 0.2s linear;
    margin-top: 0;   
}

.dropdownList a {
    color: #36383F;
    display: block;
    padding: 12px 16px;
}

.dropdownList a:hover {
    background-color: #ddd;
}

JavaScript

const dropdownItem = document.getElementById('dropdownItem');
const dropdownList = document.getElementById('dropdownList');

dropdownItem.addEventListener('mouseover', () => {
    dropdownList.style.opacity = 1;
    dropdownList.style.visibility = 'visible';
    dropdownList.style.marginTop = '0';
})

dropdownItem.addEventListener('mouseout', () => {
    dropdownList.style.opacity = 0;
    dropdownList.style.visibility = 'hidden';
    dropdownList.style.marginTop = '5px';
})

内容的提问来源于stack exchange,提问作者JohnnyJohnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:01:33