美文网首页Css
div高度不确定垂直居中方式

div高度不确定垂直居中方式

作者: shengqz | 来源:发表于2017-12-10 15:07 被阅读246次

    内部div无确定高度的垂直居中方式有很多。在查找资料的时候,我学习了以下几种实用方式:

    第一种:使用 Flex

    首先说一下Flexbox。Flexbox是css3的一个盒子模型,其中我们只要使用align-items和 align-content 就能较为快速地实现内部div没有确定高度居中方式。
    测试代码:

    html:

    <body>
        <div class="flexbox">
            <div></div>
        </div>
    </body>
    

    css:

    html, body {
        margin: 0;
        padding: 0;
        width: 100% ;
        height: 100% ;
    }
    .flexbox {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 100% ;
        height: 100% ;
    }
    .flexbox div {
        width: 100px;
        height: 50px;
        background: #fcf000;
    }
    

    效果图:

    使用 Flexbox垂直居中

    第二种:使用 transform

    transform是css3的新属性,可以操控节点的位移,旋转等。在垂直居中中,只要用到了transform中的translateX,translateY这两个属性。

    使用translateX,translateY来居中有以下的几点要注意的:

    • 子div(子节点)需要使用 position: relative;
    • 使用top,left分别为-50%。以及translateX,translateY为50%进行位移居中

    测试代码:

    html:

    <body>
        <div class="transform">
            <div></div>
        </div>
    </body>
    

    css:

    html, body {
        margin: 0;
        padding: 0;
        width: 100% ;
        height: 100% ;
    }
    .transform {
        width: 100% ;
        height: 100% ;
    }
    .transform div {
        position: relative;
        width: 100px;
        height: 50px;
        top: 50% ;
        left: 50% ;
        transform: translateY(-50%) translateX(-50%);
        background: #f96600;
    }
    

    效果图:


    使用 transform垂直居中

    第三种:使用display属性

    .transform {
        width: 100% ;
        height: 100% ;
        display: table; // 设置display属性
    }
    .transform div {
        width: 100px;
        height: 50px;
        display: table-cell; // 子元素水平居中
        vertical-align: middle; // 垂直居中
        background: #f96600;
    }
    

    这种方法的优点在于:
    content 可以动态改变高度(不需在 CSS 中定义)。
    当 父节点里没有足够空间时,content 不会被截断。(在实际中这个是十分实用的)
    而使用绝对定位content不可以动态改变高度。

    第四种:使用position:absolute

    使用这个方法时,需要给要居中的元素设置position:absolute,注意父元素position: relative,并且元素的宽度和高度是固定的。
    由于它有固定高度和并不能上下边界都未0,所以可以实现垂直居中。

    .transform div {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
        width: 100px;
        height: 50px;
    }
    

    但是缺点也是十分明显的,就是内容超出时不会自动增加高度,而第三种就可以实现相对的高度。

    最后,垂直居中方式有很多,采取合适才是最重要的。

    文章参考:
    CSS 垂直置中的七個方法
    CSS实现垂直居中的5种方法

    相关文章

      网友评论

        本文标题:div高度不确定垂直居中方式

        本文链接:https://www.haomeiwen.com/subject/nytvixtx.html