在 FireFox 中高度为 100% 的内联块包含图像折叠

Posted

技术标签:

【中文标题】在 FireFox 中高度为 100% 的内联块包含图像折叠【英文标题】:Inline-block conainting image with height 100% collapsing in FireFox 【发布时间】:2014-09-23 19:32:43 【问题描述】:

我对仅在 FireFox (cur.ver. 31) 中可见的 CSS 有疑问。 我正在尝试制作一个响应式布局,其中有一排图像(带有链接),它们居中,并且具有与视口宽度相同的高度和比例。我的方法是创建一个具有固定纵横比的容器,并将图像放在里面(每个图像都放在一个单独的<a> 标签内),将它们居中,并将它们的高度缩放到容器高度。它工作得很好,除了在 FireFox 中。 为了实现这一点,我将display: inline-block; height: 100% 应用到<a> 标签和height: 100%; width: auto<img> 标签。由于某些(未知)原因,FF 没有正确计算<a> 标签的宽度(当它包含上述<img> 标签时)并且它水平折叠。结果是,所有宽度为 0 的 <a> 都彼此非常靠近(仅由空格分隔),并且图像彼此重叠。我在 <a> 标签上使用 display: block; float: left; 得到相同的结果。

CSS

.container-ratio 
    width: 100%;
    height: 0;
    position: relative;
    padding-bottom: 10%;
    background: #ddd;

.container-inner 
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: #ddf;
    text-align: center;

.block 
    display: inline-block;
    height: 100%;
    background: #f00;

.block img 
    height: 100%;
    width: auto;
    display: block;


HTML

<div class="container-ratio">
    <div class="container-inner">
        <a class="block">
            <img src="http://placehold.it/100x80/42bdc2/FFFFFF&text=No1">
        </a>
        <a class="block">
            <img src="http://placehold.it/150x80/242bdc/FFFFFF&text=No2">
        </a>
        <a class="block">
            <img src="http://placehold.it/200x80/c242bd/FFFFFF&text=No3">
        </a>
    </div>
</div>

【问题讨论】:

【参考方案1】:

我认为这就是你想要做的。 Demo 您在 .block 上没有宽度,在 .block img 上没有自动宽度。 必须是百分比。

.container-ratio 
    width: 100%;
    height: 0;
    position: relative;
    padding-bottom: 10%;
    background: #ddd;

.container-inner 
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: #ddf;
    text-align: center;

.block 
    display: inline-block;
    width:20%;
    height: 100%;
    background: #f00;

.block img 
    height: 100%;
    width:100%;
    display: block;


【讨论】:

我也有同样的问题。在.block 上添加width: 20%; 会强制每个图像的宽度正好为20%,高度为100%。如果每个图像具有相同的比例,就可以了。否则它会拉伸它们。想要的行为(在 Chrome 和 Safari 上测试和工作)是强制高度并让图像采用正确显示所需的宽度。【参考方案2】:

问这个问题已经快两年了,Firefox 仍然表现出这种行为。 因此,对于处于相同情况的任何人,这里是 solution(仅在 Chrome 49.0 和 Firefox 45.0.1 上测试过)。

编辑:

最初,我使用内联包装器 div 和两个图像实例,其中一个没有显示,仅用作虚拟对象。看来这不是必需的,可以看到here。

总而言之,您似乎不能在 Firefox 中以这种方式使用 inline-block,但您需要做的就是将锚点和图像保留为内联元素。只要锚的父元素是块级元素而不是 inline-block,并且指定了它的高度,那么你就会得到预期的结果。

如果出于某种原因确实需要 inline-block,我不知道如何解决这个问题。

注意:

注意 .block 类上的“font-size: 0;”,用于删除图像之间的空格。如果没有这个,图像会被类似于链接的空格分隔。如果图像之间需要一些空间,那么像小提琴中那样添加一些右边距或左边距将是一个解决方案。

此外,虽然 .block 类名不再合适,但我将其保留为与 OP 保持一致。

修改后的 CSS

.container-ratio 
    width: 100%;
    height: 0;
    position: relative;
    padding-bottom: 10%;
    background: #ddd;

.container-inner 
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: #ddf;
    text-align: center;

.block 
    font-size: 0;

.block img 
    height: 100%;
    margin-right: 1%;

【讨论】:

以上是关于在 FireFox 中高度为 100% 的内联块包含图像折叠的主要内容,如果未能解决你的问题,请参考以下文章

Div 100% 高度适用于 Firefox,但不适用于 IE

如何在 Firefox 中制作包含 div 的 iframe 100% 高度?

Firefox 100% 高度和自动滚动 div 问题

带有 viewBox 和宽度的 SVG 在 IE 中无法正确缩放高度

Flex 基础 100% 在列 flexbox 中:Firefox 中的全高,而不是 Chrome

firefox 浏览器高度可以设为100%让其自适应宽度吗?