【问题标题】:Nested flex box with image has extra height [duplicate]带有图像的嵌套弹性框有额外的高度[重复]
【发布时间】: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/horizo​​ntally 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

标签: html css flexbox


【解决方案1】:

我查看了您的代码并更改了一些 CSS 以尝试了解您想要什么。

#nav-holder {
    background-color: blue;
    display: flex;
}

.nav-item {
    background-color: yellow;
    display: flex;
    align-items: center;
    margin-right: 0.5em;
    padding: 10px;
}

.nav-cont {
    background-color: green;
    width: 70px;
    text-align: center;
}

这是一个 Jsfiddle:

https://jsfiddle.net/r3msjtnL/

您必须将 nav-cont div 更改为像素并将文本浮动在中心,因此它不是不平衡的。另外,我添加了一个填充来在您的 nav.items 周围腾出空间。

更新:

如果您不希望将按钮固定到特定像素,请尝试将宽度更改为百分比 (%)!

如果这有助于投票!

【讨论】:

  • 你的链接失效了。
  • 抱歉,不行。首先,我实际上并不想强制我的所有项目都具有相同的宽度——带有徽标的项目应该能够拉伸以填充徽标。 (现在效果很好。)但即使我删除了填充,它仍然没有摆脱底部的“额外”绿色位。 (看起来就像在 JS 小提琴中一样,因为图像不存在并且不会以相同的方式拉伸 &lt;div&gt;
  • 无论如何你可以链接我你的标志的 URL,我在 Jsfiddle 上玩弄它。
  • @L.S 实际上 @Michael_B 在 cmets 中提供了原始解决方案。我只需要将图像设置为display: block
猜你喜欢
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多