博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
元素自动居中显示
阅读量:5235 次
发布时间:2019-06-14

本文共 1868 字,大约阅读时间需要 6 分钟。

 

       我们在写页面时经常会遇到让一个元素自动居中显示的需求,这个元素有可能是块级元素,有可能是行内元素,也可能是文字等等,而居中的需求有可能是水平居中,垂直居中或者两者同时居中。

       据我目前了解,居中有四种方式:1. 利用table表格特性; 2. 使用table-cell属性以table方式渲染; 3. margin自动居中; 4. 使用absolute配合margin负值居中;以下逐个讲解:

 

1. 利用table表格特性

      这 种方式可以让内容垂直居中(valign="middle")和水平居中(align="center"),无论是行内元素还是块级元素都可以垂直居中 (inline,inline-block,block),但是水平居中只支持带有行内属性的元素(inline,inline-block),图示如 下:

 

示例:

css:

    td {

        width: 300px;
        height: 150px;
        border: 1px solid #d9d9d9;
    }
    td p {
        width: 150px;
        height: 75px;
        background: #e5e5e5;
    }

 

html:

    <table>

        <tr>
            <td valign="middle" align="center">

                <p></p>

            </td>

        </tr>
    </table>

 

2. 使用table-cell属性以table方式渲染

      这种方式使得元素表现的像td或th一样。图示如下:

示例:

css:

    #table {

        width: 300px;
        height: 150px;
        display: table-cell;
        vertical-align: middle;
        text-align: center;
        border: 1px solid #d9d9d9;
    }
    #table p {
        width: 150px;
        height: 75px;
        display: inline-block;
        background: #e5e5e5;
    }

 

html:

    <div id="table">

        <p></p>
    </div>

 

3. margin自动居中

      这种方式会自动计算,但是只支持水平居中,不支持垂直居中,所以一般都会设置margin: o auto;图示如下:

示例:

css:

    #mg {

        width: 535px;
        height: 185px;
        border: 1px solid #d9d9d9;
    }
    #mg p {
        width: 190px;
        height: 100px;
        background: #e6e6e6;
        margin: 0 auto;
    }

 

html:

    <div id="mg">

        <p></p>
    </div>

 

4. 使用absolute配合margin负值居中

      这种方式利用了百分比及精确计算,支持水平居中和垂直居中。这个需要讲解下,我们前面讲过绝对定位(), 它是脱离文档流的,所以,如果你是针对浏览器居中,父元素不用另外设属性,否则的话,父元素要设置relative或者absolute。我们要想让一个 元素居中显示(暂以水平居中为例,垂直原理相同),需要将它的中线(灰色虚线)与父元素的中线(蓝色虚线)重合,当我们让一个元素绝对定位,并且left 值设置50%的时候,这个元素的最左边就会始终与父元素的中线(蓝色虚线)对齐,我们要做的就是让它在这个基础上向左再移回去一部分,这一部分是多少呢? 从图上可以看出,父元素的中线(蓝色虚线)与灰色方块最左边对齐,两个中线之间的距离刚好是灰色区域宽度的一半。所以我们可以利用margin可以取负值 的特性,让margin-left向左移动灰色区域宽度的一半,就可以居中显示了。垂直同理。图示如下:

 

示例:

css:

    #pa {

        width: 535px;
        height: 185px;
        border: 1px solid #d9d9d9;
        position: relative;
    }
    #pa p {
        width: 190px;
        height: 100px;
        background: #e6e6e6;
        position: absolute;
        top: 50%;
        left: 50%;
        margin: -50px 0 0 -95px;
    }

html:

    <div id="pa">

        <p></p>
    </div>

 

转载于:https://www.cnblogs.com/k13web/p/4139461.html

你可能感兴趣的文章
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>