2016-10-13 55 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