关于面试中经常会有的水平垂直居中问题

水平垂直居中总的来说有空来说有两种情况:定宽高以及不定宽高

当然难点在于不定宽高,这里面试官一般会让你尽可能多的列举方法(我也只是听说哈哈哈),下面总结了十种方法,附上代码!
定宽高

  1. 使用绝对定位+margin赋值,绝对定位相对于浏览器窗口左上角,需要设置left以及top属性,不懂绝对定位的同学移步基础知识
  2. 绝对定位+margin:auto
  3. 绝对定位+CSS3的新属性 cal

不定宽高
4. 绝对定位+ transform:translate(-50%,-50%); 注意translate百分比相对于自身宽高
5. 使用line-height, 这个比较复杂
6. 父元素设置writing-mode,其功能为让文字显示为垂直方向,子元素设置为inline-block,然后居中
7. 使用table,居中元素设置为inline-block,冗余代码多
8. 使用grid网格,兼容性不好
9. 使用flex
10. 使用CSS3新特性,将普通元素设置为table:display: table-cell;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style>
            .wp{height: 300px; width: 300px; border: 1px solid red;}
            .wapadd1{position: relative;}
            .wapadd2{line-height: 300px; text-align: center; font-size: 0px; }
            .wapadd3{writing-mode: vertical-rl; text-align: center;}
            .wapadd4{text-align: center;}
            .wapadd5{display: table-cell; text-align: center; vertical-align: middle;} /*boxadd7 使用css新特性将普通元素变为table*/
            .wapadd6{display: flex; justify-content: center; align-items: center;}  /*使用flex*/
            .wapadd7{display: grid;}
            .wm{display:inline-block; writing-mode: horizontal-tb; text-align: center; width: 100%;}
            .box{background-color: royalblue;}
            .size{height: 100px; width: 100px;}
            .boxadd1{position: absolute; left:50%; top:50%; margin-left: -50px; margin-top: -50px;}  /*wapadd1+size 使用绝对定位+margin负值*/
            .boxadd2{position: absolute; top:0; left:0; right:0; bottom:0; margin: auto;}  /*wapadd1+size  absolute+auto*/
            .boxadd3{position: absolute; top:calc(50%-50px); left: calc(50%-50px);}   /*wapadd1+size absolute+CSS3属性calc*/
            .boxadd4{position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);}   /*wapadd1  absolute+translate  不需要宽高*/
            .boxadd5{font-size: 16px; display: inline-block; vertical-align: middle; line-height: initial; text-align: left;}  /*wapadd2+ line-height*/
            .boxadd6{display: inline-block; margin: auto; text-align: left;} /*wapadd3+wm writing-mode让文字显示为垂直方向*/
            .boxadd7{display: inline-block;} /*wapadd4 使用table实现,冗余代码多*/
            .boxadd8{align-self: center; justify-self: center;} /*wapadd7  使用grid,兼容性不好*/
        </style>
    </head>
    <body>
        <!-- 水平垂直居中方法 -->
        <div class="wp wapadd7">
            <div class="box boxadd8">
                测试水平垂直居中方法
            </div>
        </div>

        <div class="wp wapadd3">
            <div class="wm">
                <div class="box boxadd6">
                    测试水平垂直居中方法
                </div>
            </div>
        </div>

        <table>
            <tbody>
                <tr>
                    <td class="wp wapadd4">
                        <div class="box boxadd7">
                            测试水平垂直居中方法
                        </div>
                    </td>
                </tr>
            </tbody>
        </table>

        <div class="wrap">
            <div style="background-color: lawngreen;">
                this is a div. 块级会自动填充父级元素的宽度,独占一行,可以设置width, height, margin, padding
            </div>
            <span style="background-color: khaki; padding: 10px;">
                span. 内联元素宽度随内容变化,不可设置宽高,margin只有水平有效,padding都有效
            </span>
            <div style="display: inline-block; background-color: red;">
                div->inline-block
            </div><span style="background-color:lightcoral; display: inline-block; width: 300px; padding: 10px; margin: 10px;">   <!-- 去除标签之间的间隙,可以去掉行内之间的间隙 -->
                span->inline-block. 内联块级既有块级的width, height, margin, padding属性,又有内联的同行属性
            </span>
        </div>
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值