【发布时间】:2017-07-08 06:15:00
【问题描述】:
我正在为仅使用 HTML 和 CSS 的页面制作导航栏。它应该看起来像这样,徽标设置包含div 的高度,然后将文本垂直居中在它旁边的其他divs 中。
它应该是什么样子:
我试图通过设置一些嵌套的弹性盒子来做到这一点。这个想法是:
- 容器 (
nav-holder) 会拉伸以适应最高的内容 - 第二个容器 (
nav-item) 都应该与其父容器一样高 - 第三个容器 (
nav-cont) 应该和它自己的内容一样高,并且应该在nav-item内部垂直居中
相反,我在nav-cont 内的徽标底部有一个奇怪的额外空间,我不知道它来自哪里。
看起来像这样:
真正的样子:
HTML 代码:
<div id="header">
<div id="nav-holder">
<div class="nav-item">
<div class="nav-cont"><img src="images/placeholder-logo.jpg"/></div>
</div>
<div class="nav-item">
<div class="nav-cont">Listings</div>
</div>
<div class="nav-item">
<div class="nav-cont">Services</div>
</div>
<div class="nav-item">
<div class="nav-cont">About</div>
</div>
<div class="nav-item">
<div class="nav-cont">Blog</div>
</div>
<div class="nav-item">
<div class="nav-cont">Contact</div>
</div>
</div>
</div>
CSS 代码:
#nav-holder {
background-color: blue;
display: flex;
}
.nav-item {
background-color: yellow;
display: flex;
align-items: center;
margin-right: 0.5em;
}
.nav-cont {
background-color: green;
}
尝试的修复:
- 检查是否为图像或一般
divs 设置了边距或填充。 - 在 StackOverflow 上最相似的已解决问题中查找信息(“CSS flexbox vertical/horizontally center image WITHOUT explicitely defined parent height”)
- 浏览了几个 flexbox 教程,看看是否有任何描述的类似问题,包括 GitHub 上的“Solved by Flexbox”和 Greg Smith 的“Dive into Flexbox”
【问题讨论】:
-
我认为您在子项上寻找
align-items: stretch。 -
已经试过了,但没有解决问题。这些项目伸展得很好,但包含徽标的那个伸展得太远了。
-
不要忘记内联元素得到基线对齐:Mystery white space underneath image tag
-
@Michael_B Bingo,回答了我的问题。我需要将图像设置为
display: block。