Как равномерно распределить элементы на панели навигации

Я пытаюсь центрировать логотип на панели навигации, но он всегда смещается влево. Есть ли способы исправить эту проблему с помощью классов начальной загрузки?

Панель навигации включает выпадающий переключатель слева, логотип в центре и две кнопки (войти и создать учетную запись) справа. Я пробовал различные попытки с маржинальным левым, mx-auto и абсолютным позиционированием, но ни одна из них не сработала, и мне нужно решение, которое будет работать, когда экран свернут.

HTML

<div class = "pos-f-t">
    <div id = "outter" style = "width:100%">
        <nav id = "mainnavbar" class = "navbar sticky-top navbar-dark bg-dark">
          <button class = "navbar-toggler" type = "button" data-toggle = "collapse" data-target = "#navbarToggleExternalContent" aria-controls = "navbarToggleExternalContent" aria-expanded = "false" aria-label = "Toggle navigation">
            <span class = "navbar-toggler-icon"></span>
          </button>
          <h3 id = "logo">Logo</h3>
          <form class = "form-inline my-2 my-lg-0">
            <b-link to = "/login"><b-button id = "login" class = "navbarbutton" variant = "outline-success">Log In</b-button></b-link>
            <b-link to = "/create"><b-button class = "navbarbutton" variant = "outline-success">Create Account</b-button></b-link>
          </form>
        </nav>
    </div>
<!--...#navbarToggleExternalContent-->
</div><!--end pos-f-t-->

CSS

#logo{
 /* margin-left: 10%;*/
  margin-bottom: 0;
  padding-bottom: 3px;
  color: white;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}

#login{
  margin-right: 10px;
}

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

Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
0
369
3

Ответы 3

Вы всегда можете использовать padding-left или padding-right и поиграться с этим. Что мне всегда нравится делать, так это использовать position:absolute, и поэтому я могу использовать коды top: "number" "px"right;left:, вам просто нужно будет поиграть с номером, пока вы не получите его правильно. Я тоже новичок, поэтому не могу много вам рассказать.

Пробовал уже это решение. Абсолютное позиционирование решит проблему, пока ширина экрана не изменится. Как только я его сверну, он в конечном итоге будет перекрывать другие элементы на панели навигации.

Noam Suissa 14.01.2019 01:43

Из-за flexbox элемент посередине сместится влево, если места недостаточно из-за крайнего правого элемента.

Чтобы центрировать свой элемент, вы все равно можете использовать position: absolute и position: relative для родительского элемента, как показано в приведенном ниже фрагменте.

Используйте это с осторожностью, поскольку элементы будут просто перекрываться, если ширина окна слишком мала.

#logo {
  /* margin-left: 10%;*/
  margin-bottom: 0;
  padding-bottom: 3px;
  color: white;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}

#login {
  margin-right: 10px;
}

nav {
  position: relative;
}

nav h3 {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel = "stylesheet" />
<div class = "pos-f-t">
  <div id = "outter" style = "width:100%">
    <nav id = "mainnavbar" class = "navbar sticky-top navbar-dark bg-dark">
      <button class = "navbar-toggler" type = "button" data-toggle = "collapse" data-target = "#navbarToggleExternalContent" aria-controls = "navbarToggleExternalContent" aria-expanded = "false" aria-label = "Toggle navigation">
            <span class = "navbar-toggler-icon"></span>
          </button>
      <h3 id = "logo">Logo</h3>
      <form class = "form-inline my-2 my-lg-0">
        <b-link to = "/login">
          <b-button id = "login" class = "navbarbutton" variant = "outline-success">Log In</b-button>
        </b-link>
        <b-link to = "/create">
          <b-button class = "navbarbutton" variant = "outline-success">Create Account</b-button>
        </b-link>
      </form>
    </nav>
  </div>
  <!--...#navbarToggleExternalContent-->
</div>
<!--end pos-f-t-->

Полезно, но я стараюсь избегать этого решения и ищу более динамичный подход с использованием bootstrap4. Как вы упомянули, дисплей самого маленького размера приведет к тому, что логотип будет перекрывать кнопки справа, что нежелательно.

Noam Suissa 14.01.2019 01:58

Подобные проблемы возникают всегда, если для элементов недостаточно места. Обычно для этого используется медиа-запросы. Таким образом, вы можете отображать элементы по-разному для разных размеров просмотра.

jcal 14.01.2019 02:02

вы можете попробовать поместить гамбургер, логотип и кнопки в отдельные блоки div.

<html>
  <head>
    <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity = "sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin = "anonymous">
  </head>


  <body>
    <nav class = "navbar sticky-top navbar-dark bg-dark">
      <div class = "col-md-4 col-sm-4">
        <button class = "navbar-toggler" type = "button" data-toggle = "collapse" data-target = "#navbarToggleExternalContent" aria-controls = "navbarToggleExternalContent" aria-expanded = "false" aria-label = "Toggle navigation">
          <span class = "navbar-toggler-icon"></span>
        </button>
      </div>

      <div class = "col-md-4 col-sm-4 text-center">
        <h3>Logo</h3>
      </div>

      <div class = "col-md-4 col-sm-4">
        <form class = "text-right">
          <a class = "btn btn-primary">Login</a>
          <a class = "btn btn-primary">Create</a>
        </form>
      </div>
    </nav>
  </body>
</html>

Редактировать: Вы можете добавить col-md-4 или col-lg-4 или col-anyScreenSize-4 к каждому div ...

Никаких изменений нет.

Noam Suissa 14.01.2019 02:04

Что ж, вы можете добавить col-md-4 или col-lg-4 или col-anyScreenSize-4 к каждому div, текстовый центр к логотипу и текст справа к форме справа ..

Rupert Raphael Amodia 14.01.2019 02:17

Сетка не должна использоваться внутри панели навигации. Навбар имеет свой собственный поддерживаемый контент.

Zim 14.01.2019 11:46

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