我们在网页布局的时候,经常会碰到需要居中的情况,那下面就来讲一下有哪几种目前比较常用的居中方案,它们的优点和缺点分别又是什么。

一、水平居中
 
方法①:(父元素)text-align,(子元素)inline-block
这个是比较传统的做法,而且代码量也相对比较少,它的特点是可以很好地兼容IE6等低版本浏览器。至于缺点也比较明显,是需要把父元素和子元素都做成一个整体,并且上同时设置CSS
 
总结:

优点:兼容性好,支持低版本浏览器

缺点:需要同时在父元素和子元素上设置

适用场景:子元素数量少(或只有一个),并且需要兼容低版本浏览器时使用
 
方法②:(子元素)display:table;margin:auto;(左右auto即可)
例:display:table; margin: 0 auto
这个方法利用display:table这个样式把子元素转化成类表格元素,从而可以用margin:auto来自动居中。方案的优点是只需要在子元素上加CSS,但display:table在IE8以上浏览器才有效果,所以本方法只适合用在较高版本浏览器中。
 
总结:

优点:只需要在子元素设置。

缺点:不兼容IE6和IE7

适用场景:子元素数量多,不方便修改父元素的属性,对浏览器版本要求相对较低时使用

 
方法③:(父元素)position:relative,(子元素)absolute+left+transform(translateX(-50%))
这个的方法看起来就比较现代化了。没错,它的核心是利用了CSS3里的水平偏移,由于设置了absolute,所以对其他元素基本不会造成影响
优点:不影响其他元素
缺点,transform兼容性
 
方法④:flex+justify-content/margin
这个方法利用了display:flex对Grid操作的强大,分别有两种设置方法。
一种是(父元素)display:flex;justify-content:center;
优点:只设parent
缺点:flex兼容性差,而且比较耗资源
另一种是(父元素)display:flex;(子元素)margin:0 auto;
优点:代码简单
缺点,污染父元素,flex兼容性问题
水平居中这里的4种方法应该可以帮大家对应掉工作中绝大多数情况。下面我们来说说垂直居中
 
二、垂直居中:
①(父)table-cell + vertical-align
优点:兼容性比较好,换成table可以兼容IE6,7
缺点:table-cel会不能和float、position:absolute同时设置。(只能在外parent外套一层div.wrap才能设置float)
 
②(父)position:relative;(子)absolute +top+ transform
这个方法和水平居中的left+transform类似,这里就不再赘述了
优点:基本只设置子元素,不影响其他元素
缺点:transform兼容性问题
 
③(父)flex + align-items
方法和水平居中的flex很类似吧
优点:只要设置parent
缺点:flex和align-items的兼容性
 
 
 
三、【终极需求】水平垂直同时居中!
下面来讲讲这个小BOSS
我们对水平居中和垂直居中的情况思考一下就会知道,要想达到水平垂直都居中,子元素必须是独立的,而父元素的垂直和水平样式互不影响。
方法①:(父)text-align + table-cell + vertical-align,(子)inline-block(兼容性方案)
 
方法②:(子)absolute + transform(不影响父元素方案,不兼容)
 
方法③:(父)flex + justify - content + align - items(不影响子元素方案,不兼容)
 

CSS水平和垂直居中方案的更多相关文章

  1. 【翻译】CSS水平和垂直居中的12种方法

    英语原文链接 在CSS中有许多不同的方法能够做到水平和垂直居中,但很难去选择合适的那个.我会向你展示我所看到的所有的方法,帮助你在所面对的情境下选择最棒的那一个. 方法1 此方法将只能垂直居中单行文本 ...

  2. css 水平、垂直居中

    水平居中 行内元素 行内元素:(img.span.文字等行内元素),通过在父级元素设置 text-align:center 使元素水平居中. 块级元素 块级元素:(div.p.h1...h6.ul.l ...

  3. CSS水平、垂直居中小结

    我们在实际工作中经常会遇到需要水平居中或者垂直居中的场景,今天我们就来看一下如何设置水平居中和垂直居中. 首先来看水平居中. 一.水平居中设置-行内元素. 如果被设置元素为文本.图片等行内元素时,水平 ...

  4. css水平、垂直居中的写法

    水平居中 行内元素: text-align: center 块级元素: margin: 0 auto position:absolute +left:50%+ transform:translateX ...

  5. css水平竖直居中方式

    CSS水平和垂直居中的几种实现方法: 1.单行垂直居中 文字在层中垂直居中vertical-align 属性是做不到的.我们这里有个比较巧妙的方法就是:设置height的高度与line-height的 ...

  6. [CSS]水平垂直居中方案

    简单总结一下常用的水平垂直居中方案 直接在父级元素设置 text-align 和 line-height ,针对未浮动的行内元素 <div class="box"> & ...

  7. css 水平垂直居中总结

    空闲总结了下水平垂直居中方案,欢迎补充: 水平居中 水平居中有两种情况: 子元素是内联元素 这种那个情况下只需要在父元素定义: text-align:center; 例子: html: //省略了bo ...

  8. CSS:使用CSS3将一个div水平和垂直居中显示

    使用css3将一个div水平和垂直居中显示 方案一: div绝对定位水平垂直居中[margin:auto实现绝对定位元素的居中], 代码两个关键点:1.上下左右均0位置定位: 2.margin: au ...

  9. 水平垂直居中方案与flexbox布局

    [前端攻略]最全面的水平垂直居中方案与flexbox布局   最近又遇到许多垂直居中的问题,这是Css布局当中十分常见的一个问题,诸如定长定宽或不定长宽的各类容器的垂直居中,其实都有很多种解决方案.而 ...

随机推荐

  1. redis学习笔记——expire、pexpire、expireat、pexpireat的执行过程

    这里主要讲的Redis是怎么样设置过期键的,可以算作后续"Redis过期键的删除策略"的前篇或者说预备知识. 在了解过期键问题前我们首先需要对redis的数据库和数据库键空间有一定 ...

  2. Android布局属性集合

    <!-- android:id  —— 为控件指定相应的ID android:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 andro ...

  3. oc和swift混编 使用use_frameworks!后编译出错

    Swift项目中同时使用OC的库和Swift的库时,用CocoaPods导入时添加use_frameworks! 如果在cocoapods 里面不使用use_frameworks!,则是通过stati ...

  4. tornado ThreadPoolExecutor

    import os import sys import time import tornado.httpserver import tornado.ioloop import tornado.opti ...

  5. vue - .postcssrc.js

    描述:添加浏览器私缀(私缀是上世纪90年代浏览器大战的产物,也是现在新型浏览器支持某些新API,而其它浏览器不支持的证明!) 我们看看App.vue 再来看看打包后的css文件 一切都是靠你postc ...

  6. vue - config(dev.env.js和prov.env.js)

    描述:配置产品模式.打包模式:开发还是打包,以最佳运行(不配置则有一个大大的Warning!!!) 官网:https://www.webpackjs.com/concepts/mode/

  7. 用Markdown写博客快速入门

    Markdown,简单来说,就是一种可以方便转换为HTML的带标记符号纯文本. 它是对我等键盘党的福音:我不用再费劲挪动鼠标去按加粗.设置段落了,用键盘输入所有文本,一气呵成. 最重要的是,cnblo ...

  8. 在LoadRunner中进行Base64的编码和解码

    <Base64 Encode/Decode for LoadRunner>这篇文章介绍了如何在LoadRunner中对字符串进行Base64的编码和解码: http://ptfrontli ...

  9. 《Java并发编程的艺术》读书笔记:等待/通知机制

    看这本书之前,对wait和notify认识大概就是,调用wait的线程A堵塞之后,一旦另外有线程调用notify方法.线程A会立马从wait方法处返回.看完这本书后.发现自己的认识实在太肤浅了.... ...

  10. 反射与annotation

    1,可以通过反射取得使用的全部annotation 2,可以通过反射取得指定的annotation. 一个annotation要想变得有意义, 必须结合反射机制取得annotation中设置的全部内容 ...