Bootstrap 5 - Навбар - Логотип/брендовый текст слева - Меню по центру - Поиск справа
Я пытаюсь сделать Navbar в Bootstrap 5. Я бы хотел, чтобы логотип (в моем случае это просто причудливый текст) располагался слева. Затем я бы хотел, чтобы меню было по центру, а поле поиска - справа. Проблема, с которой я столкнулся, заключается в том, что когда мне удается выстроить их таким образом, меню располагается в центре div'ов поиска и логотипа, что из-за размера логотипа и т.д. не всегда соответствует середине экрана, как я хочу. Я занимаюсь этим уже несколько дней, пробуя разные варианты, но никак не могу добиться нужного результата. Я также хочу, чтобы мобильное меню сворачивалось и включало поиск. В мобильном меню логотип должен быть выровнен по центру, а кнопка сворачивания - чуть ниже, также по центру.
Последний код, который я пробовал, следующий:
index.html:
Шаблонизация - это просто потому, что я делаю это с Django.
main.css:
@font-face {
font-family: 'vi-my-ha-hoa';
src: url('../fonts/vi-my-ha-hoa.ttf') format("truetype");
}
.navbar-brand {
font-family: 'vi-my-ha-hoa';
font-size: 3rem;
word-spacing: 0.4rem;
}
.carousel-image {
height: 400px;
object-fit: cover !important;
}
.carousel-item>div {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
}
.navbar-dark {
--bs-navbar-color: #ffffff;
--bs-navbar-hover-color: #ffffff;
--bs-navbar-active-color: #fff;
}
Я не нашел удовлетворительного простого способа сделать навигационную панель действительно центрированной. Хотелось бы, чтобы bootstrap предоставлял способ по умолчанию. Ниже приведен подход, который работает, определяя выровненные слева и справа элементы классом "col" (flex-basis grow) и оставляя центр в покое, основываясь на ответе, данном в Keep the middle item centered when side items have different width. Однако бренд navbar сворачивается вместе со всем остальным. (см. реализацию codepen: https://codepen.io/sam-miller-the-flexboxer/pen/bGLmXzz). О других, возможно более гибких, подходах, включая использование абсолютного позиционирования по центру, смотрите https://codepen.io/yesiamrocks/pen/MVOWXZ. В примерах используется Bootstrap 4, поэтому вам, возможно, придется обновить названия некоторых классов до Bootstrap 5. Например, mr-auto (margin right) и ml-auto (margin left) нужно изменить на me-auto (margin end) и ms-auto (margin start)
<nav class="navbar navbar-expand-sm bg-light">
<div class="container-xxl">
<button class="navbar-toggler ms-auto" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerflex-1" aria-controls="navbarTogglerflex-1" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse align-items-baseline" id="navbarTogglerflex-1">
<div class="col">
<a class="navbar-brand" href="#">
<i class="bi bi-bootstrap-fill h2 align-middle"></i>
Bootstrap
</a>
</div>
<ul class="navbar-nav mb-2 mb-sm-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
</ul>
<div class="col">
<form class="ms-sm-auto w-75 " role="search">
<div class="input-group input-group-sm mb-3 flex-nowrap">
<input type="text" class="form-control" placeholder="Search">
<button type="button" class="btn btn-secondary">
<i class="bi bi-search"></i>
<span class="visually-hidden">Search</span>
</button>
</div>
</form>
</div>
</div>
</div>
</nav>