爲了避免使用JavaScript解決方案以及僅使用CSS和HTML,我所能想到的最好的方法是對列使用類名,並重新排序您的HTML以使最右邊的列是先在HTML:
<div class="wrap" style="width:500px">
<div class="col right">Right Column</div>
<div class="col left">Left column</div>
<div class="col middle">Middle column</div>
</div>
<div class="wrap" style="width:500px">
<div class="col left">Left column 2</div>
<div class="col middle">Middle column 2</div>
</div>
隨着CSS相鄰同胞選擇器,firstSibling + secondSibling
,這可以用於修改中間列的寬度:
.wrap {
width: 500px;
margin: 1em auto;
overflow: hidden;
}
.left,
.right {
width: 100px;
background-color: #ffa;
}
.middle {
width: 400px;
background-color: #f90;
}
.left,
.middle {
float: left;
}
.right {
float: right;
}
div.right + div.left + div.middle {
width: 300px;
}
JS Fiddle demo。
如果浮動.middle
柱右,而不是左如前面的例子中,那麼就可以簡化相鄰同胞選擇器,和HTML是,有效地,直觀地反轉(也就是稍微容易明白/與工作比上面的例子,其中兩列來先,以相反的順序,然後中間列來在端部),得到:
<div class="wrap" style="width:500px">
<div class="col right">Right Column</div>
<div class="col middle">Middle column</div>
<div class="col left">Left column</div>
</div>
<div class="wrap" style="width:500px">
<div class="col left">Left column 2</div>
<div class="col middle">Middle column 2</div>
</div>
而CSS:
.wrap {
width: 500px;
margin: 1em auto;
overflow: hidden;
}
.left,
.right {
width: 100px;
background-color: #ffa;
}
.middle {
width: 400px;
background-color: #f90;
}
.left {
float: left;
}
.right,
.middle {
float: right;
}
div.right + div.middle {
width: 300px;
}
JS Fiddle demo。
參考文獻:
你意識到內容「left left ...」的div實際上是在右邊嗎? ([JS小提琴](http://jsfiddle.net/davidThomas/VZ7aL/))。 – 2012-03-07 19:36:48
我知道 - 我只是做了一個快速的例子,因爲我想一勞永逸地學習這件事...你可以回答我,並用背景色代替邊框 – 2012-03-07 19:38:07
我的觀點實際上除了'......中......列......我不知道另外兩個人的意圖是在哪一邊? HTML是否必須保持原樣,是否可以改編? – 2012-03-07 19:39:41