Как горизонтально центрировать сгруппированные элементы внутри панели навигации - PullRequest
0 голосов
/ 13 ноября 2018

Я строю панель навигации, которая имеет много опций и специальных разделов. Я работал с Twitter Bootstrap, но его сложно развивать. HTML-тег nav содержит 3 раздела, сгруппированных в 3 деления (слева, по центру и справа). У меня возникают трудности с горизонтальным центрированием текста и логотипа компании в левом блоке, якоря с элементами навигации в правом блоке. Мне нужно, чтобы высота панели навигации была установлена ​​в CSS, а не вычислять высоту на основе дочерних элементов.

Это HTML:

.navbar {
  overflow: hidden; /* Clips from content if it is bigger than the parent element */
  background-color: #333;
  position: fixed; /* Position of the navbar is fixed */
  top: 0;
  width: 100%;
  height: 50px;
}

.left-navbar {
  float: left;
  background: cadetblue;
  width: 230px;
  height: 100%;
  text-align: center;
}

.right-navbar {
   float: right;
  background: maroon;
  height: 100%; 
    /* float: right;
    position: absolute;
    top: 50%; right: 0%;
    transform: translate(-50%,-50%);
    background: gold;
    padding: 1.5rem; */
}


.center-navbar {
    position: absolute;
    top: 50%; left: 50%;
    transform: translate(-50%,-50%);
    background: gold;
    padding: 1rem;
}

.left-navbar strong {
  color: red;
  padding: 10px 10px;
  display:inline-block;
  text-align: center;
  vertical-align: center;
}

.left-navbar img {
  width: 32px;
  height: 32px;
  padding: 10px 10px;
}

.navbar a {
  float: right; /* Orientation of the element in the parent element */
  display: block; /* All over top left right bottom it is a block - element has block/padding all over the embedded element */
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px; /* 14px top and bottom, 16px right and left */
  text-decoration: none; /* Could be underline, overline, line-through */
  font-size: 17px;
}

/* Apply only for anchors inside the navbar class */
.navbar a:hover {
  background: #ddd;
  color: black;
}

input[type="text"]{ padding: 5px 5px; line-height: 28px; }
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<nav class="navbar">
  <div class="left-navbar">
    <strong>Company</strong>
    <img src="https://cdn0.iconfinder.com/data/icons/social-flat-rounded-rects/512/newsvine-512.png"></p>
  </div>
  <div class="center-navbar">
      <input type="text" id="name" name="name" required height="45px;"
       minlength="4" maxlength="40" size="40">
  </div>
  <div class="right-navbar">
    <a href="#home">Home</a>
    <a href="#news">News</a>
    <a href="#contact">Contact</a>
  </div>
</nav>

Любая рабочая скрипка с лучшими практиками идеально подходит для меня.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вы можете использовать flexbox для достижения этого

.right-navbar, .left-navbar{
  display: flex;
  justify-content: center;
  align-items: center;
}

Здесь у вас есть кодекс, дайте мне знать, если это поможет!

0 голосов
/ 13 ноября 2018

Flex-box - это то, что вы захотите использовать здесь.Добавьте display: flex к .navbar, а затем добавьте flex-grow: 1; к центральной части.По сути, это говорит: «заставьте этот элемент занимать оставшееся пространство в гибком контейнере.Кроме того, ваши height: 100% были ненужными, поэтому я удалил их.

.navbar {
  overflow: hidden; /* Clips from content if it is bigger than the parent element */
  background-color: #333;
  position: fixed; /* Position of the navbar is fixed */
  top: 0;
  width: 100%;
  height: 50px;
  display: flex;
}

.left-navbar {
  background: cadetblue;
  width: 230px;
  text-align: center;
}

.right-navbar {
  background: maroon;
}

.center-navbar {
  background: gold;
  padding: 1rem;
  flex-grow: 1;
}

input[type="text"]{
  padding: 5px 5px;
  line-height: 28px;
  width: 100%;
  box-sizing: border-box;
}
0 голосов
/ 13 ноября 2018

Give .left-navbar - горизонтальное и вертикальное центрирование с дисплеем: flex;

 .left-navbar {
display: flex;
float: left;
background: cadetblue;
width: 230px;
height: 100%;
text-align: center;
justify-content: center;
align-items: center;

}

Кроме того, как вы хотите правую часть панели навигации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...