响应式布局中缩小屏幕宽度导航栏出现左侧蔓延白色区域问题
响应式导航栏缩小时出现左扩白色区域问题
我正在尝试制作包含图片logo、标题、导航链接和社交链接的导航栏,为四个模块分别创建了对应的div。进行响应式适配缩小屏幕宽度时,导航栏内出现白色区域,且随着屏幕宽度减小白色区域会向左侧不断扩大。
正常显示的导航栏截图:
缩小屏幕宽度时问题复现的截图:
相关代码
CSS
/* Reset */ * { margin: 0; padding: 0; box-sizing: border-box; } @font-face { font-family: PollerOne; src: url('../../fonts/Poller_One/PollerOne-Regular.ttf'); } /* 导航栏样式 */ #navbar { display: flex; position: relative; align-items: center; height: 65px; width: 100%; } #navbar::before { content: ""; position: absolute; background-color: #262626; height: 65px; width: 100%; z-index: -2; } .navbar { color: white; margin: 7px 7px; } /* Logo样式 */ #logo { background-color: black; height: 45px; width: 45px; min-width: 45px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } #logo img { filter: invert(); width: 25px; } /* 标题样式 */ #title { font-family: PollerOne; min-width: 160.5px; font-size: 1.4rem; margin-left: 0px; } /* 导航链接样式 */ #nav-links { margin: 0 auto; } #nav-links ul { list-style-type: none; display: flex; } .nav-links { font-size: 20px; margin: 0 20px; position: relative; cursor: pointer; } /* 导航链接下划线动画 */ .nav-links::after { content: ""; position: absolute; width: 100%; height: 2px; bottom: -4px; background: linear-gradient(white 0 0) center/0% 100% no-repeat; display: block; } :hover.nav-links::after { animation: pulse 300ms linear; animation-fill-mode: forwards; } @keyframes pulse { to { background-size: 100% 100%; } } /* 社交链接样式 */ #social-links { margin-left: auto; display: flex; } .social-links { width: 30px; height: 30px; border-radius: 11px; display: flex; align-items: center; justify-content: center; margin: 0 5px; } .social-links img { width: 27px; transition: all 200ms ease; } .social-links img:hover { transform: scale(1.5) }
HTML
<div id="navbar"> <div id="logo" class="navbar"> <img src="./img/bag.png" alt=""> </div> <div id="title" class="navbar">Meals Point</div> <div id="nav-links" class="navbar"> <ul> <li class="nav-links"><a id="link-1">首页</a></li> <li class="nav-links"><a id="link-2">关于</a></li> <li class="nav-links"><a id="link-3">服务</a></li> <li class="nav-links"><a id="link-4">食谱</a></li> <li class="nav-links"><a id="link-5">联系我们</a></li> </ul> </div> <div id="social-links" class="navbar"> <a class="social-links"><img src="./img/twitter.png" id="link-1"></a> <a class="social-links"><img src="./img/facebook.png" id="link-2"></a> <a class="social-links"><img src="./img/instagram.png" id="link-3"></a> </div> </div>
问题原因
导航栏子元素都设置了固定最小宽度,当屏幕宽度小于所有子元素最小宽度总和时,flex容器的内容会溢出视口。通过伪元素设置的导航栏背景宽度仅为100%视口宽度,溢出区域没有背景覆盖,就会显示为页面默认的白色。
修复方案
方案1:快速适配,允许小屏横向滚动
直接修改导航栏样式即可生效:
#navbar { display: flex; position: relative; align-items: center; height: 65px; width: 100%; min-width: fit-content; /* 让容器宽度匹配内容总宽度 */ background-color: #262626; /* 直接给容器加背景,替代伪元素 */ } /* 原#navbar::before相关代码可直接删除 */
方案2:响应式汉堡菜单(符合通用交互规范)
小屏将导航链接收起,点击汉堡按钮展开,避免内容溢出:
- 新增汉堡按钮HTML
<div id="navbar"> <div id="logo" class="navbar"> <img src="./img/bag.png" alt=""> </div> <div id="title" class="navbar">Meals Point</div> <!-- 新增汉堡按钮 --> <button id="hamburger" class="navbar">☰</button> <div id="nav-links" class="navbar"> <ul> <li class="nav-links"><a id="link-1">首页</a></li> <li class="nav-links"><a id="link-2">关于</a></li> <li class="nav-links"><a id="link-3">服务</a></li> <li class="nav-links"><a id="link-4">食谱</a></li> <li class="nav-links"><a id="link-5">联系我们</a></li> </ul> </div> <div id="social-links" class="navbar"> <a class="social-links"><img src="./img/twitter.png" id="link-1"></a> <a class="social-links"><img src="./img/facebook.png" id="link-2"></a> <a class="social-links"><img src="./img/instagram.png" id="link-3"></a> </div> </div>
- 新增响应式CSS
/* 大屏隐藏汉堡按钮 */ #hamburger { display: none; background: none; border: none; color: white; font-size: 1.5rem; cursor: pointer; margin-left: auto; } /* 768px以下小屏样式 */ @media (max-width: 768px) { #hamburger { display: block; } #nav-links { position: absolute; top: 65px; left: 0; width: 100%; background-color: #262626; margin: 0; display: none; } #nav-links ul { flex-direction: column; padding: 10px 0; } .nav-links { margin: 10px 20px; } #nav-links.active { display: block; } #social-links { margin-right: 10px; } }
- 新增点击展开逻辑
const hamburger = document.getElementById('hamburger') const navLinks = document.getElementById('nav-links') hamburger.addEventListener('click', () => { navLinks.classList.toggle('active') })
内容的提问来源于stack exchange,提问作者m-naeem66622
相关产品推荐
相关产品推荐

