CSS水平垂直居中

19 篇文章 0 订阅
  1. 使用场景 单行内容 固定高度 height=line-height,既可以达到垂直居中,水平居中因为div是块级元素,居中需设置text-align: center;
/**适合在所有浏览器,没有足够空间时,内容不会被切掉**/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .c {
        width: 200px;
        height: 50px;
        line-height: 50px;
        color: #fff;
        text-align: center;
        background-color: red;
    }

    </style>
</head>
<body>
    <div class="c">
            单行元素垂直居中
    </div>
</body>
</html>
  1. 为需要垂直居中的元素的设置position: absolute;(父级元素是boby),给需要居中的元素的父元素设置相对点position: relative;,在位子元素设置position: absolute;,再将top:50%和left:50%,在通过margin,margin-top为高度的一半(margin-top:-height/2);margin-left为宽度的一半(margin-left:-width/2);
/***相对于body进行垂直居中(内容不限制行数)**/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .c {
        position: absolute;
        top:50%;
        left: 50%;
        margin-left: -100px;
        margin-top: -25px;
        width: 200px;
        height: 50px;
        color: #fff;
        text-align: center;
        background-color: red;
    }

    </style>
</head>
<body>
    <div class="c">
            该div相对于body水平垂直居中
    </div>
</body>
</html>
优点:
适合在所有浏览器,没有足够空间时,内容不会被切掉

缺点:
仅适合应用在文本和图片上,并且这种方法,当你文本不是单行时,效果极差,差到让你感到恶心。

这种方法对运用在小元素上是非常有用的,比如说让一个button、图片或者单行文本字段。

/**相对于父元素进行垂直居中(内容不限制行数)**/
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    .c {
        position: relative;
        width: 200px;
        height: 50px;
        color: #fff;
        text-align: center;
        background-color: red;
    }
    .c span{
        position: absolute;
        width: 180px;
        height: 40px;
        top:50%;
        left: 50%;
        margin-left: -90px;
        margin-top: -20px;
        background-color: yellow;
    }

    </style>
</head>
<body>
    <div class="c">
            父级元素
            <span>该div相对于父级元素水平垂直居中</span>
    </div>
</body>
</html>
优点:
能在各浏览器下工作,结构简单明了,不需增加额外的标签
缺点:
由于固定死元素的高度,致使没有足哆的空间,当内容超过容器的大小时,要么会消息,要么会出现滚动条(如果元素在body内,当用户缩小浏览器窗口时,body的滚动条将不会出现)。

3、使用table渲染完成

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #container {
                height: 300px;
                display: table;
                text-align: center;
                background-color: yellow;
                /*让元素以表格形式渲染*/
            }
            #content {
                display: table-cell;
                /*让元素以表格的单元素格形式渲染*/
                vertical-align: middle;
                /*使用元素的垂直对齐*/
                background-color: red;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <div id="content">content</div>
        </div>
    </body>
</html>
优点:
不会被被截断和产生滚动条
缺点:
IE低版本不兼容,可以通过css hack解决。

4、 这种方法有点新意,用这种方法你需要在居中元素前面放一个空的

(块元素就可以),然后设置这个
的高度为50%,margin-bottom为元素高度的一半,而且居中元素需要清除浮动。需要注意的是,使用这种方法,如果你的居中元素是放在body中的话,你需要给html,body设置一个“height:100%”的属性。

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            html,
            body {
                height: 100%;
            }
            #floater {
                float: left;
                height: 50%;
                /*相对于父元素高度的50%*/
                margin-bottom: -120px;
                /*值大小为居中元素高度的一半(240px/2)*/
            }
            #content {
                clear: both;
                /*清除浮动*/
                height: 240px;
                position: relative;
            }
        </style>
    </head>

    <body>
        <div id="floater">
            <!--This block have empty content -->
        </div>
        <div id="content">Content section</div>
    </body>

</html>
优点:
这种方法能兼容所有浏览器,在没有足哆空间下,内容不会被切掉

缺点:
元素高度被固定死,无法达到内容自适应高度,如果居中元素加上overflow属性,要么元素出现滚动条,要么元素被切掉;另外就是一个不算缺点的缺点,那就是加了一个空标签。

5、jQuery方法

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .container {
                background-color: #338BC7;
                width: 270px;
                height: 150px;
            }
        </style>
    </head>

    <body>
        <div class="container">
            <p>Centered In The Middle Of The Page With jQuery</p>
        </div>
        <script src="jquery-1.9.1.min.js"></script>
        <script>
            $(document).ready(function() {
                $(window).resize(function() {
                    $('.container').css({
                        position: 'absolute',
                        left: ($(window).width() - $('.container').outerWidth()) / 2,
                        top: ($(window).height() - $('.container').outerHeight()) / 2
                    });
                });
                // 最初运行函数
                $(window).resize();
            });
        </script>
    </body>

</html>
/**需要引入jQuery文件**/

/**相对定位和绝对定位**/
<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .parent-div {
                width: 100px;
                height: 100px;
                background-color: red;
                position: relative;
                margin: 100px auto;
            }
            .child-div {
                width: 50px;
                height: 50px;
                background-color: #000;
                position: absolute;
                margin: auto;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
            }
        </style>
    </head>

    <body>
        <div class="parent-div">
            <div class="child-div"></div>
        </div>
    </body>

</html>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值