Как центрировать элементы списка с помощью flexbox?

Я пытаюсь создать панель навигации с заголовком слева и элементами списка по центру. Я использовал flexbox для горизонтального размещения ссылок. Затем я добавил margin: auto к ul, что переместило их влево, но не центрировало их симметрично. Я предполагаю, что ул больше не может двигаться. Я проверил другие подобные сообщения, но не мог понять, в чем проблема. Спасибо за ваше время.

HTML

* {
    box-sizing: border-box;
    padding: 0;
    margin: 0;
}

body {
    font-family: 'Open Sans', sans-serif;
    background: #fff;
    color: #333;
    line-height: 1.6;
    background: url('/img/showcase.jpg.jpg');
}


#navbar  {
    display: flex;
    justify-content: center;
    align-items: center;
    flex: 1;
    top: 0;
    width: 100%;
    height: 60px;
    background-color: rgba(10, 10, 10, 0.5);
}

#navbar ul {
    display: flex;
    justify-content: space-around;
    text-align: center;
    margin: 0 auto;
    padding: 0;
}

#navbar li {
    list-style: none;
    padding: 20px;
}
<nav id = "navbar">
        <div class = "logo">
            <h1>Welcome</h1>
        </div>
        <ul>
            <li><a href = "#">Home</a></li>
            <li><a href = "#">Home</a></li>
            <li><a href = "#">Home</a></li>
            <li><a href = "#">Home</a></li>
        </ul>
    </nav>

Пожалуйста, отредактируйте свой код, чтобы он включал только соответствующие проблемы

GalAbra 19.12.2020 15:49

Извините, но что вы подразумеваете под редактированием кода? Я уже понятия не имею, каковы соответствующие проблемы.

Akın Uçar 19.12.2020 15:55

ширина:100% до ул?

Temani Afif 19.12.2020 15:57

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

Akın Uçar 19.12.2020 15:58
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
4
3 334
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете удалить margin: 0 auto; из #navbar ul

Флексбокс в родительском контейнере ( #navbar ) уже центрирует ul. Добавление margin: 0 auto к нему после добавления flexbox ломает макет.

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}
body {
  font-family: 'Open Sans', sans-serif;
  background: #fff;
  color: #333;
  line-height: 1.6;
  background: url('/img/showcase.jpg.jpg');
}
#navbar {
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
  top: 0;
  width: 100%;
  height: 60px;
  background-color: rgba(10, 10, 10, 0.5);
}
#navbar ul {
  display: flex;
  justify-content: space-around;
  text-align: center;
  /* margin: 0 auto; REMOVE THIS LINE */
  padding: 0;
}
#navbar li {
  list-style: none;
  padding: 20px;
}
<nav id = "navbar">
  <div class = "logo">
    <h1>Welcome</h1>
  </div>
  <ul>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
  </ul>
</nav>

Кроме того, включение вашего логотипа в список может дать лучшие результаты:

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}
body {
  font-family: 'Open Sans', sans-serif;
  background: #fff;
  color: #333;
  line-height: 1.6;
  background: url('/img/showcase.jpg.jpg');
}
#navbar, li { /* added flex to li's so content stays vertically centered */
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
  top: 0;
  width: 100%;
  height: 60px;
  background-color: rgba(10, 10, 10, 0.5);
}
#navbar ul {
  display: flex;
  justify-content: space-around;
  text-align: center;
  /* margin: 0 auto; REMOVE THIS LINE */
  padding: 0;
}
#navbar li {
  list-style: none;
  padding: 0 20px; /* fixed vertical padding to 0 from 20px */
  background-color: transparent; /* Added for continuity with your design */
}
<nav id = "navbar">
  <ul>
    <li>
      <div class='logo'>
        <h1>Welcome</h1>
      </div>
    </li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
  </ul>
</nav>

Если вы хотите добавить пробел между логотипом и элементами списка, вы можете добавить margin-right: ( n ) к самому логотипу. См. ниже:

* {
  box-sizing: border-box;
  padding: 0;
  margin: 0;
}
body {
  font-family: 'Open Sans', sans-serif;
  background: #fff;
  color: #333;
  line-height: 1.6;
  background: url('/img/showcase.jpg.jpg');
}
#navbar, li { /* added flex to li's so content stays vertically centered */
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
  top: 0;
  width: 100%;
  height: 60px;
  background-color: rgba(10, 10, 10, 0.5);
}
#navbar ul {
  display: flex;
  justify-content: space-around;
  text-align: center;
  /* margin: 0 auto; REMOVE THIS LINE */
  padding: 0;
}
#navbar li {
  list-style: none;
  padding: 0 20px; /* fixed vertical padding to 0 from 20px */
  background-color: transparent; /* Added for continuity with your design */
}
.logo { /* Added space between logo and list items */
  margin-right: 5rem; /* you can add units in pixels as well if you would like */
}
<nav id = "navbar">
  <ul>
    <li>
      <div class='logo'>
        <h1>Welcome</h1>
      </div>
    </li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
  </ul>
</nav>

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

Удаление поля: 0 авто; from #navbar ul также удалил расстояние между логотипом и элементами списка и отцентрировал все на линии. Когда я пытался переместить логотип влево, он также сдвигал элементы списка вправо. Кроме того, если я включу свой логотип в список элементов, как можно будет разместить его отдельно слева?

Akın Uçar 19.12.2020 16:07

Если вы хотите увеличить расстояние между логотипом и элементами списка, вы можете добавить правое поле к логотипу. Я включаю в редактирование.

Lynel Hudson 19.12.2020 16:12

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

Akın Uçar 19.12.2020 16:33

Тогда вы не правильно скопировали мой код. Посмотрите на последний фрагмент кода к моему ответу. Весь мой код выше работает в браузере. Все выглядит сосредоточенным для меня - если нет, пожалуйста, укажите более подробно, чего вы пытаетесь достичь. Также вы можете использовать процент для поля вместо фиксированной ширины, такой как пиксели. Или вы даже можете добавить поле прямо в контейнер списка, а не прямо на логотип, если у вас возникли проблемы с вашим локальным кодом. Тем не менее, есть лучшие способы сделать то, что вы пытаетесь достичь. если у меня будет время, я перепишу все для вас.

Lynel Hudson 19.12.2020 16:46
Ответ принят как подходящий

Если я правильно понял ваш вопрос (пожалуйста, дайте мне знать), это то, что вам нужно:

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  background: #fff;
  background: url('/img/showcase.jpg.jpg');
  color: #333;
  font-family: 'Open Sans', sans-serif;
  line-height: 1.6;
}

#navbar,
#navbar ul {
  display: flex;
}

#navbar {
  align-items: center;
  background-color: rgba(10, 10, 10, 0.5);
  height: 60px;
  justify-content: space-between;
}

#navbar ul {
  justify-content: center;
  width: 100%;
}

#navbar li {
  list-style: none;
  margin: 0 10px 0 10px;
}

.logo {
  margin-left: 20px;
}
<nav id = "navbar">
  <div class = "logo">
    <h1>Welcome</h1>
  </div>
  <ul>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
    <li><a href = "#">Home</a></li>
  </ul>
</nav>

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

Akın Uçar 20.12.2020 19:55

@Akın Uçar Помогите нам помочь вам: попробуйте создать образ того, чего вы хотите достичь. Это единственный способ.

AbsoluteBeginner 20.12.2020 20:13

@ Akın Uçar Я вижу все серое. Нет изображения.

AbsoluteBeginner 20.12.2020 21:42
imgbox.com/SRSxLoE2 не могли бы вы попробовать это, пожалуйста?
Akın Uçar 20.12.2020 23:05

@ Akın Uçar Я отредактировал свой ответ. Дайте мне знать.

AbsoluteBeginner 21.12.2020 09:10

Элементы списка по-прежнему выглядят так, как будто они не центрированы. Однако удаление логотипа с панели навигации центрирует элементы списка именно так, как я хочу. Вот изображение, показывающее, как это сделать. imgbox.com/ZQZ2BUbz

Akın Uçar 21.12.2020 21:15

@Akın Uçar Если вы посмотрите фрагмент кода на полной странице, вы заметите, что список идеально отцентрирован: то есть между логотипом и правой стороной панели навигации такое же пространство (как на вашем первом изображении). Вот как работает флексбокс. Очевидно, что если вы удалите логотип, список будет центрирован относительно всей панели навигации,

AbsoluteBeginner 21.12.2020 21:50

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