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

响应式布局中缩小屏幕宽度导航栏出现左侧蔓延白色区域问题

响应式导航栏缩小时出现左扩白色区域问题

我正在尝试制作包含图片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:响应式汉堡菜单(符合通用交互规范)

小屏将导航链接收起,点击汉堡按钮展开,避免内容溢出:

  1. 新增汉堡按钮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>
  1. 新增响应式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;
  }
}
  1. 新增点击展开逻辑
const hamburger = document.getElementById('hamburger')
const navLinks = document.getElementById('nav-links')
hamburger.addEventListener('click', () => {
  navLinks.classList.toggle('active')
})

内容的提问来源于stack exchange,提问作者m-naeem66622

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:57:02