2016-10-13 63 views
4

代碼第一:Flexbox的DIV熄滅屏幕小屏幕上

html { 
 
    display:flex; 
 
    width:100%; 
 
    height:100%; 
 
} 
 

 
body { 
 
display:flex; 
 
    flex:1; 
 
} 
 

 
.container { 
 
    display:flex; 
 
    flex:1; 
 
    overflow-y:auto; 
 
    flex-direction:column; 
 
    justify-content:center; 
 
    align-items:center; 
 
} 
 

 
.block1 { 
 
    justify-content:center; 
 
    background-color:green; 
 
    display:flex; 
 
    width:300px; 
 
    min-height:150px; 
 
} 
 

 
.block2 { 
 
    background-color:blue; 
 
    display:flex; 
 
    min-height:300px; 
 
    width:500px; 
 

 
}
<div class="container"> 
 
<div class="block1"> 
 
    <img src="https://tse2.mm.bing.net/th?id=OIP.M252f960f4a4f32c22914d8d87623f066o0&pid=15.1"> 
 
</div> 
 
<div class="block2"></div> 
 
</div>

我有一個容器兩個街區。我希望他們在屏幕上居中。 問題是當屏幕高度很小時,我有一個滾動條出現,但第一個塊有一部分離屏(不可見)

要重現,請減小jsfiddle預覽窗口的高度。你會明白我的意思是脫離屏幕。

預期的行爲是讓滾動條出現並保持div可見。

我試圖通過設置柔性縮小到0的每一個元素上,但它是不工作...

回答

6

你可以利用Flexbox的的auto利潤率。

  1. .container刪除justify-content: center
  2. margin-top: auto增加到.block1
  3. margin-bottom: auto.block2

html { 
 
    display:flex; 
 
    width:100%; 
 
    height:100%; 
 
} 
 

 
body { 
 
display:flex; 
 
    flex:1; 
 
} 
 

 
.container { 
 
    display:flex; 
 
    flex:1; 
 
    overflow-y:auto; 
 
    flex-direction:column; 
 
    align-items:center; 
 
} 
 

 
.block1 { 
 
    justify-content:center; 
 
    background-color:green; 
 
    display:flex; 
 
    width:300px; 
 
    min-height:150px; 
 
    margin-top: auto; 
 
} 
 

 
.block2 { 
 
    background-color:blue; 
 
    display:flex; 
 
    min-height:300px; 
 
    width:500px; 
 
    margin-bottom: auto; 
 
}
<div class="container"> 
 
<div class="block1"> 
 
    <img src="https://tse2.mm.bing.net/th?id=OIP.M252f960f4a4f32c22914d8d87623f066o0&pid=15.1"> 
 
</div> 
 
<div class="block2"></div> 
 
</div>

+0

這麼容易,我沒有考慮它,所以我管理不同我的html,而不使用justify-content。令人沮喪的是,我仍然不明白爲什麼我的全部柔性盒設計不起作用,但至少我可以繼續前進。謝謝;-) – Adavo

+0

很高興幫助! Flexbox完全是一個學習曲線,但你最終會到達那裏! – darrylyeo

0

您可以添加position: absolute; top: 0到容器:

html { 
 
    display:flex; 
 
    width:100%; 
 
    height:100%; 
 
} 
 

 
body { 
 
display:flex; 
 
    flex:1; 
 
} 
 

 
.container { 
 
    display:flex; 
 
    flex:1; 
 
    overflow-y:auto; 
 
    flex-direction:column; 
 
    justify-content:center; 
 
    align-items:center; 
 
    position: absolute; 
 
    top: 0; 
 
} 
 

 
.block1 { 
 
    justify-content:center; 
 
    background-color:green; 
 
    display:flex; 
 
    width:300px; 
 
    min-height:150px; 
 
} 
 

 
.block2 { 
 
    background-color:blue; 
 
    display:flex; 
 
    min-height:300px; 
 
    width:500px; 
 

 
}
<div class="container"> 
 
<div class="block1"> 
 
    <img src="https://tse2.mm.bing.net/th?id=OIP.M252f960f4a4f32c22914d8d87623f066o0&pid=15.1"> 
 
</div> 
 
<div class="block2"></div> 
 
</div>

+0

如果我設置寬度:100%,這個樣本確定,但遺憾的是它並沒有對我的項目(比這個樣更復雜)工作。也許我會嘗試改變樣本來重現錯誤,即使在position:absolute和top:0 – Adavo

0

在你的代碼中有很多不必要的東西(例如在HTML,body和其他東西中的display:flex。我刪除了所有的東西,現在它似乎工作:

html, body { 
 
    height:100%; 
 
} 
 

 
.container { 
 
    display:flex; 
 
    flex-direction:column; 
 
    justify-content:center; 
 
    align-items:center; 
 
} 
 

 
.block1 { 
 
    display:flex; 
 
    justify-content:center; 
 
    background-color:green; 
 
    width:300px; 
 
    min-height:150px; 
 
} 
 

 
.block2 { 
 
    display:flex; 
 
    background-color:blue; 
 
    min-height:300px; 
 
    width: 100%; 
 
    max-width: 500px; 
 
}
<div class="container"> 
 
<div class="block1"> 
 
    <img src="https://tse2.mm.bing.net/th?id=OIP.M252f960f4a4f32c22914d8d87623f066o0&pid=15.1"> 
 
</div> 
 
<div class="block2"></div> 
 
</div>

.block2具有500像素的固定寬度。在500px寬度以下的屏幕上,這將導致滾動條出現。它是有求必應,我改變了對

width: 100%; 
max-width: 500px; 
+0

不幸的是,這個例子只是一個基本的例子來說明這個問題。在我的應用程序中,我需要顯示flex屬性,因爲每個塊(block1,block2)都包含很多東西。我刪除了body和html中的flex,但它不能解決這個問題。 – Adavo

+0

在block1中保留flex,block2不應該改變任何內容。我只是刪除它,因爲在我看到的上下文中沒有必要。你必須發佈更多的代碼 - 這個問題似乎在別的地方。 – Johannes

+0

我把'display:flex'放回我的答案中的block1和block2,它的工作原理是一樣的。另外,請不要忽略我關於block2的固定寬度的最終評論。 – Johannes