扩展父级 div 的宽度以适应其浮动子元素

6

我有一个父级 div,其中包含一些等大小的子 div 左浮动。我希望父级 div 根据子元素的宽度自适应宽度,即使这意味着溢出其容器。

是否有一种自然的 HTML/CSS 方法可以实现这一点?

示例(可拉伸的 div 最终将成为 180px 宽):

HTML:

<div id="stretchable-div">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    ...
</div

CSS:

.child {
   width: 60px;
   height: 60px;
   float:left;
}

你最终解决了如何做这个问题吗? - Jonathan Maddison
好的,看起来最简单的方法是使用JavaScript动态增加/减少容器元素的宽度,在具有溢出的父级元素中。 - Jonathan Maddison
3个回答

6
在这个例子中,可伸缩的div元素将突破其父级,并拉伸到其子元素。

实时演示

CSS

#parent{
    width:200px;
    height:180px; 
    background:red;
}

#stretchable-div{
    background:blue;
    position: absolute;
}

.child {
   width: 60px;
   height: 60px;
   float:left;
}

标记语言

<div id="parent">Im a parent
    <div id="stretchable-div">
        <div class="child">a</div>
        <div class="child">b</div>
        <div class="child">c</div>
        <div class="child">c</div>
        <div class="child">c</div>
        <div class="child">c</div>
        <div class="child">c</div>
    </div>
</div>

@Loktar- 谢谢你,但我有两个问题- 看看我修改后的示例:http://jsfiddle.net/seB5F/12/ 1) 当我添加更多元素或将绝对定位的div向右推时,元素开始包裹在框架边缘。2) 我还向父div添加了overflow:hidden,但仍然看到所有可伸缩的div。为什么我不能让可伸缩的div拉伸到宽度,并使用任何溢出隐藏?你能解释一下吗? - Yarin
好的,回答第一个问题,这是因为绝对定位会将元素从文档流中取出,这就是为什么溢出属性对可拉伸的div没有影响,将其更改为相对定位即可隐藏。 - Loktar
@Loktar- 你回答了我的问题,但我还有一个问题——我想隐藏溢出内容。为了做到这一点,我需要把容器的位置设置为相对位置,但这会导致内容换行。你有什么想法吗? - Yarin
嗯,我以为你想让内容无论如何都可以拉伸,即使超出其父级元素。现在你想要相反的效果,只拉伸到父级元素的宽度然后隐藏? - Loktar
我确实希望它们可以拉伸,但是我想要选择隐藏溢出或不隐藏的选项。 - Yarin
啊,好的,我明白了... 那是个棘手的问题,让我花一分钟时间来解决它。可能要把答案从我这里拿走,以防别人先想出更好的解决方案。 - Loktar

3

就像 @Pizzicato 的例子一样,但是使用 overflow:hidden 来清除父级 divhttp://jsfiddle.net/dSjv4/

有一篇关于定位和清除 div 的很棒的文章在 A List Apart 上,这里(在文章的末尾)。


@Nathan- 谢谢,但是你的示例不能让父级div溢出其容器。请参见http://jsfiddle.net/dSjv4/14/。 - Yarin

1

您可以为父元素添加display: inline-block;。为了在ie7中正常工作,您还需要使用display:inline;zoom:100%;

因此,您所需的可能是以下CSS:

#stretchable-div {
    background: none repeat scroll 0 0 red;
    display: inline-block;
    overflow: auto; /* clear the floats */
    *display:inline; /* ie7 hack even better use conditional comment */
    zoom:100%;
}

例子:http://jsfiddle.net/8JJSf/


@Sotiris- 谢谢,但是你的例子无法让父级 div 溢出其容器。请参见 http://jsfiddle.net/8JJSf/4/. - Yarin
@Yarin 正确,要让容器溢出,还需要为 #stretchable-div 设置 position:absolute - Sotiris
@Sotiris- 是的,那个方法可行,但你就不需要 display:block-inline 了,对吧? - Yarin
@Yarin 是的,在这种情况下不需要。 - Sotiris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接