PAYATHON 2026

如何在 React.js 中让菜单的三个链接显示在同一行?

技术老齐

给三个菜单项的共同父元素设置 display: flex,就能让它们横向排列,再用 gap 调整间距。如果需要始终保持一行,可以显式设置 flex-wrap: nowrap。

为什么链接会纵向排列?

React 负责渲染元素,布局由 CSS 决定。<a> 默认是行内元素,但每个链接外面如果包着 <div> 或 <li>,菜单项通常就会纵向排列。已有样式中的 display: block、flex-direction: column 等规则也可能影响布局。

没有现有代码,还无法确定具体原因,可以先检查包裹菜单项的父元素。

使用 Flexbox 实现横向菜单

创建菜单组件,并引入样式文件:

import "./Menu.css";

export default function Menu() {
  return (
    <nav aria-label="主导航">
      <ul className="menu">
        <li><a href="/">首页</a></li>
        <li><a href="/about">关于我们</a></li>
        <li><a href="/contact">联系我们</a></li>
      </ul>
    </nav>
  );
}

在 Menu.css 中设置布局:

.menu {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  gap: 20px;

  margin: 0;
  padding: 0;
  list-style: none;

  overflow-x: auto;
}

.menu > li {
  flex-shrink: 0;
}

.menu a {
  white-space: nowrap;
}

display: flex 让 <ul> 的直接子元素 <li> 参与 Flexbox 布局。flex-direction: row 指定横向排列,菜单项之间的距离由 gap 控制。

flex-wrap: nowrap 让菜单项保持在同一行,white-space: nowrap 防止链接文字内部换行。容器过窄时,overflow-x: auto 允许横向滚动。

已有菜单需要注意什么?

display: flex 要加在三个菜单项的共同父元素上。如果结构是 ul > li > a,就设置在 <ul> 上;如果三个 <a> 直接放在 <nav> 中,就设置在 <nav> 上。

修改后如果仍然纵向排列,可以用浏览器开发者工具查看父元素的计算样式,确认 display: flex 和 flex-direction: row 已生效。还要检查是否存在 <br />,以及相关样式是否被其他 CSS 覆盖。

窄屏下如果允许菜单换行,可以改为 flex-wrap: wrap,并按需要移除横向滚动设置。

备注:内容仅供参考。