Начальная загрузка NavBar с левыми, центральными или правыми выровненными элементами

438

В начальной загрузке , какой самый удобный для платформы способ создать панель навигации с логотипом A слева, пунктами меню в центре и логотипом B справа?

Вот то, что я пробовал до сих пор, и в итоге получается, что логотип A находится слева, пункты меню рядом с логотипом слева, а логотип B - справа.

<div class="navbar navbar-fixed-top navbar-custom ">
  <div class="container" >
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#"><span class="navbar-logo">Logo_A</span></a>
    </div>
    <div class="collapse navbar-collapse">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#about">Menu Item 1</a></li>
        <li><a href="#contact">Menu Item 2</a></li>
        <li><a href="#about">Menu Item 3</a></li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#"><img src="images/Logo_B.png" class="img-responsive"></a></li>
      </ul>
    </div>
  </div>
</div>
Aliv
источник

Ответы:

804

2019 Обновление

Bootstrap 4

Теперь, когда Bootstrap 4 имеет flexbox, выравнивание Navbar стало намного проще. Вот обновленные примеры для левой , правой и центральной частей в Bootstrap 4 Navbar , и многие другие сценарии выравнивания, продемонстрированные здесь .

Flexbox , авто-поля , и упорядочение служебные классы могут быть использованы для выравнивания содержимого NavBar по мере необходимости. Есть много вещей, которые следует учитывать, включая порядок и выравнивание элементов Navbar (бренд, ссылки, переключатели) как на больших экранах, так и на мобильных / свернутых видах. Не используйте классы сетки (row, col) для Navbar .

Вот различные примеры ...

Левая, центральная (торговая марка) и правая ссылки:

введите описание изображения здесь

<nav class="navbar navbar-expand-md navbar-dark bg-dark">
    <div class="navbar-collapse collapse w-100 order-1 order-md-0 dual-collapse2">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Left</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="//codeply.com">Codeply</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
    <div class="mx-auto order-0">
        <a class="navbar-brand mx-auto" href="#">Navbar 2</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".dual-collapse2">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
    <div class="navbar-collapse collapse w-100 order-3 dual-collapse2">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item">
                <a class="nav-link" href="#">Right</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
</nav>

http://www.codeply.com/go/qhaBrcWp3v


Еще один вариант BS4 Navbar с центральными ссылками и наложенным логотипом :

центральные ссылки и наложение логотипа

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="navbar-collapse collapse w-100 dual-collapse2 order-1 order-md-0">
        <ul class="navbar-nav ml-auto text-center">
            <li class="nav-item active">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
    <div class="mx-auto my-2 order-0 order-md-1 position-relative">
        <a class="mx-auto" href="#">
            <img src="//placehold.it/120/ccff00" class="rounded-circle">
        </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".dual-collapse2">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
    <div class="navbar-collapse collapse w-100 dual-collapse2 order-2 order-md-2">
        <ul class="navbar-nav mr-auto text-center">
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
</nav>


Или эти другие сценарии выравнивания Bootstrap 4:

бренд слева, ссылки в мертвой точке, (пусто справа)

Марка Navbar ушла, ссылки в мертвой точке


Марка и центр ссылок, значки слева и справа

введите описание изображения здесь


Еще примеры Bootstrap 4 :

переключение влево на мобильном устройстве, бренд в правом
центре и ссылки на мобильном устройстве в
правой части выравнивают ссылки на рабочем столе, в центре ссылки на мобильных
ссылках влево и в переключателе, в центре бренда, в поиске справа


См. Также: Bootstrap 4 выравнивает элементы панели навигации по правому
краю. Bootstrap 4 выравнивает по правому краю панель навигации с кнопкой, которая не сворачивается на мобильном
устройстве.


Bootstrap 3

Вариант 1 - Центр марки, с левыми / правыми навигационными ссылками:

введите описание изображения здесь

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <a class="navbar-brand" href="#">Brand</a>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav navbar-left">
        <li><a href="#">Left</a></li>
        <li><a href="#about">Left</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
      <li><a href="#about">Right</a></li>
      <li><a href="#contact">Right</a></li>
    </ul>
  </div>
</nav>

.navbar-brand
{
    position: absolute;
    width: 100%;
    left: 0;
    text-align: center;
    margin:0 auto;
}
.navbar-toggle {
    z-index:3;
}

http://bootply.com/98314 (3.x)


Вариант 2 - Левая, центральная и правая навигационные ссылки:

введите описание изображения здесь

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a href="#">Left</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-center">
        <li><a href="#">Center</a></li>
        <li><a href="#">Center</a></li>
      <li><a href="#">Center</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Right</a></li>
    </ul>
  </div>
</nav>

@media (min-width: 768px) {
  .navbar-nav.navbar-center {
    position: absolute;
    left: 50%;
    transform: translatex(-50%);
  }
}

http://www.bootply.com/SGYC6BWeBK

Вариант 3 - центрируйте как бренд, так и ссылки

введите описание изображения здесь

.navbar .navbar-header,
.navbar-collapse {
    float:none;
    display:inline-block;
    vertical-align: top;
}

@media (max-width: 768px) {
    .navbar-collapse  {
        display: block;
    }
}

http://www.codeply.com/go/1lrdvNH9GI

Больше примеров:

Левый бренд, центральные ссылки
Левый переключатель, центральный бренд

Для 3.x также см. Nav- jusified : Bootstrap center navbar


Центр Navbar в Bootstrap
Bootstrap 4 выравнивает элементы панели навигации вправо

Zim
источник
1
как сделать так, чтобы левые предметы развалились в другом тумблере слева?
Gepex
1
Я создал 2 примера jsfiddle, так как bootply сейчас не работает. соль 1 и соль 2 . Кстати, решение 2 работает лучше (imho)
GiuServ
Для Bootstrap 4, используя Firefox, пример № 1 не работает. Добавление .absкласса приводит к тому, что navbar-brandэлемент закрывает кнопки слева и справа, что делает их недоступными для клика
8bithero
1
Как это не помечено как ответ? Дает 3 варианта для BS 3 и 4, спасибо, сэр.
Муркантилизм
Ни одна из ваших ссылок на codeply не открывается, и это из-за ужасного дизайна, используемого на этом сайте. Они смешали все виды рекламы, GraphQL ... вместе, и если не удается загрузить или заблокировать, весь экран будет пустым. да, именно так работает угловой (или НЕ работает).
AaA
59

Bootstrap 4

У нас есть много способов выровнять элементы navBars.

Для выравнивания по левому краю введите описание изображения здесь

class = "navbar-nav mr-auto "

Для правого выравнивания введите описание изображения здесь

class = "navbar-nav ml-auto "

Для выравнивания по центру введите описание изображения здесь

class = "navbar-nav mx-auto "

<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<a routerLink="/" class="navbar-brand" href="#">Bootsrap 4</a>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="home">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact">Contact us</a>
</li>
</ul>
</nav>
Джерольд Джоэл
источник
1
добавление class = "navbar-brand mx-auto" в теге b-nav-item
помогло
36

Мне нужно что-то похожее (левый, центральный и правый выравниваемые элементы), но с возможностью пометить центрированные элементы как активные. Что сработало для меня:

http://www.bootply.com/CSI2KcCoEM

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
      <li class="navbar-left"><a href="#">Left 1</a></li>
      <li class="navbar-left"><a href="#">Left 2</a></li>
      <li class="active"><a href="#">Center 1</a></li>
      <li><a href="#">Center 2</a></li>
      <li><a href="#">Center 3</a></li>
      <li class="navbar-right"><a href="#">Right 1</a></li>
      <li class="navbar-right"><a href="#">Right 2</a></li>
    </ul>
  </div>
</nav>

CSS:

@media (min-width: 768px) {
  .navbar-nav {
    width: 100%;
    text-align: center;
  }
  .navbar-nav > li {
    float: none;
    display: inline-block;
  }
  .navbar-nav > li.navbar-right {
    float: right !important;
  }
}
tomaszbak
источник
1
Это довольно близко, но оно ломается, когда вы его рушите. Если вы просматриваете его на мобильном устройстве, «Бренд» отображается под строкой меню. Разве Бренд не является частью настоящего Nav?
spasticninja
1
Это отвечает ОП более тесно.
Роджер Дуек
Пока это работает для меня. У меня нет ни Бренда, ни выровненного по правому краю элемента, только 3 варианта по центру. Спасибо
Алессандро
Я думаю, что это решение работает лучше, чем ответ, получивший наибольшее количество голосов, в том, что при уменьшении размера экрана ни один из элементов не висит на панели навигации (по крайней мере, в общем примере кода)
Правин
26

Bootstrap 4 (по состоянию на альфа 6)

Навбары построены с flexbox! Вместо поплавков вам понадобятся утилиты flexbox и margin.

Для Align Right используйте justify-content-endна collapsediv:

<div class="collapse navbar-collapse justify-content-end">
  <ul class="navbar-nav">
    <li class="nav-item active">
      <a class="nav-link" href="#">Home</a>
    </li>
  </ul>
</div>

Полный пример здесь: https://jsbin.com/kemawa/edit?output

Джереми Линч
источник
3
У меня не работает ... Похоже, что justify-content-end применяется к nav и не работает для navbar - это последняя версия начальной загрузки.
Стефан
1
@stephanePaquet, это применимо к альфа 6 (самый последний релиз начальной загрузки) - что вы используете?
Джереми Линч
11

Чмокнул головой, просто перечитал мой ответ и понял, что ОП просит два логотипа - один слева, справа - с центральным меню, а не наоборот.

Это можно сделать строго в HTML, используя Bootstrap «navbar-right» и «navbar-left» для логотипов, а затем «nav-juscted» вместо «navbar-nav» для вашего UL. Дополнительный CSS не требуется (если вы не хотите поместить переключатель navbar-collapse в центре в окне просмотра xs, вам нужно немного переопределить, но оставьте это на ваше усмотрение).

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>
    <div class="navbar-brand navbar-left"><a href="#"><img src="http://placehold.it/150x30"></a></div>

  </div>
  <div class="navbar-brand navbar-right"><a href="#"><img src="http://placehold.it/150x30"></a></div>

  <div class="navbar-collapse collapse">
    <ul class="nav nav-justified">
        <li><a href="#">home</a></li>
        <li><a href="#about">about</a></li>
    </ul>
  </div>
</nav>

Bootply: http://www.bootply.com/W6uB8YfKxm


Для тех, кто попал сюда, пытаясь центрировать «бренд», вот мой старый ответ:

Я знаю, что эта ветка немного старая, но просто чтобы опубликовать свои выводы, работая над этим. Я решил основывать свое решение на ответе Скелли с тех пор, как Томашбак сломал колласпе. Сначала я создал свой «navbar-center» и отключил float для обычного navbar в моем CSS:

.navbar-center
{
   position: absolute;
   width: 100%;
   left: 0;
   text-align: center;
   margin: auto;
}

.navbar-brand{
   float:none;
}

Однако проблема с ответом skelly заключается в том, что если у вас действительно длинное фирменное наименование (или вы хотите использовать изображение для своего бренда), то, как только вы попадете в область просмотра sm, это может привести к перекрытию из-за абсолютной позиции и, как это делают комментаторы. сказал, как только вы доберетесь до окна просмотра xs, тумблер сработает (если вы не используете Z-позиционирование, но я действительно не хочу беспокоиться об этом).

Поэтому я использовал утилиты, отвечающие за загрузку, для создания нескольких версий фирменного блока:

<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <div class="navbar-brand visible-xs"><a href="#">Brand That is Really Long</a></div>
</div>
<div class="navbar-brand visible-sm text-center"><a href="#">Brand That is Really Long</a></div>
<div class="navbar-brand navbar-center hidden-xs hidden-sm"><a href="#">Brand That is Really Long</a></div>

<div class="navbar-collapse collapse">
  <ul class="nav navbar-nav navbar-left">
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
  </ul>
  <ul class="nav navbar-nav navbar-right">
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
  </ul>
</div>

Так что теперь во вьюпортах lg и md бренд центрируется ссылками слева и справа, когда вы попадаете в видовой экран sm, ваши ссылки переходят на следующую строку, чтобы не перекрываться с вашим брендом, а затем, наконец, на xs. в окне просмотра появляется Collaspe, и вы можете использовать переключатель. Вы можете сделать это еще дальше и изменить медиазапросы для navbar-right и navbar-left при использовании с navbar-brand, чтобы в окне просмотра sm все ссылки были отцентрированы, но у них не было времени проверить это.

Вы можете проверить мой старый bootply здесь: www.bootply.com/n3PXXropP3

Полагаю, что иметь 3 бренда может быть не меньше, чем «z», но я чувствую, что в мире адаптивного дизайна это решение лучше подходит моему стилю.

Jonofthedead
источник
2

Вы устанавливаете поле слева на auto -> ml-auto на участке, который хотите переместить вправо.

 <nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
  <span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
  <div class="navbar-nav ml-auto"> !<--MARGIN LEFT AUTO HERE !-->
    <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
    <a class="nav-item nav-link" href="#">Features</a>
    <a class="nav-item nav-link" href="#">Pricing</a>
    <a class="nav-item nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
  </div>
</div>

Gerard
источник
1

Я обнаружил, что следующее было лучшим решением в зависимости от содержания левого, центрального и правого элементов. Ширина в 100% без полей приводила к наложению div и мешала правильной работе тегов привязки, то есть без грязного использования z-индексов.

.navbar-brand
{
    position: absolute;
    width: 100%;
    left: 0;
    margin: auto;
    margin-left: 48%;
}
atreeon
источник
1

Это устаревший вопрос, но я нашел альтернативное решение, чтобы поделиться им со страницы начальной загрузки github. Документация не была обновлена, и есть другие вопросы, касающиеся SO, которые задают одно и то же решение, хотя и по несколько другим вопросам. Это решение не относится к вашему случаю, но, как вы можете видеть, решение подходит <div class="container">сразу после этого, <nav class="navbar navbar-default navbar-fixed-top">но его также можно заменить <div class="container-fluid"на необходимое.

<!DOCTYPE html>
<html>

<head>
  <title>Navbar right padding broken </title>
  <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
</head>

<body>
  <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a href="#/" class="navbar-brand">Hello</a>
      </div>
      <div class="collapse navbar-collapse navbar-ex1-collapse">

        <ul class="nav navbar-nav navbar-right">
          <li>
            <div class="btn-group navbar-btn" role="group" aria-label="...">
              <button type="button" class="btn btn-default" data-toggle="modal" data-target="#modalLogin">Se connecter</button>
              <button type="button" class="btn btn-default" data-toggle="modal" data-target="#modalSignin">Créer un compte</button>
            </div>
          </li>
        </ul>
      </div>
    </div>
  </nav>
</body>

</html>

Решение было найдено на скрипке на этой странице: https://github.com/twbs/bootstrap/issues/18362

и указан как не исправить в V3.

Шон
источник
1
<div class="d-flex justify-content-start">hello</div>    
<div class="d-flex justify-content-end">hello</div>
<div class="d-flex justify-content-center">hello</div>
<div class="d-flex justify-content-between">hello</div>
<div class="d-flex justify-content-around">hello</div>

Поместите поля, которые вы хотите центрировать, вправо или влево в соответствии с приведенным выше делением.

Нехил Кошия
источник
-2

Самое простое решение:

Просто разделите их navbarна столбцы: например, если у вас всего 24 столбца, 12 будут пустыми, а 12 будут противоречить навигационной панели:

<nav class="navbar navbar-default">
    <div class="row">
       <div class="col-sm-4"></div>
       <div class="col-sm-4"></div>
       <div class="col-sm-4"></div>

       <div class="col-sm-12">
           <ul class="nav navbar-nav" align="center">
              <li><a href="#">Home</a></li>
              <li><a href="#">First Link</a></li>
              <li><a href="#">Second Link</a></li>
              <li><a href="#">Third Link</a></li>
              <li><a href="#">Fourth Link</a></li>
           </ul>
       </div>
    </div>
</nav>
parsecer
источник
1
Строка и столбец сетки не должны использоваться внутри Navbar. Используйте поддерживаемый контент .
Зим
@ Zim Почему бы и нет, что в этом плохого?
парсер