高度未知的居中响应 div 并启用完全垂直滚动
Center responsive div with unknown height and enable full vertical scroll
我正在尝试将高度未知的 div 居中。
当视口高度小于 div 高度时,我找不到允许滚动到 div 顶部的解决方案。
HTML
<div>
<p>This will be hidden when <br />
window_height < div_width</p>
<br />
<br />
<br />
How to make it scroll to the top?
</div>
CSS
body {
background: grey;
}
p{
background: green;
}
div {
position: absolute;
left: 50%;
top: 50%;
box-sizing: border-box;
transform: translate(-50%, -50%);
max-width: 500px;
width:100%;
height: 700px; /* Unknown*/
padding: 20px;
background: red;
color: white;
text-align: center;
}
http://codepen.io/Koopa/pen/GpypdX
谢谢
您无法滚动到 div
顶部的原因是 transform
属性 具有负值将 div
定位在较小的屏幕外屏幕。
在此演示中 transform
被禁用:
http://codepen.io/anon/pen/wKpMyM
此外,当您将绝对定位应用于元素时,您会将其从文档的 normal flow 中移除。这意味着它被它的容器忽略了。因此,body
和 html
元素的高度为零。
在此演示中,body
有一个绿色边框(完全折叠):
http://codepen.io/anon/pen/RWxrod
为了使您的布局正常工作,您可以为 body
指定一个最小高度(以便它可以随 div
一起扩展),而不是使用绝对定位居中,使用 flexbox.
CSS
html { height: 100%; } /* necessary for percentage heights to work */
body {
background: grey;
border: 10px solid green; /* for demo purposes */
min-height: 100%; /* allow body to expand with children */
display: flex; /* establish flex container */
justify-content: center; /* center div horizontally, in this case */
align-items: center; /* center div vertically, in this case */
}
p {
background: green;
}
div {
/* REMOVE
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%); */
box-sizing: border-box;
max-width: 500px;
width:100%;
height: 700px; /* Unknown*/
padding: 20px;
background: red;
color: white;
text-align: center;
}
演示版:http://codepen.io/anon/pen/OyzMvV
请注意,所有主要浏览器都支持 flexbox,except IE 8 & 9。
我正在尝试将高度未知的 div 居中。
当视口高度小于 div 高度时,我找不到允许滚动到 div 顶部的解决方案。
HTML
<div>
<p>This will be hidden when <br />
window_height < div_width</p>
<br />
<br />
<br />
How to make it scroll to the top?
</div>
CSS
body {
background: grey;
}
p{
background: green;
}
div {
position: absolute;
left: 50%;
top: 50%;
box-sizing: border-box;
transform: translate(-50%, -50%);
max-width: 500px;
width:100%;
height: 700px; /* Unknown*/
padding: 20px;
background: red;
color: white;
text-align: center;
}
http://codepen.io/Koopa/pen/GpypdX
谢谢
您无法滚动到 div
顶部的原因是 transform
属性 具有负值将 div
定位在较小的屏幕外屏幕。
在此演示中 transform
被禁用:
http://codepen.io/anon/pen/wKpMyM
此外,当您将绝对定位应用于元素时,您会将其从文档的 normal flow 中移除。这意味着它被它的容器忽略了。因此,body
和 html
元素的高度为零。
在此演示中,body
有一个绿色边框(完全折叠):
http://codepen.io/anon/pen/RWxrod
为了使您的布局正常工作,您可以为 body
指定一个最小高度(以便它可以随 div
一起扩展),而不是使用绝对定位居中,使用 flexbox.
CSS
html { height: 100%; } /* necessary for percentage heights to work */
body {
background: grey;
border: 10px solid green; /* for demo purposes */
min-height: 100%; /* allow body to expand with children */
display: flex; /* establish flex container */
justify-content: center; /* center div horizontally, in this case */
align-items: center; /* center div vertically, in this case */
}
p {
background: green;
}
div {
/* REMOVE
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%); */
box-sizing: border-box;
max-width: 500px;
width:100%;
height: 700px; /* Unknown*/
padding: 20px;
background: red;
color: white;
text-align: center;
}
演示版:http://codepen.io/anon/pen/OyzMvV
请注意,所有主要浏览器都支持 flexbox,except IE 8 & 9。