请看 fiddle
HTML:
<div id="outer">
<div id="inner">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
</div>
</div>
<button onClick="toggleOuterHeight();">toggle outer div height</button>
JS:
toggleOuterHeight = function() {
if ($('#outer').css('height') == '400px') {
$('#outer').css('height','200px');
} else {
$('#outer').css('height','400px');
}
}
CSS:
#outer {
background-color: #1abc9c;
height: 400px;
position: relative;
overflow: auto;
}
#inner {
background-color: #16a085;
height: 250px;
width: 250px;
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
#inner ul {
margin: 0;
}
#inner ul li {
line-height: 25px;
}
我有一个div(内部)在另一个div(外部)内垂直对齐......它就像一个魅力!
如果外部div小于内部div,则必须进行滚动。您可以在示例底部看到此单击按钮。
有问题:滚动会隐藏内部div的顶部。你不能滚动显示第一行!!!
我改变了css以使div using translate居中,没有运气!
任何提示?
答案 0 :(得分:0)
您可以避免使用绝对定位进行垂直对齐,从而将元素从正常流中移除,并使用 this approach 1 代替:
<强> EXAMPLE HERE 强>
#outer { text-align: center; }
#outer:after {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
#inner {
background-color: #16a085;
height: 250px;
width: 250px;
display: inline-block;
vertical-align: middle;
}
1。你可以参考&#34;垂直对齐&#34;该答案的一部分是为了实现盒子的水平和垂直对齐。
答案 1 :(得分:0)
试试这个:
<强> CSS 强>
#inner {
background-color: #16a085;
position: relative;
height: 250px;
width: 250px;
margin: auto;
top: 75px;
left: 0;
right: 0;
bottom: 0;
}
<强> JS 强>
toggleOuterHeight = function() {
if ($('#outer').css('height') == '400px') {
$('#outer').css('height','200px');
$('#inner').css('top','0');
} else {
$('#outer').css('height','400px');
$('#inner').css('top','75px');
}
}
链接到fiddle
答案 2 :(得分:0)
你可以添加一个类,因为你知道高度使用负边距:
http://jsfiddle.net/vea1cxh1/3/
JS:
toggleOuterHeight = function() {
if ($('#outer').css('height') == '400px') {
$('#outer').css('height','200px').addClass('scrolly');
} else {
$('#outer').css('height','400px').removeClass('scrolly');
}
}
CSS:
#inner {
background-color: #16a085;
height: 250px;
width: 250px;
position: absolute;
margin: auto;
margin-top: -125px;
top: 50%;
left: 0;
right: 0;
/* bottom: 0; */
}
#inner ul {
margin: 0;
}
.scrolly #inner {
margin-top: 0;
top: 0;
}