У меня есть панель навигации, и она отлично работает, когда есть только однострочные элементы:
<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>
Но когда элемент является многострочным, другие элементы теряют вертикальное выравнивание по центру и вместо этого выравнивают верх:
<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>
Мой код 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;
}
}
}
}
}
}
Желанный:
Итак, как центрировать элементы, когда есть многострочные элементы?






Удалите profile-info и используйте эти классы для тега a.
d-flex - сделать его flexflex-column - для изменения его свойства flex-direction на columntext-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/> между двумя промежутками.
UPD. Хорошо, если я добавлю display: block для промежутков, он будет работать нормально. Это правильное решение?
Стоит ли использовать mr-auto или ml-auto. Запустите фрагмент кода и проверьте его в полноэкранном режиме. Я думаю, твоя проблема в другом.
display:block делает теги spanblock. a не может содержать элемент блочного уровня. Но поскольку сейчас это flex, он может содержать элементы уровня block. Если вы не можете найти проблему, используйте тег p вместо span.
Кажется, что кода Navbar недостаточно, чтобы воспроизвести проблему. Также у вас есть скомпилированный CSS вместо SASS?