Bootstrap - свернуть панель навигации, как только окно просмотра станет недостаточно широким?

В настоящее время моя навигационная панель оформлена так, чтобы ее фон «сжимался» до ширины содержимого, а не шире:

        <nav class = "navbar fw-bold h5 rounded-5 navbar-expand d-inline-flex">
            <div class = "container-fluid">
                <ul class = "navbar-nav">
                    <li class = "nav-item">
                        <NavLink class = "nav-link" :to = "{ name: 'Home' }">Home</NavLink>
                    </li>
                    [...]
                </ul>
            </div>
        </nav>

Поведение Bootstrap по умолчанию заключается в сворачивании навигационной панели с определенной предустановленной шириной в пикселях, например, 992 пикселя с .navbar-expand-lg:

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

Можно ли это сделать с помощью стиля Bootstrap? Похоже, что он предназначен только для работы с набором «точек останова» фиксированной ширины пикселей, а не для разрыва естественной ширины содержимого.

Итак, вас интересуют решения с использованием JavaScript?

Dimitris Maragkos 28.09.2022 13:25

Нет, я ищу чистый CSS.

Jez 28.09.2022 16:52
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
2
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

Из https://stackoverflow.com/a/36289507/3807365:

<nav class = "navbar fixed-top navbar-expand-sm">..</nav>
  • navbar-expand-sm = мобильное меню на экранах xs <576px
  • navbar-expand-md = мобильное меню на экранах sm <768px
  • navbar-expand-lg = мобильное меню на экранах md <992px
  • navbar-expand-xl = мобильное меню на экранах LG <1200px
  • navbar-expand = никогда не использовать мобильное меню
  • (без расширения класса) = всегда использовать мобильное меню

Вы также можете использовать пользовательскую точку останова (???px), добавив немного CSS.

Например вот 888px:

@media (max-width: 887.98px) {

    .navbar-expand-my>.container,
    .navbar-expand-my>.container-fluid,
    .navbar-expand-my>.container-sm,
    .navbar-expand-my>.container-md,
    .navbar-expand-my>.container-lg,
    .navbar-expand-my>.container-xl {
        padding-right: 0;
        padding-left: 0
    }
}

@media (min-width: 888px) {
    .navbar-expand-my {
        flex-flow: row nowrap;
        justify-content: flex-start
    }

    .navbar-expand-my .navbar-nav {
        flex-direction: row
    }

    .navbar-expand-my .navbar-nav .dropdown-menu {
        position: absolute
    }

    .navbar-expand-my .navbar-nav .nav-link {
        padding-right: .5rem;
        padding-left: .5rem
    }

    .navbar-expand-my>.container,
    .navbar-expand-my>.container-fluid,
    .navbar-expand-my>.container-sm,
    .navbar-expand-my>.container-md,
    .navbar-expand-my>.container-lg,
    .navbar-expand-my>.container-xl {
        flex-wrap: nowrap
    }

    .navbar-expand-my .navbar-nav-scroll {
        overflow: visible
    }

    .navbar-expand-my .navbar-collapse {
        display: flex !important;
        flex-basis: auto
    }

    .navbar-expand-my .navbar-toggler {
        display: none
    }
}

Наконец, если вы скомпилируете свои файлы sass (см. выше), вы можете добавить свою точку останова (или изменить другие) для этой переменной:

$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  custom: 888px,
  lg: 992px,
  xl: 1200px
) !default;

Дело в том, что я не хочу указывать конкретную ширину точки останова; Я хочу, чтобы он сломался, когда доберется до естественной ширины содержимого панели навигации.

Jez 23.09.2022 21:39

В этом случае я тоже подумал об этом, вы можете обнаружить с помощью javascript, а затем применить некоторые стили. Это то, что вас интересует?

IT goldman 23.09.2022 21:44

Не совсем, я хочу решение на чистом CSS. Я уверен, что это возможно.

Jez 23.09.2022 22:02

Невозможно делать то, что вы хотите, без использования JavaScript.

Dimitris Maragkos 26.09.2022 00:07

Я думаю, что это возможно только в том случае, если вы используете JavaScript рядом с кодом CSS. Насколько я знаю, это невозможно без использования JavaScript @Jez

Alex J 27.09.2022 10:47

Да, ок. Я полагаю, что нет способа CSS. Потребуется что-то вроде псевдокласса :would-overflow.

Jez 28.09.2022 17:11

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