0

我有一个三列布局 - 左、中和右。

<div id="content-area" class="clearfix">

    <div id="content-left"><img src="fileadmin/billeder/logo.jpg" width="180" height="35" alt=""></div>

    <div id="content-middle"><f:format.html>{content_middle}</f:format.html></div>

    <div id="content-right">
        <f:format.raw>{navigator}</f:format.raw>
        <f:format.raw>{content_right}</f:format.raw>
    </div>

</div>

有了这个 CSS

#all-wrapper {
    width: 960px;
    margin: 0 auto;
}

#content-area {
    padding: 10px 0;
    margin: 5px auto;
}

#content-left {
    float: left;
    width: 180px;
    min-height: 400px;
}

#content-middle {
    width: 600px;
    text-align: left;
    padding: 0 10px;
    line-height: 20px;
}

#content-right {
    float: right;
    min-width: 180px;
    min-height: 200px;
    text-align: left;
}

左边是180px,中间是600px,右边是180px,就是960px的布局,像这样。

http://jsfiddle.net/kxuW6/

在大多数情况下,这可以作为预期,但我希望中间列根据右列中的内容具有某种灵活的宽度。我在右列中放置了一个宽度为 360 像素的图像,中间列将是 420 像素宽。

我的问题是宽度超过 180 像素的图像,fx。360px,将打破列的浮动,按照这个小提琴

http://jsfiddle.net/5hNy5/

我希望它像这个小提琴一样,但中间列没有固定宽度。

http://jsfiddle.net/Eqwat/

4

3 回答 3

1

使用display: table-cell而不是浮动...

如果您支持更现代的浏览器,您可以尝试:

#content-area {
    width: 960px;
    padding: 10px 0;
    margin: 5px auto;
    display: table;
    border: 1px dashed blue;
}
#content-left {
    display: table-cell;
    border: 1px dotted blue;
    vertical-align: top;
    width: 180px;
    height: 200px;
}
#content-middle {
    display: table-cell;
    border: 1px dotted blue;
    vertical-align: top;
    text-align: left;
    padding: 0 10px;
    line-height: 20px;
}
#content-middle p {
    margin-top: 10px;
}
#content-right {
    display: table-cell;
    border: 1px dotted blue;
    vertical-align: top;
    width: 180px;
    height: 200px;
    text-align: left;
}

表格单元格的宽度值就像一个最小值,因此如果您将图像插入其中一个,左右列将扩展,而中间列将调整以占据剩余的宽度。

参见演示:http: //jsfiddle.net/audetwebdesign/V7YNF/

于 2013-10-28T15:14:20.273 回答
1

应该解决上述问题的最短形式:

HTML:

<div class="area">
    <div class="side"></div>
    <div>Some content here</div>
    <div class="side"></div>
</div>

CSS:

<!-- language: CSS -->

.area {
    width: 100%;
    display: table;
}
.area > *{
    display:table-cell;
}

.side {
    width: 100px;
    background-color:gray;
}

看到这个小提琴

于 2014-04-22T17:47:06.373 回答
0

如果您可以对列的源顺序进行改组,则可以降级#content-middle到底部并display: block给出overflow: hidden.

标记:

<div id='all-wrapper'>
    <div id="content-area" class="clearfix">
        <div id="content-left"></div>
        <div id="content-right"></div>
        <div id="content-middle"></div>
    </div>
</div>

CSS

#all-wrapper {
    width: 960px;
    margin: 0 auto;
    }

#content-left {
    float: left;
    width: 180px;
    min-height: 400px;
    }

#content-middle {
    display: block;
    overflow: hidden; 
    }

#content-right {
    float: right;
    min-width: 180px;
    min-height: 200px;
    }

现在,当右列的宽度发生变化时,中间列将占用可用空间。

演示:http ://dabblet.com/gist/7200659

必读: http: //www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/

于 2013-10-28T17:13:19.330 回答