【问题标题】:IE element width to min-contentIE 元素宽度到最小内容
【发布时间】:2014-04-18 18:46:17
【问题描述】:

我有以下容器,其中包含一个图像和一个文本元素。

<div class="container">
    <img id="image" src="http://dummyimage.com/200">
    <span class="text">
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
    </span>
</div>

理想的行为是 div 应该换行到图像的宽度,并因此保持文本正确包裹在下面。这也需要灵活,因为内容是动态的,并且事先不知道图像宽度。

您可以在 Firefox 和 Chrome 中使用 min-content 优雅地完成此操作。

.container {
    /*Other style stuff up here*/
    width: -moz-min-content;
    width: -webkit-min-content;
}

Jsfiddle of above - works perfectly in FF and Chrome.

我的问题: Internet Explorer 没有最小内容(或我能找到的等价物),这意味着决定容器宽度的是文本而不是图像。

在 Internet Explorer 中是否有任何类似的优雅方式来实现这一点?

如果不是,我如何重组 html/css 以允许跨浏览器兼容相同的行为?

【问题讨论】:

  • 需要支持哪些版本的IE?
  • 嗯,我想理想情况下都是:)。对 8+ 会非常满意,但至少是最新的。

标签: html css


【解决方案1】:

正如其他人所说,您可以使用-ms-grid-columns。您只需使用仅 IE 的 CSS 在您的内容周围添加一个 div。对于其他浏览器,CSS 会被忽略,并且不应影响您的布局(除非您将 CSS 应用于所有 div 元素,如 padding/margin 在这种情况下停止这样做)。

HTML

<div id="stupidIE">
    <div class="container">
        <img id="image" src="http://dummyimage.com/200" alt="">
        <span class="text">
            Cupcake ipsum dolor sit. 
            Amet chocolate carrot cake oat cake bear claw croissant.
        </span>
    </div>
</div>

CSS

.container 
{
    background-color: #EEEEEE;
    border: 1px solid #888888;
    padding: 0.3em;
    width: -moz-min-content;
    width: -webkit-min-content;
}
#stupidIE
{
    display: -ms-grid;
    -ms-grid-columns: min-content;
}

这是 JSFiddle:http://jsfiddle.net/LRYSp/

在 Chrome 和 IE11 中测试。但它应该可以在其他浏览器中使用。但是我认为它不会在 IE9 及以下版本中正确呈现。

【讨论】:

  • 我喜欢你的解决方案。我建议不要抨击 IE。与 Chrome 不同,它不会扫描您的整个文件系统。
  • @VladimirKocjancic 与其说是抨击不如说是在处理令人沮丧的非直觉元素。实际上,我在原始帖子发布几分钟后就看到了原始帖子,然后花了一个小时试图弄清楚如何正确使用 -ms-grid 及其元素。 MSDN 不是很有帮助,并且属性不像您期望的那样工作。例如,如果将 -ms-grid 和 columns 属性应用于容器,则必须将子元素放在包含 div 中,否则它们会重叠。但是即使子元素具有正确的宽度,容器也会拉伸到 100%。
  • @VladimirKocjancic 所以我不是在抨击 IE,我只是在发泄沮丧。在我与一个愚蠢的概念斗争了几个小时后,我称 chrome 愚蠢。
  • @Stack of Pancakes 我同意,IE 想要以自己的方式做事,这会迫使您将其视为问题。我在容器上弄乱了 ms-grid,但没有跨过将它应用到祖父母。它可以完美运行,并且需要对我先前存在的设置进行最少的更改,缺少“-ie-min-content”,这必须是最好的解决方案。
  • @StackofPancakes 我希望我能多次投票
【解决方案2】:

@Stack_of_Pancakes 解决方案的不足之处在于它添加了一个额外的 div,它是一个块元素并跨越整个宽度,而原始的 width:min-content 没有这个缺陷。 可以修复:

HTML:(完整)

<div class="container">
    <img id="image" src="http://dummyimage.com/200" alt="">
    <span class="text">
        Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
    </span>
</div>

CSS:

.container {
    background-color: #EEEEEE;
    border: 1px solid #888888;
    padding: 0.3em;
    width: -moz-min-content;
    width: -webkit-min-content;
    display: -ms-inline-grid;
    -ms-grid-columns: min-content;
}
.container > span:nth-child(2) 
{
    -ms-grid-row:2;
    display:inline-block;
}

http://jsfiddle.net/L28s7txr/6

【讨论】:

    【解决方案3】:

    有点jquery?

    $(function() {
        $('.container').width($('img#image').width());
    });
    

    FIDDLE

    【讨论】:

    • 我喜欢它并且它有效。如果我找不到纯 html/css 解决方案,那么我无法想象比这更干净的替代方案。
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多