【问题标题】:Make child div text content NOT expand its parent fixed-positioned div's width使子 div 文本内容不扩展其父固定位置 div 的宽度
【发布时间】:2013-10-25 16:54:57
【问题描述】:

我正在制作一个弹出窗口。它的结构很简单,如下:

<div class = "popup">
    <div class = "upper">
        <img src = "http://www.tapeta-mis-galazki-koala.na-pulpit.com/pokaz_obrazek.php?adres=mis-galazki-koala&rozdzielczosc=128x128" />
    </div>
    <div class = "description">This is a very interesting description of what you can see above.</div>
</div>

风格

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
}
.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
    display: inline-block;
}
.popup .upper img {
    display: block;
}

这里有一个fiddle 应用了代码。

如您所见,div.popup 的位置与body 相同。

我想要实现的是使 div.description NOT 在包含大量文本时扩展其父 div.popup 宽度,而不是将文本包装成多行并且宽度为div.popup。 div.popup 宽度应由div.upper 宽度及其内容决定。换句话说,我的意思是让div.description 的宽度AT MOST 为div.upper 的宽度,无论其(div.description 文本内容)如何。

编辑

有个小难点:图片内容不是静态的,可能会动态变化,所以宽度不是恒定的。

这甚至可以通过 CSS 实现吗?

【问题讨论】:

  • 看起来你想计算出image 的宽度,然后将该宽度添加到固定元素.popup
  • 这正是我忘记提到的:图像内容及其宽度可能会有所不同:(

标签: css html


【解决方案1】:

http://jsfiddle.net/de6fr/1/ - 如何修复的基本示例


您基本上将弹出窗口用作容器,这意味着如果您想保持其宽度,那就是您必须做的事情。我将max-width 属性与.popup 一起使用,如下所示:

.popup {
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    display: table;
    width: 1px;
}
.popup > div { 
    display: table-row;
}

.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
}
.popup .upper img {
    display: block;
}

更新 - 灵活

http://jsfiddle.net/de6fr/4/

使其灵活的解决方法是使用CSS hack,这基本上将元素的性质更改为table

CSS 的本质(层叠 样式表)意味着如果不涉及一些疯狂的想法,很难让父 DIV 获得子 div 的大小。但是,按照以下代码,没有什么可以阻止宽度非常小的“表格”:

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    display: table;
    width: 1px;
}
.popup .upper {
    min-width: 100px;
    min-height: 100px;
    border: 1px solid;
    padding: 5px;
    display: table-row;
}
.popup .upper img {
    display: block;
}
.popup .description {
    display: table-row;
}

【讨论】:

  • 非常感谢,因为我忘记了我刚刚通过编辑添加到我的问题中的最重要的事情。我希望它仍然能够以我想要的方式工作。
  • 没有收到关于您的编辑的通知,真遗憾。仍然令人印象深刻的是它的工作原理:D 但它是人们称之为“跨浏览器”的东西吗?我正在做的是针对多个浏览器,包括较旧的浏览器。
  • 没问题!表格是人类已知的最古老的 HTML 标签,所以我想这是一个问题,即旧版浏览器是否支持显示:CSS 中的表格。这是some info关于这个:Note: The values "inline-table", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-row", "table-row-group", and "inherit" are not supported in IE7 and earlier. IE8 requires a !DOCTYPE. IE9 supports the values.
  • 那么我可以说这已经足够了,因为我拒绝 ie7 和更低的用户。再次感谢您的帮助:D
  • 没问题的哥们!如果您需要更多帮助,请尽管询问!
【解决方案2】:

你还没有定义固定元素的宽度,所以给你的固定元素添加一些宽度

.popup
{
    position: fixed;
    left: 50px; 
    top: 50px;
    border: 1px solid;
    background: #fff;
    padding: 10px;
    box-shadow: 0 0 5px #000;
    width: 100%;
}

here is the demo

【讨论】:

    【解决方案3】:

    将 CSS 属性添加到您的弹出类并给它一个宽度

    .popup
    {
        position: fixed;
        left: 50px; 
        top: 50px;
        border: 1px solid;
        background: #fff;
        padding: 10px;
        box-shadow: 0 0 5px #000;
        overflow:scroll;
        width:400px;
    }
    

    【讨论】:

    • 卷轴不能说服我,因为它需要看起来优雅。还有一点我忘了说,图像是动态的。
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 2013-07-19
    • 2011-08-17
    • 1970-01-01
    • 2017-01-27
    • 2011-01-21
    • 2015-04-23
    • 2012-08-17
    相关资源
    最近更新 更多