如何在导航栏中将分组元素水平居中

时间:2018-11-13 18:52:59

标签: html css navigationbar

我正在构建一个具有很多选项和特殊部分的导航栏。 我曾与Twitter Bootstrap合作,但是很难开发。 导航html标记将3个部分分为3个div(左,中,右)。 我在左侧div中将公司的文本和徽标水平居中居中而在右侧div中定位导航项时遇到困难。 我需要在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 :(得分:1)

给出.left-navbar-使用display:flex;进行水平和垂直居中

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

}

还,您想要导航栏的正确部分吗?

答案 1 :(得分:1)

您可以使用flexbox实现这一目标

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

Here您有一个Codepen,请告诉我是否有帮助!

答案 2 :(得分:1)

Flex-box是您要在这里使用的。将display: flex添加到.navbar,然后将flex-grow: 1;添加到中间部分。这基本上是说“使此元素跨越flex容器中的剩余空间。另外,您的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;
}