最稳妥的方式是清空 .dropdown-toggle::after 的默认样式,即设 display: none;,因其箭头纯由 border 构成且不参与语义;需同步调整 padding-right 为 2.25rem 防文字右移,并确保 .dropdown 是 navbar-collapse 的直接子元素以保障 popper 定位正常。

直接去掉箭头,最稳妥的方式是清空 .dropdown-toggle::after 的默认样式,而不是试图隐藏或覆盖它——因为原生箭头是靠 border 画出来的伪元素,不删干净会残留空白或错位。
为什么加 display: none 就够了
Bootstrap 5 的下拉触发按钮箭头由 .dropdown-toggle::after 生成,内容为空、仅靠 border 构成三角。它不依赖图片、SVG 或字体,也不参与可访问性语义(aria-expanded 是独立控制的)。所以只需:
-
.dropdown-toggle::after { display: none; }—— 彻底移除伪元素,无副作用 - 无需 touch
::before,那是.dropdown-menu自己的定位箭头,和触发器无关 - 保留
data-bs-toggle="dropdown"和aria-expanded,JS 行为与屏幕阅读器完全不受影响
去掉后按钮文字被挤到右边?检查 padding-right
原生箭头占位约 2.25rem,display: none 后若没同步调整内边距,文字会右移、热区变窄,尤其在移动端点不展开:
- 查 DevTools 的
Computed面板,确认.dropdown-toggle的padding-right是否仍为2.25rem - 如果项目用了自定义 padding,手动补回:
.dropdown-toggle { padding-right: 2.25rem; } - 别只设
padding-right: 1rem图省事——小屏下触控热区不足,用户点不到按钮右侧区域
Navbar 里去掉箭头后菜单错位?不是箭头问题,是结构失效
很多人在 .navbar-nav 内直接给 <li> 加 dropdown 类,然后发现去掉箭头后菜单悬浮偏左/偏高。这其实和箭头无关,而是 Popper 定位锚点丢失:
-
.dropdown必须是<div class="collapse navbar-collapse"> 的**直接子元素**,不能包在 <code><ul class="navbar-nav"></ul>里 - 确保触发按钮是
<a class="nav-link"></a>或<button></button>,且包裹在<li class="nav-item dropdown">中 - 漏掉
data-bs-toggle="dropdown"会导致整个下拉逻辑未初始化,此时去不去箭头都无效
真正容易被忽略的是:去掉箭头本身很简单,但后续的 padding 对齐和 DOM 结构完整性,才是决定菜单是否可用的关键。尤其在 Navbar 场景下,错一层父容器,就足以让 dropdown-menu-end 或悬停行为全部失效。











