Элементы навигации не совсем выровнены по вертикали

У меня есть навигационное меню с логотипом, соответствующим именем, вертикальной рамкой в ​​качестве разделителя, а также собственно навигационными ссылками. Хотя логотип и соответствующее имя кажутся правильно выровненными, вертикальная граница и навигационные ссылки - нет. Вместо этого они отличаются примерно на 5 пикселей (я проверял в Photoshop).

Мой вопрос: Как мне убедиться, что все элементы навигации правильно выровнены, то есть они расположены по центру по вертикали внутри панели навигации?

body {
  margin: 0;
}


/* Limit container width to 1200px */

.container {
  max-width: 1200px;
  margin: 0 auto;
}

nav {
  background-color: #414b55;
}

.navigation {
  overflow: hidden;
}

.logotype img {
  margin: 10px 10px 10px 15px;
}

.logotype p {
  display: inline;
  vertical-align: middle;
  font-weight: 700;
  font-size: 24px;
}

.divider {
  display: inline;
  border-left: 1px solid #ffffff;
  margin-left: 30px;
  margin-right: 20px;
}

.navigation a {
  display: inline;
  color: #ffffff;
  text-align: center;
  text-decoration: none;
  vertical-align: middle;
}

.item {
  padding: 15px 15px;
  font-size: 18px;
  font-weight: 700;
}

.navigation .icon {
  display: none;
}
<body>
  <nav>
    <div class = "container">
      <div class = "navigation" id = "script-target">
        <a href = "index.html" class = "logotype">
          <img src = "img/logotype.svg" alt = "logotype" height = "40px" style = "vertical-align: middle">
          <p>Exception</p>
        </a>
        <div class = "divider"></div>
        <a href = "index.html" class = "item">Select</a>
        <a href = "index.html" class = "item">Select</a>
        <a href = "index.html" class = "item">Select</a>
        <a href = "index.html" class = "item">Select</a>
        <a href = "javascript:void(0);" class = "icon" onclick = "collapse()"><img src = "img/icon.svg" alt = "menu" height = "26px"></a>
      </div>
    </div>
  </nav>
</body>

Обновлять: Я изменил свойства отображения, и теперь все элементы навигации правильно выровнены. https://jsfiddle.net/MihkelPajunen/4zjbgLLk/4/

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

Ответы 1

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

https://jsfiddle.net/nb4o9p84/

.divider {
    display: inline;
    border-left: 1px solid #ffffff;
    margin-left: 30px;
    margin-right: 20px;
        padding-bottom: 5px;
}

Обновлено: поскольку вы можете захотеть выровнять все элементы (а не только ссылки в меню), вот обновленная рабочий пример со всеми элементами, выровненными по полям и устранением «встроенного»:

https://jsfiddle.net/yLctgbcw/

.logotype img {
     margin: 7px 10px 12px 15px;
}

.logotype p {
    display: inline-block;
    vertical-align: middle;
    font-weight: 700;
    font-size: 24px;
    margin-top: -5px;
    margin-bottom: 0;
}

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

Если вы добавите "margin-right: -4px;" в классе .item он оставит 1px пространства между 1 из 4, и промежуток будет перемещаться по мере изменения размера вашего окна: https://jsfiddle.net/42j3e8jp/

Если вы добавите -5 пикселей, пробел исчезнет (но, скорее всего, все еще будет разница в 1 пиксель):

https://jsfiddle.net/8udb4eqn/

Честно говоря, это одна из тех проблем, которую никто никогда не заметит, если вы не добавите красный фон к a, чтобы действительно показать проблему. Лично я бы либо реорганизовал ваш код, чтобы использовать «традиционную» настройку меню, которая используется такими библиотеками, как Bootstrap: https://getbootstrap.com/docs/3.3/examples/navbar/

<ul>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
</ul>

Или я бы просто забыл о разнице в 1 пиксель и двинулся дальше, так как определение проблемы может занять гораздо больше времени, чем рефакторинг кода. Я узнал, что в CSS / HTML есть много маленьких причуд (особенно в браузерах), поэтому, если разница в 1 пиксель не заметна, это обычно не стоит усилий.

Это устранило мою проблему с вертикальной рамкой, но навигационные ссылки по-прежнему не выровнены должным образом. jsfiddle.net/MihkelPajunen/4zjbgLLk/1

user9621840 23.04.2018 22:09

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