在具有滚动的div内垂直对齐的div

时间:2014-08-22 22:32:10

标签: html css css3 vertical-alignment

请看 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居中,没有运气!

任何提示?

3 个答案:

答案 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;
}