Laravel+Bootstrap5导航栏布局问题:右侧元素无法居右
导航栏布局问题:右侧用户模块无法靠右显示
我想要创建一个顶部导航栏,左侧展示项目名称与菜单,右侧展示用户管理模块,但实际效果是两者均靠左显示。
以下是我的dashNavbar.blade.php导航栏代码:
<header> <!-- Navbar --> <nav class="navbar navbar-expand-md navbar-dark bg-dark"> <!-- Left navbar links --> <button class="btn btn-dark" id="button-toggle"> <i class="bi bi-list"></i> </button> <a class="navbar-brand" href="#">Perpustakaan Perkantas</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" > <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse " id="navbarSupportedContent"> <ul class="navbar-nav me-auto"> </ul> <!-- right navbar links --> <ul class="navbar-nav ms-auto"> <li class="nav-item dropdown"> <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> {{ Auth::user()->username }} </a> <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ __('Logout') }} </a> <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </div> </li> </ul> </div> </nav> <!-- /.navbar --> </header>
我期望的效果类似Laravel默认Auth导航栏(仅颜色和内容不同),以下是app.blade.php中的默认导航栏对比代码:
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> <div class="container"> <a class="navbar-brand" href="{{ url('/') }}"> {{ config('app.name', 'Laravel') }} </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <!-- Left Side Of Navbar --> <ul class="navbar-nav me-auto"> </ul> <!-- Right Side Of Navbar --> <ul class="navbar-nav ms-auto"> <!-- Authentication Links --> @guest @if (Route::has('login')) <li class="nav-item"> <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a> </li> @endif @if (Route::has('register')) <li class="nav-item"> <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a> </li> @endif @else <li class="nav-item dropdown"> <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> {{ Auth::user()->name }} </a> <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ __('Logout') }} </a> <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </div> </li> @endguest </ul> </div> </div> </nav>
问题原因
对比两段代码可以发现,你的导航栏缺少了Bootstrap布局必需的<div class="container">容器。Laravel默认导航栏正是通过这个容器约束内部元素宽度,为ms-auto类提供正确的布局上下文,从而实现右侧元素的靠右对齐。没有这个容器时,navbar-collapse内的元素无法正确分配空间,导致右侧模块无法靠右。
修复后的代码
将导航栏内部元素包裹进<div class="container">即可解决问题:
<header> <!-- Navbar --> <nav class="navbar navbar-expand-md navbar-dark bg-dark"> <div class="container"> <!-- Left navbar links --> <button class="btn btn-dark" id="button-toggle"> <i class="bi bi-list"></i> </button> <a class="navbar-brand" href="#">Perpustakaan Perkantas</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" > <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse " id="navbarSupportedContent"> <ul class="navbar-nav me-auto"> </ul> <!-- right navbar links --> <ul class="navbar-nav ms-auto"> <li class="nav-item dropdown"> <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> {{ Auth::user()->username }} </a> <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ __('Logout') }} </a> <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </div> </li> </ul> </div> </div> </nav> <!-- /.navbar --> </header>
内容的提问来源于stack exchange,提问作者Kholid Syaifullah
相关产品推荐
相关产品推荐

