Многострочный центрированный элемент навигационной панели в bootstrap 4

У меня есть панель навигации, и она отлично работает, когда есть только однострочные элементы:

<div class = "collapse navbar-collapse" id = "navbarSupportedContent">
            <ul class = "navbar-nav ml-auto">

                <li class = "nav-item">
                    <a class = "nav-link" href = "#">FAQ</a>
                </li>

                <li class = "nav-item">
                    <a class = "nav-link profile" href = "#">
                        <div class = "profile-info">
                            <span class = "name">Артём</span>
                        </div>
                    </a>
                </li>
            </ul>
        </div>

Многострочный центрированный элемент навигационной панели в bootstrap 4

Но когда элемент является многострочным, другие элементы теряют вертикальное выравнивание по центру и вместо этого выравнивают верх:

<div class = "collapse navbar-collapse" id = "navbarSupportedContent">
            <ul class = "navbar-nav ml-auto">

                <li class = "nav-item">
                    <a class = "nav-link" href = "#">FAQ</a>
                </li>

                <li class = "nav-item">
                    <a class = "nav-link profile" href = "#">
                        <div class = "profile-info">
                            <span class = "name">Артём</span>
                            <span class = "balance">31337 ₽</span>
                        </div>
                    </a>
                </li>
            </ul>
        </div>

Многострочный центрированный элемент навигационной панели в bootstrap 4

Мой код SASS:

#site-header {
  background: #2d3840;
  border-bottom: solid 1px #20272d;
  height: 83px;

  .navbar-brand {
    color: white;
  }

  .nav-item {

    &:not(:first-child) {
      margin-left: 25px;
    }

    &:not(:last-child) {
      margin-right: 25px;
    }

    // General link
    a.nav-link {
      color: white;
      font-size: 16px;
      text-align: center;

      @include transition(0.5s);
      &:hover {
        @include transition(0.3s);
        color: $color-accent;
      }

      &.active {
        padding: 6px 21px 6px 21px;
        background: $color-accent;
        border-radius: 17.5px;
        box-shadow: 0 2px 10px 0 rgba(90, 175, 238, 0.6);

        &:hover {
          color: white;
          box-shadow: none;
        }
      }

      // Profile
      &.profile {
        .profile-info {
          display: inline-block;

          .name {
            display: block;
            font-weight: bold;
          }

          .balance {
            display: block;
            font-size: 16px;
            font-weight: bold;
            color: $color-accent;
          }
        }
      }
    }

  }
}

Желанный:

Многострочный центрированный элемент навигационной панели в bootstrap 4

Итак, как центрировать элементы, когда есть многострочные элементы?

Кажется, что кода Navbar недостаточно, чтобы воспроизвести проблему. Также у вас есть скомпилированный CSS вместо SASS?

Zim 28.05.2018 03:09
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
1
1 535
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите profile-info и используйте эти классы для тега a.

  1. d-flex - сделать его flex
  2. flex-column - для изменения его свойства flex-direction на column
  3. text-right - чтобы выровнять его дочерние элементы inline по правой стороне

<li class = "nav-item">
  <a class = "nav-link d-flex flex-column text-right" href = "#">
    <span class = "name">Артём</span>
    <span class = "balance">31337 ₽</span>
  </a>
</li>

Чтобы выровнять другой items по вертикали в центре списка, используйте align-self-center для каждого из элементов li.

<li class = "nav-item  align-self-center">
  <a class = "nav-link" href = "#">FAQ</a>
</li>

<link href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css" rel = "stylesheet"/>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/js/bootstrap.js"></script>
<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 = "#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 ml-auto">
      <li class = "nav-item active  align-self-center">
        <a class = "nav-link" href = "#">Home <span class = "sr-only">(current)</span></a>
      </li>
      <li class = "nav-item  align-self-center">
        <a class = "nav-link" href = "#">Link</a>
      </li>

      <li class = "nav-item align-self-center">
        <a class = "nav-link disabled" href = "#">Disabled</a>
      </li>
      <li class = "nav-item  align-self-center">
        <a class = "nav-link" href = "#">FAQ</a>
      </li>

      <li class = "nav-item ">
        <a class = "nav-link d-flex flex-column text-right" href = "#">
          <span class = "name">Артём</span>
          <span class = "balance">31337 ₽</span>
        </a>
      </li>
    </ul>
  </div>
</nav>

Спасибо, но когда я использую ml-auto для navbar-nav, элементы не разделяются на две строки: i.imgur.com/1wMFFO6.png Они разделяются, только если я добавляю <br/> между двумя промежутками.

artem 28.05.2018 13:27

UPD. Хорошо, если я добавлю display: block для промежутков, он будет работать нормально. Это правильное решение?

artem 28.05.2018 13:28

Стоит ли использовать mr-auto или ml-auto. Запустите фрагмент кода и проверьте его в полноэкранном режиме. Я думаю, твоя проблема в другом.

mahan 28.05.2018 13:31
display:block делает теги spanblock. a не может содержать элемент блочного уровня. Но поскольку сейчас это flex, он может содержать элементы уровня block. Если вы не можете найти проблему, используйте тег p вместо span.
mahan 28.05.2018 13:36

Другие вопросы по теме