反過來也能夠:左側寬度固定,右側自適應。無論是左是右,反正就是一邊寬度固定,一邊寬度自適應。css
這種佈局比較常見,博客園不少默認主題就是這種。通常狀況下,這種佈局中寬度固定的區域是側邊欄,而自適應的區域是主體內容區——相信把側邊欄搞成自適應的人不多吧?html
要實現這種佈局,也算比較簡單。咱們先給出html結構:web
<div id="wrap"> <div id="sidebar" style="height:240px;">固定寬度區</div> <div id="content" style="height:340px;">自適應區</div> </div> <div id="footer">後面的一個DIV,以確保前面的定位不會致使後面的變形</div>
代碼中的#wrap的div,是用來包裹咱們要定位的這兩個區的;他後面還有個#footer,用來測試在前面的定位搞定後會不會致使後面的div錯位——若是錯位了,那證實咱們的定位方法必須改進。
瀏覽器
下面列舉幾個常見的方法:ide
咱們拿右邊定寬左邊自適應來作示範,CSS代碼以下:佈局
#wrap { overflow: hidden; *zoom: 1; } #content ,#sidebar { background-color: #eee; } #sidebar { float: right; width: 300px; } #content { margin-right: 310px; } #footer {background-color: #f00;color:#fff; margin-top: 1em}
其中,sidebar讓他浮動,並設置了一個寬度;而content沒有設置寬度。測試
你們要注意html中必須使用div標籤,不要妄圖使用什麼p標籤來達到目的。由於div有個默認屬性,即若是不設置寬度,那他會自動填滿他的父標籤的寬度。這裏的content就是例子。spa
固然咱們不能讓他填滿了,填滿了他就不能和sidebar保持同一行了。咱們給他設置一個margin。因爲sidebar在右邊,因此咱們設置content的margin-right值,值比sidebar的寬度大一點點——以便區分他們的範圍。例子中是310.code
假設content的默認寬度是100%,那麼他設置了margin後,他的寬度就變成了100%-310,此時content發現本身的寬度能夠與sidebar擠在同一行了,因而他就上來了。orm
而寬度100%是相對於他的父標籤來的,若是咱們改變了他父標籤的寬度,那content的寬度也就會變——好比咱們把瀏覽器窗口縮小,那wrap的寬度就會變小,而content的寬度也就變小——但,他的實際寬度100%-310始終是不會變的。
這個方法看起來很完美,只要咱們記得清除浮動(這裏我用了最簡單的方法),那footer也不會錯位。並且不管content和sidebar誰更長,都不會對佈局形成影響.
但實際上這個方法有個很老火的限制——html中sidebar必須在content以前!
但我須要sidebar在content以後!由於個人content裏面纔是網頁的主要內容,我不想主要內容反而排在次要內容後面。
但若是sidebar在content以後,那上面的一切都會化爲泡影。
固然,以不折騰人爲標準的w3c標準早就爲咱們提供了製做這種自適應寬度的標準方法。那就簡單了:把wrap設爲display:table並指定寬度100%,而後把content+sidebar設爲display:table-cell;而後只給sidebar指定一個寬度,那麼content的寬度就變成自適應了。
代碼不多,並且不會有額外標籤。不過這是IE7都無效的方法。