一、水平居中

方法① :行内元素 (父元素)text-align,(子元素)inline-block

.parent{text-align: center;}
.child{display: inline-block;}
总结:

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

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

适用场景:子元素数量少(或只有一个),并且需要兼容低版本浏览器时使用,不受float影响
 
方法②:块状元素   使用margin:0 auto来实现
.child{width:200px;margin:0 auto;} 

优点:兼容性好

缺点:需要指定宽度

前提:用于子元素上,不受float影响

方法③:(子元素)display:table;margin:0 auto;

.child{display:table;margin:0 auto;} 

优点:只需要对自身进行设置

缺点:不兼容IE6和IE7

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

方法④:绝对定位实现 (父元素)position:relative,(子元素)absolute+left+transform(translateX(-50%))

.parent{position:relative;}
/*或者实用margin-left的负值为盒子宽度的一半也可以实现,不过这样就必须知道盒子的宽度,但兼容性好*/
.child{position:absolute;left:50%;transform:translate(-50%);}
优点:不影响其他元素
缺点:transform兼容性,IE9及以上可用

方法⑤:flex+justify-content/margin

/*第一种方法*/
.parent{display:flex;justify-content:center;}
/*第二种方法*/
.parent{display:flex;}
.child{margin:0 auto;}

第一种方法:

优点:只设parent
缺点:flex兼容性差,而且比较耗资源

第二种方法:

优点:代码简单
缺点:污染父元素,flex兼容性问题,如果进行大面积的布局可能会影响效率

二、垂直居中

方法① :单行文本 设置line-height等于父元素高度

.child{ height:20px; line-height:20px} 
优点:代码简单
缺点:只适合一行文本,多行文本则不可以
这是一种很流行的方法, 也适应IE7.
 
方法② :行内块级元素  使用display:inline-block; vertical-align:middle;
.child{display:inline-block; vertical-align:middle}
.parent:after{display:inline-block; vertical-align:middle}

方法 :块级元素 使用vertical-align的时候,由于对齐的基线是用行高的基线作为标记,故需要设置line-height或设置display:table-cell;

/*第一种方法*/
.parent{display:table-cell;vertical-align:middle;height:20px;}
/*第二种方法*/
.parent{display:inline-block;vertical-align:middle;line-height:20px;}
优点:兼容性比较好,换成table可以兼容IE6,7
缺点:table-cell不能和float、position:absolute同时设置。(只能在外parent外套一层div.wrap才能设置float)
 
若元素的高度不一定的话
vertical-align只有在父层为 td 或者 th 时, 才会生效, 对于其他块级元素, 例如 div、p 等, 默认情况是不支持的. 为了使用vertical-align, 我们需要设置父元素display:table, 子元素 display:table-cell;vertical-align:middle;
/*第一种方法*/
.parent{display:table}
.child{display:table-cell;vertical-align:middle;}
优点:元素高度可以动态改变,不需要css定义,如果父元素有足够空间,该元素不会被截断
缺点:IE6、7,甚至IE8 beta中无效
 
方法④:使用绝对定位
.parent{position:relative;}

.child{positon:absolute;top:50%;transform:translate(0,-50%);} 
优点:基本只设置子元素,不影响其他元素
缺点:transform兼容性问题

方法⑤:使用flex实现方法 (父)flex + align-items

.parent{display:flex;align-items:center;} 
优点:只要设置parent
缺点:flex和align-items的兼容性

三、【终极需求】水平垂直同时居中!

方法①:元素高度固定

.parent{position:relative;}
.child{position:absolute;top:50%;left:50%;width:固定;height:固定;margin-top:-0.5*高度;margin-left:-0.5*宽度;}

适用于所有浏览器

方法②:元素高度固定

.parent{position:relative;}
.child{position:absolute;width:固定;height:固定;top:;left:;right:;
bottom:;margin:auto
}

适用于所有浏览器

方法③:(父)text-align + table-cell + vertical-align,(子)inline-block(兼容性方案)

.parent{display:table-cell;vertical-align:middle;text-align:center;}
.child{display:inline-block;}

方法④:使用绝对定位

.parent{position:relative;}
.child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);}
优点:基本只设置子元素,不影响其他元素
缺点:transform兼容性问题
方法⑤:利用flex实现
.parent{display:flex;justify-content:center;align-items:center;}
优点:只要设置parent
缺点:flex和align-items的兼容性

第147天:web前端开发中的各种居中总结的更多相关文章

  1. web前端开发中的各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  2. WEB前端开发中的图片压缩

    web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...

  3. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

  4. Web前端开发中的小错误

    Web前端开发中的小错误 错误1:表单的label标签跟表单字段没有关联 利用“for”属性允许用户单击label也可以选中表单中的内容.这可以扩大复选框和单选框的点击区域,非常实用. 错误2:log ...

  5. web前端开发中常用的尺寸和位置

    我们在日常web前端开发过程中,会经常用到各种尺寸和位置.通常是js做动画的时候.轮播图,滚屏动画,粒子,碰撞检测,拖拽,滚动加载等等.这里我将常用的尺寸和位置的获取进行总结,不包括canvas,SV ...

  6. px em rem在WEB前端开发中的区别

    我们都知道基于像素的字体大小所用的单位是px,但是随着响应式设计的不断火热,基于相对字体大小的单位em变开始流行起来.当然,rem也在Web前端开发人员讨论如何更好设置字体大小的讨论话题之列.是不是需 ...

  7. web前端开发中的浏览器兼容性总结

    1.居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto; 2.高度问题 两上下排列或嵌套的div,上面的div设置高度(height),如果di ...

  8. WEB前端开发中的SEO注意点

    近几年来,SEO在国内得到了蓬勃的发展,其中很多的SEO技术越来越体现在web前端的一些细节上.要做好SEO,WEB前端这一块也要做必不可少的优化. 这就要求我们WEB前端工程师在开发页面的时候,要写 ...

  9. web前端开发中Nodejs、Grunt、npm等的介绍、使用

    一.Nodejs的安装: Grunt和所有grunt插件都是基于nodejs来运行的,如果你的电脑上没有nodejs,就去安装吧.去 https://nodejs.org/ 上,点击页面中那个绿色.大 ...

随机推荐

  1. 20170531 课堂实践 MyOD

    MyOD 题目 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 Linux下od功能详解 od(octal dump)命令可以以八进制.十进制. ...

  2. 回顾RAC安装过程中对ASM的处理

    1 首先建立好节点间共享的磁盘,要注意从各节点看到的磁盘的序号.名称一致. 2 通过某一个节点,对共享磁盘进行格式化. 3 在Grid Infrastructure 中, 有一个为OCR选择存储介质的 ...

  3. 八月暑期福利,10本Python热门书籍免费送!

    八月第一周,网易云社区联合博文视点为大家带来Python专场送书福利,10本关于Python的书籍内容涉及Python入门.绝技.开发.数据分析.深度学习.量化投资等.以下为书籍简介,送书福利请见文末 ...

  4. 一个web应用的诞生(12)--再探首页

    就要面对本章的一个难点了,说是难点可能仅仅对于我来说,毕竟我是一个js渣,既然首页打算使用动态加载的形式,那么与后台交互的方式就要进行选择,目前比较流行的为RESTful的形式,关于RESTful的文 ...

  5. Android 自动化测试及性能数据采集的 Python 脚本

    文主要介绍一个基于 uiautomator2 封装的一个 Python 库 android-catcher ,该库的功能主要有对 Android 设备进行 UI 自动化测试 和 采集手机性能数据 ,适 ...

  6. Phaser Matter Collision Plugin 碰撞插件 -- iFiero技术分享

    collision-simple-demo Phaser 自带的Arcade虽然易用,但复杂的物理碰撞明显就不够用了,于是Matter等物理引擎还是不得不学的,以下是Matter物理体碰撞的一个插件, ...

  7. 【第八章】MySQL数据库备份—逻辑备份

    一.数据库备份 1.命令简介: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql1)关于数据库名: -A, --all-databases       ...

  8. Pycharm实现服务器端代码的远程调试

     Pycharm是很多人在学习机器学习时的常用IDE.但是,当代码需要庞大计算资源的时候,我们往往需要借助远程服务器的GPU资源.很多人都是将代码拷贝到服务器,然后运行,但是当修改调试的时候,很不方便 ...

  9. 关于SQL 语句常用的一些查询收藏

    create database xuesheng go use xuesheng go /*学生表*/ create table Student ( S# ,) primary key, Sname ...

  10. Yogurt factory

    Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...