保持浮动div在页面限制内

Øys*_*sen 0 html css

我不确定这是否可以在没有javascript的情况下完成,但我希望它有一个解决方案.考虑一下这个小提琴:http://jsfiddle.net/PPeYH/

* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
.content {
    border: 1px solid;
    min-height: 3em;
}
.container {
    max-width: 600px;
    margin: 0 auto;
    overflow: hidden;
    clear: both;
}
#placeholder-body {
    position: relative;
    border: 0;
}
.split-tile {
    float: left;
}
.split-left {
    width: 60%;
}
.split-left .content {
    margin-left: auto;
    margin-right: 0;
    max-width: 360px;
}
.split-right {
    width: 40%;
}
.split-right .content {
    margin-left: 0;
    margin-right: auto;
    max-width: 240px;
}
Run Code Online (Sandbox Code Playgroud)
<div><div class="content container">Header</div></div>
<div id="placeholder-body">
    <div><div class="content container">Some content</div></div>

    <div class="tile-1 split-tile split-left">
        <div class="content">60% width.</div>
    </div>
    <div class="tile-2 split-tile split-right">
        <div class="content">40%</div>
    </div>

    <div><div class="content container">Some content</div></div>
</div>
<div><div class="content container">Footer</div></div>
Run Code Online (Sandbox Code Playgroud)

您在此处看到的结构是RWD结构的简化版本.我们需要整个布局保持在它的边界内.如果向上或向下更改浏览器宽度,您将看到标记为"60%"和"40%"的div不符合其余div的边界.

"你为什么不把60%和40%的div包装在容器里?",你可能会问.那么,这里介绍的DOM结构是在已经很复杂的系统中使用CMS进行布局的.改变这一点需要的不仅仅是一点点重构.我将不得不忍受以他们的方式布置的瓷砖.

所以我的问题是这个; 有没有办法在中间div上实现60/40分割,这样它们将使用ONLY css保持布局其余部分的左右边缘?

更新: 我也不能将#placeholder-body约束到最大宽度,因为我的设计师希望我为结构中的某些div创建全宽背景颜色.

Krz*_*tof 5

如果你可以修改#placeholder-body样式,那么解决方案很简单:

#placeholder-body {
    max-width: 600px;
    margin: auto;
}
Run Code Online (Sandbox Code Playgroud)

工作样本:http://jsfiddle.net/PPeYH/1/

另一种可能性

.split-tile {
    margin: auto;
    max-width: 600px;
    width: 100%;
}
.split-left .content {
    width: 60%;
}
.split-right .content {
    margin-left: auto;
    width: 40%;
}
.split-left {
    height: 0;
}
Run Code Online (Sandbox Code Playgroud)

这里没有使用浮点数,但左侧标题的高度设置为0,但溢出是可见的,所以它看起来很好.问题是它的内容比正确的标题更长.您也可以设置负上边距split-right而不是将高度设置为0 split-left,但您必须知道确切的高度.

工作样本:http://jsfiddle.net/PPeYH/3/

除此之外,它可能是calc来自CSS3的媒体查询:

@media screen and (min-width: 638px) {
    .split-left {
        width: 360px;
        margin-left: calc(50% - 300px);
    }
    .split-left .content {
        width: 360px;
    }
    .split-right {
        width: 240px;
        margin-right: calc(50% - 300px);
    }
    .split-right .content {
        margin-left: 0;
        width: 240px;
    }   
}
Run Code Online (Sandbox Code Playgroud)

工作样本:http://jsfiddle.net/PPeYH/5/