ml-auto не перемещает ссылки на панели навигации вправо

Я использую reactstrap и перехожу по этой ссылке:

https://reactstrap.github.io/components/navbar/

В этом примере <nav className='ml-auto' navbar> сдвигает <NavItem> вправо. Однако то, что я пытаюсь реализовать (что действительно похоже на пример), <NavItem> рендерится рядом с <NavbarBrand>.

Я проверял синтаксис около 100 раз, и он выглядит правильным. Имеющийся у меня собственный CSS, которого очень мало, похоже, ничего не отменяет. CSS в консоли выглядит очень похоже, и, похоже, на него влияют:

.ml-auto, .mx-auto {
    margin-left: auto!important;
}

По крайней мере, отключение этого параметра в консоли в примере перемещает <NavItem> прямо рядом с <NavbarBrand>, как в моем приложении (чего я не хочу). Вот что я смотрю:

Пример Reactstrap (правильный интервал):

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

Консоль для моего приложения (неправильный интервал):  введите описание изображения здесь введите описание изображения здесь

Как правильно настроить интервал в моем приложении?

Мне действительно непонятно, что влияет margin-left: auto !important на работу в одном, а не в другом.


person cjones    schedule 28.02.2018    source источник
comment
разверните navbar-toggler и .navbar-collapse из _3 _.... похоже, что вы используете лишние div сразу после _5 _...   -  person Bhuwan    schedule 28.02.2018


Ответы (6)


Компоненты навигационной панели (и многие другие компоненты) будут работать только в том случае, если вы будете использовать их так, как они были разработаны для использования.

Например, ml-auto работает с одноуровневыми элементами.

Это НЕ сработает, если вы разрушите эти родственные отношения.

Другими словами, вы не можете просто случайным образом обернуть элементы в ненужные div.

Удалите div, который вы поместили вокруг переключателя навигационной панели и компонента свертывания, чтобы селектор сестры работал должным образом.

Также: НЕ используйте флаг !important в качестве постоянного решения в любом из ваших пользовательских CSS. Этот флаг предназначен только для быстрого тестирования.

P.S. Кажется, у вас есть привычка заворачивать вещи в ненужные div. container тоже завернут в такой бесполезный div. Не добавляйте ненужный код для какой-то «эстетики». Добавляйте код только в том случае, если он действительно что-то делает, и используйте комментарии для всего остального.

person WebDevBooster    schedule 28.02.2018
comment
! important добавлен Bootstrap. Они не создавали эти правила CSS. - person ScottMichaud; 18.06.2021

Для Bootstrap-5 мы должны использовать ms-auto вместо ml-auto

person Nithin Kumar    schedule 04.01.2021
comment
ЭТО СЕРЬЕЗНО ЗАСЛУЖИВАЕТ БОЛЬШЕ КРЕДИТА. На странице начальной загрузки React нет никаких упоминаний о ms-auto. ml-auto - это все, что он дал мне, как и все остальные посты здесь. блин, чувак, ты легенда. - person darthgamer64; 06.05.2021
comment
Это сработало для меня. Я использую response-bootstrap и устанавливаю bootstrap, используя yarn add bootstrap, который установил последнюю версию v5.0. Переустановил bootstrap (yarn add [email protected]) и теперь работает нормально. - person Kevin Aung; 10.05.2021
comment
Это должен быть принятый ответ. - person Sara Mannings; 26.06.2021
comment
должен быть принятым ответом при использовании bootstrap 5 - person Ritesh Kumar; 11.07.2021
comment
Да, это сработало успешно. И спасибо, ты спас мне день. - person roshansourav; 24.07.2021

Объяснение того, как работает ml-auto.

Похоже, это уже было решено в комментариях. Я просто хотел добавить объяснение, что ml-auto не работает, потому что его родительский элемент flexbox должен быть на всю ширину панели навигации. Таким образом, это также можно было решить, добавив w-100 к дополнительному div ..

<nav class="navbar navbar-expand-md navbar-light bg-faded">
     <a class="navbar-brand" href="#">reactstrap</a>
     <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="navbar-toggler-icon"></span>
     </button>
     <div class="w-100">
        <div class="navbar-collapse collapse">
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Link</a>
                </li>
                ...
            </ul>
        </div>
     </div>
 </nav>

ml-auto работает из-за того, что родительский элемент flexbox по умолчанию «сжимает» элементы дочернего блока. Он не имеет ничего общего с родственными элементами и будет нормально работать только с одним дочерним элементом в родительском элементе flexbox: https://www.codeply.com/go/xPaoNJMzbG

Вот хорошая статья о том, как автоматические поля работают с flexbox

person Zim    schedule 28.02.2018
comment
Я попытался добавить w-100 к родительскому элементу (row в моем случае), и это не имело значения. Когда я использовал ml-auto, кнопки все еще не выравниваются. Однако добавление класса text-right сработало, и кнопки правильно выровнялись. - person dcp; 15.01.2021

Начиная с Bootstrap 5 2021, есть некоторые изменения в названиях сторон утилит интервалов.

  • Левое поле теперь называется "Начало поля", поэтому используйте ms вместо ml.

  • Пример: для установки параметра margin-left в auto: используйте ms-auto

  • Аналогично для установки поля слева на 3: используйте ms-3 вместо ml-3

Вы можете узнать больше о новых именах сторон для полей и отступов в официальной документации начальной загрузки BootStrap Spacing Utilities < / а>

person Bijay Sharma    schedule 20.05.2021

В Bootstrap-5 есть некоторые изменения, раньше это было ml-auto для margin-left: auto, которое теперь заменено на ms-auto, аналогично mr-auto заменено на me-auto. Однако для верха и низа он такой же, как и в более ранних версиях bootstrap, то есть в версиях до bootstrap-5.

для получения дополнительных сведений посетите документы

person soraku02    schedule 20.02.2021
comment
Да, это правильный ответ, если вы используете Bootstrap версии 5. - person Pawara Siriwardhane; 06.05.2021

Я использую [email protected]. Если вы столкнулись с этой проблемой в 2021 году, это связано с тем, что произошла миграция и изменилось имя класса.

.ml- * и .mr- * в .ms- * и .me- *.

аналогично было изменено имя многих других классов.

Ссылка для проверки миграции

Ссылка на миграцию Bootstrap

person confused_    schedule 07.05.2021
comment
это решило мою проблему ... спасибо ... - person Fun Tadka; 25.05.2021