水平垂直居中方法总结

工作中经常用到水平垂直居中的方法,尤其是垂直居中,其中有非常多的学问,一直疏于总结,今天儿周末,来review一下:

  HTML结构:

       <div class="container">
            <div class="content"></div>
       </div>

  

        .container{
            background-color: #4EA46A;
            height: 200px;
            width:80%;
        }
        .content{
            height:100px;
            background-color: #2E5F3F;
        }
  • 绝对居中法(一)一——absolute + margin 负值  实现水平垂直居中
          .content{
        width : 100px;
              position: absolute;
              left:50%;
              margin-left:-100px;/*content宽度的一半*/
              top:50%;
              margin-top:-50px;
          }

  限制条件:需要知道元素宽高的值;

  这里附带一个小的知识点:CSS中margin-top/bottom(padding-top/bottom)百分比以最近的块级祖先元素的宽度而不是高度为基准

  • 绝对居中法(二)absolute + margin:auto   实现水平垂直居中

  平时蛮多时候都使用 margin:0 auto 来水平居中,但实际上这种方法也可以实现垂直居中,我也是才知道~ 来看看下面的代码:

        .container{
            background-color: #4EA46A;
            height: 200px;
            width:50%;
            margin: 100px auto;
            position: relative;
        }
        .content{
            width: 80%;
            height:50%;
            background-color: #2E5F3F;
        }
        .content{
            margin: auto;
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
        }

  

  这种实现绝对居中方法的工作机制如下所示:

  1. 在普通内容流中,margin:auto的效果等同于margin-top:0;margin-bottom:0
  2. position:absolute  使绝对定位块跳出了内容流,内容流中的其余部分渲染时绝对定位部分不进行渲染
  3. 为块区域设置top: 0; left: 0; bottom: 0; right: 0;将给浏览器重新分配一个边界框,此时该块block将填充其父元素(body或定位为relative的元素)的所有可用空间
  4. 给内容块设置一个高度height或宽度width,能够防止内容块占据所有的可用空间,促使浏览器根据新的边界框重新计算margin:auto
  5. 由于内容块被绝对定位,脱离了正常的内容流,浏览器会给margin-top,margin-bottom相同的值,使元素块在先前定义的边界内居中
  •   table-cell居中

  使用table的特殊属性——table-cell在设置为vertical-align:middle之后,单元格内容位于所在行中间显示的原理,进行垂直居中;

  限制:需要为居中元素增加一个额外wrapper:

 <div class="container">
        <div class="contentWrapper">
            <div class="content"></div>
        </div>
 </div>

CSS代码如下:

        .container{
            display:table;
        }
        .contentWrapper{
            vertical-align: middle;
            display: table-cell;
        }
        .content{
            width: 100%;
            height:50%;
            background-color: #2E5F3F;
        }
  • inline-block居中:

  CSS-Trick中相应文章 https://css-tricks.com/centering-in-the-unknown/  通过伪类元素撑开高度,结合inline-block和vertical-align:middle实现垂直居中:

  其原理如下:

<div class="container">
        <div class="content">What‘s past is prologue</div>
    </div>
        .container2{
            text-align: center;
        }
        .container2:before{
            content: ‘‘;
            display: inline-block;
            vertical-align: middle;
            height: 100%;
            margin-right:-0.25em;/*调整位置*/
        }
        .content2{
            display: inline-block;
            vertical-align: middle;
            line-height:40px;
            color: #2E5F3F;
            border:1px solid #2E5F3F;
        }

  这种方法的优势在于:可以再不知道父元素及子元素的宽度的基础上进行居中

  限制:当子元素宽度很长,接近100%时将会被挤到顶部(after伪元素)或 挤出容器(before伪元素)

     需设置如 max-width:calc(100% - 0.5em)的最大宽度进行限制

  • flex布局

  使用流体布局之后发现这才是真正的水平垂直居中好嘛?

        .container3{
            display: -webkit-box;
            display: -webkit-flex;
            display: -ms-flexbox;
            display: flex;
            -webkit-box-align:center;
            -webkit-align-items:center;
            -ms-flex-align:center;
            align-items:center;
            -webkit-box-pack:center;
            -webkit-justify-content:center;
            -ms-flex-pack:center;
            justify-content:center;
        }

  默认主轴为横轴:justify-content定义弹性项目在当前行上沿主轴的排列方式,align-items沿侧轴的排列方式

  限制:兼容问题:IE11+支持

  

  常用的水平垂直居中的方式总结这么多先

时间: 2024-10-05 02:36:38

水平垂直居中方法总结的相关文章

《转》CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)

转自大地Dudy的CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳) 本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE系列只测试了IE9和IE6,以下所说的IE的支持性只是相对于IE9和IE6来说的: 一.元素的水平垂直居中: 第一种方法: <!doctype html> <html lang="en&

CSS元素水平垂直居中方法总结(方法主要来自大漠以及张鑫旭博客)

以下方法,由于测试环境的原因,IE系列只测试了IE9和IE6,以下所说IE的支持性只是相对于IE9和IE6来说的: 一.元素的水平垂直居中: 第一种方法:<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"&g

CSS水平垂直居中方法总结

部分HTML代码如下: <div class="wrap block"> <div class="block-center">块儿居中</div> </div> <div class="wrap inline"> <span class="inline-center">内联居中</span> </div> 一.absolute 拔河

CSS元素(文本、图片)水平垂直居中方法

1.text-align:center; 2.margin:0 auto; 3.display:inline-block; + text-align:center; 4.position:relative; + float:left; 5.line-height 6.上下左右padding 7.position:absolute; + margin:auto; 8.position:absolute; + 负margin 9.position:absolute; + calc() 10.tabl

水平居中,垂直居中,水平垂直居中 方法大全

废话不多说, 直接上菜. 菜系:水平居中 菜名一: 行内(块)元素水平居中 1. 通过 text-align: center 可以实现在块级元素内部的行内元素水平居中. 2. 如果块级元素内部包着也是一个块级元素,我们可以先将其由块级元素改变为行内块元素(inline-block.inline-table.inline-flex.inline-grid),再通过设置行内块元素居中以达到水平居中. 菜名二: 块级元素水平居中 1. 将该块级元素左右外边距margin-left和margin-rig

未知宽高的元素水平垂直居中方法总结

1.父元素设置display:table;子元素设置display:table-cell; 缺点:IE7不支持,而且子元素会填满父元素,不建议使用 2.使用css3 transform:translate(-50%; -50%) 缺点:兼容性不好,IE9+ 3.使用flex布局 缺点:兼容性不好,IE9+ 4.利用伪类元素 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U

解读CSS布局之-水平垂直居中

原文链接:http://f2e.souche.com/blog/jie-du-cssbu-ju-zhi-shui-ping-chui-zhi-ju-zhong/ 对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方法,是没有去考虑IE的,如果有兼容需要,可以参见这篇文章:http://www.cnblogs.com/Dudy/p/4085292.ht

CSS:div/img水平垂直居中

div水平垂直居中方法一: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #test{ position: absolute; width: 100px; height: 100px; background: pink; left: 0; rig

定位实现水平垂直居中的两种方法(无需计算)

首先给想要居中的元素设置绝对定位,其父元素设置相对定位. 然后,方法一:top,left,right,bottom都设置为0,margin:auto,即可在父元素中水平垂直居中. 方法二:top,left都设置为50%,然后transform:translate(-50%,-50%),如果其他地方也用到了transform并且设置transition容易误伤这里.