2013-11-15 104 views
0

我在解決這個難題時遇到了問題:我使用的是固定寬度右列和左列取出剩餘空間的2列布局。兩個高度都是可變的。所以像這樣:響應式2列布局問題

<div class="sidebar">sidebar</div> 
<div class="main-area">main content</div> 

<style> 
.sidebar { float: right; width: 250px; } 
.main-area { position: relative; overflow: hidden; } 
</style> 

好吧,所以在這裏一切都很好。但是棘手的一點。我使用CSS3在達到750px的最大寬度時啓用css更改。我希望邊欄在下面分解並具有100%的寬度(因此它成爲主要內容的頁腳)。但是,因爲在HTML代碼中,側欄div必須首先出現在主區域上方。

關於如何解決這個問題的任何想法?

非常感謝!

+0

'sidebar'的權利,即後即將'主area'不是HTML代碼的選項? – NoobEditor

+0

爲什麼需要側欄出現在HTML層次結構的主要內容之前? 這裏沒有限制,除非你已經創建了自己的限制。 – Michael

+0

實際上'sidebar'可以自動移動到'main-area'下,如果你把'

'放在'
main content
' –

回答

1

簡單的回答你的問題是沒有。如果邊欄落在HTML內容區域之前,則無法將邊欄移動到斷點內容的下面。至少...沒有沒有JavaScript和一堆瘋狂。

這就是說...只需將您的邊欄低於您的主要內容div。在語義上,你沒有理由不去。

<section class="container"> 
    <div class="main-area">main content</div> 
    <div class="sidebar">sidebar</div> 
</section> 

但是需要進行一些CSS更改。它不像以前那麼簡單,但也不是特別困難。

.container { 
    position: relative; 
} 

.sidebar { 
    position: absolute; 
    top: 0; 
    right: 0; 
    width: 250px; 
} 
.main-area { 
    background: red; 
    margin-right: 250px; 
} 

Here is a JSFiddle demonstrating it working.

隨意不同數量的內容添加到任何主要內容區域或側邊欄,你會看到,無論是仍然有不同的高度不互相干擾。

+0

我需要主區域佔據側邊欄留下的剩餘空間(容器寬度 - 側欄寬度),而不是容器的100%。這就是爲什麼你的建議不適合我感謝767px的建議,我只是用750作爲例子。 – James

+0

@詹姆斯 - 我已經意識到我的一些測試後,我的原始建議是錯的。我用一個可行的解決方案編輯了我的答案。 – Michael

+0

是的,tottally正確的人。感謝您的答案:D – James

1

HTML:

<section class="container"> 
    <div class="main-area">main content</div> 
    <div class="sidebar">sidebar</div> 
</section> 

CSS:

.container { 
    position: relative; 
    max-width: 1024px; /* could be width: x% as well*/ 
} 

.sidebar { 
    position: absolute; 
    right: 0; top: 0; 
    width: 250px; 
} 

.main-area { 
    margin-right: 260px; /* sidebar width plus 10px gap */ 
} 

@media only screen and (max-width: 750px) { 

    .sidebar { 
      position: static; 
      width: 100%; 
    } 

    .main-area { 
     width: 100%; 
     margin-right: 0; 
    } 

} 
+1

絕對位置很複雜,因爲你不知道高度。 – DaniP

+0

嗨,感謝您的快速回復。 我可能應該明確說明側欄是正確的。這就是爲什麼有一個浮動:正確。我不確定你是否正在回答我的問題,因爲我想要的是,當屏幕寬度低於750像素時,側欄成爲主區域寬度爲100%的頁腳。由於側邊欄首先出現在HTML標記中,我不知道該怎麼做。 – James

+0

這甚至沒有回答OP的問題。 – Michael

0

我想你可以通過jQuery來實現這一點。

HTML

<div class="main-area"></div> 
<div class="sidebar"></div> 

CSS

.sidebar{ 
    background-color: #000; 
    height: 200px; 
    width: 50%; 
} 
.main-area{ 
    position: relative; 
    background-color: #ff0000; 
    height: 200px; 
    width: 50%; 
} 

jQuery的

$(function(){ 
    $('.sidebar').css('float', 'right'); 
    $('.main-area').css('float', 'left'); 

    $(window).resize(function(){ 
    if($(this).width() <= 750){ 
     $('.main-area').removeAttr('style'); 
     $('.sidebar').removeAttr('style'); 
    }else{ 
     $('.sidebar').css('float', 'right'); 
     $('.main-area').css('float', 'left'); 
    } 
    }); 
}); 

你可以看到這裏產生 - >jsFiddle

嗯,這是我的方式。

0

我想我找到了答案在這裏:http://jsfiddle.net/salman/TPNpy/

<div id="main-area-wrap"> 
    <div id="main-area">Column 1</div> 
</div> 
<div id="sidebar">Column 2</div> 
<div id="clear"></div> 

#main-area-wrap{ 
    float: left; 
    width: 100%; 
} 
#main-area { 
    background-color: cyan; 
    margin-right: 200px; 
} 
#sidebar{ 
    background-color: lime; 
    float: left; 
    width: 200px; 
    margin-left: -200px; 
} 
+0

這實質上是我編輯我的文章,但沒有浮動:左;關於內容哈哈哈。 – Michael

+0

是的,你明白了。再次感謝:D – James