我已经与这个问题斗争了一段时间,似乎总是用一种方法到达某个地方,只是当我认为我快完成时才发现一个潜伏的问题。
简而言之,我试图将高度等于窗口高度百分比的 div 中的内容垂直居中。如果内容高于包含 div 的内容,则只有部分内容应该滚动。
请查看此小提琴结果以了解我要做什么;(实际的小提琴在这里)。
最后一个(我希望的)障碍是当有足够的内容来强制滚动时,以某种方式在主文本和红色“按钮”之间添加一个小的、固定数量的空间(比如 30 像素)。但是,我尝试过的所有方法——即边距和/或填充的各种组合——都不起作用。有人可以帮忙吗?
强制代码
HTML:
<div id="main">
<div id="box">
<div id="content">
<h1 id="heading">HEADING</h1>
<div id="left">
<div id="leftContents">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget diam in mi facilisis condimentum. Nullam at arcu erat. Nullam elit libero, sodales sit amet pellentesque et.</p>
</div>
</div>
<div id="button"></div>
</div>
</div>
</div>
CSS:
*{
padding:0;
margin:0;
}
#main {
position:absolute;
top:0; left:0; right:0; bottom:0; background:lightblue;
text-align:center;
font-family:arial;
}
#box{
position:absolute;
top:15%; bottom:15%;
background:white;
left:50%;
}
#content{
position:absolute;
width:100%;
top:50%;
background:lightgrey;
}
#left{
float:left;
width:50%;
overflow:auto;
background:lightyellow;
margin-bottom:30px;
}
#leftContents{
/*clear:left;*/
}
#button{
height:30px;
background:red;
position:absolute;
bottom:0;
left:25%; right:25%;
}
jQuery:
function alignContent() {
// Position containing box
$box = $('#box');
$box.css({
'width': $box.height() + 'px',
'margin-left': '-' + $box.height() / 2 + 'px'
});
// Size & position content area
$content = $('#content');
$content.css({
'max-height': $box.height() - 72 + 'px',
'margin-top': '-' + ($content.outerHeight() / 2) + 'px'
});
// Left panel sizing
$left = $('#left');
$max = ($box.height() - 72 - 30 - $('#heading').outerHeight());
$left.css({
'max-height': $max
});
}
alignContent();
// Update when resized
$(window).resize(function () {
alignContent();
});
$(window).load(function () {
alignContent();
});
谢谢!