Загрузочное, гибкое и гамбургерное меню на телефонах

#html #css #bootstrap-5

Вопрос:

просто обратите внимание в начале, что я НЕ являюсь разработчиком интерфейса, а только бэкендом.

У меня есть такой макет: https://codeply.com/v/nZU6s0EkvE

Прежде всего, я не уверен, должен ли я сделать это таким образом или, может быть, использовать сетку. Мне просто нужно было боковое меню и содержимое, чтобы получить 100% высоту. И flex был единственным вариантом, который работал без отображения полос прокрутки

Теперь, когда я уменьшаю размер экрана, возникают две проблемы:

  • контент больше не занимает 100%
  • боковое меню выходит наверх — на самом деле это не проблема, почему-то я этого хотел.

Теперь вопрос — как я могу решить первую проблему? И второй вопрос — что я должен сделать, чтобы показать меню гамбургеров на телефонах вместо этого бокового меню (вверх)?

Ответ №1:

Для ваших проблем с гибким интерфейсом:
вы вообще не включаете поведение гибкого интерфейса до небольшой точки останова с .d-sm-flex помощью .
Используйте .d-flex , чтобы включить для всех точек останова.
Вы хотите изменить направление сгиба в небольшой точке останова (начните со столбца и перейдите к строке).

             <div class="d-flex flex-column flex-sm-row h-100">
                <div class="bg-gray p-2">
                    Menu
                </div>
                <div class="flex-grow-1 bg-blue p-2">
                    Treść
                </div>
            </div>
 

Что касается использования кнопки «гамбургер» (технически это отдельный вопрос), ознакомьтесь с .navbar отзывчивым поведением и использованием .navbar-toggler внешнего контента. Если у вас возникнут проблемы с реализацией этого, вернитесь и отправьте новый вопрос.

Ответ №2:

Ладно, я смог это выяснить благодаря Арли Хикс.

 <div class="container-fluid p-0 h-100 bg-red">
    <div class="d-flex flex-column h-100">
        <nav class="bg-gray p-1">
            <ul class="nav">
                <li>Menu 1</li>
                <li>Menu 2</li>
            </ul>
        </nav>

        <div class="main flex-grow-1 bg-purple">
            <div class="d-flex flex-md-row flex-column h-100">
                <nav class="d-flex navbar-expand-md navbar-light bg-gray">
                    <div class="">
                        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
                            <span class="navbar-toggler-icon"></span>
                        </button>
                    
                        <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
                            <a class="nav-link active" aria-current="page" href="#">Home</a>
                        </div>
                    </div>
                </nav>
                <div class="flex-grow-1 bg-blue p-2">
                    Content
                </div>
            </div>
        </div>
    </div>


</div>
 

Обратите внимание, что эта вертикальная панель навигации не имеет класса .navbar. Это потому, что .класс navbar делает содержимое navbar вертикально центрированным. Так что, насколько я думаю, нужен только .d-flex (также присутствует в классе .navbar).