浅谈position、table-cell、flex-box三种垂直(水平)居中技巧
一、首先是喜闻乐见的position方法,经典且万能,用法如下:
父元素{
position:relative;
}
子元素{
position:absolute;
top:50%;
left:50%;
margin-top:/*该元素height*0.5的负值*/;
margin-left:/*该元素width*0.5的负值*/;
}
不需要水平居中可以去掉left和margin-left。
划重点:需要父元素和子元素都定义宽高,自适应是不可能自适应的,这辈子都不可能自适应的。
二、 display:table-cell能够使大小不固定的元素实现垂直居中布局,先来一发用法:
父元素{
display:table-cell;
vertical-align:middle;
}
子元素{
vertical-align:middle;
}
table-cell布局除了常见的实现不同宽高的图片垂直居中,还能做到自适应两栏布局(评论区等):

代码如下:
HTML部分:
<div class="wrap">
<div class="img">
<img src="http://img5.imgtn.bdimg.com/it/u=416202619,4025660570&fm=26&gp=0.jpg" width="80px" height="80px" alt="">
</div>
<div class="text">
<p>文字部分 </p>
</div>
</div>
CSS部分:
<style type="text/css">
.wrap{
display: table-row;
}
.img{
display: table-cell;
vertical-align: middle;
text-align: center;
width: 100px;
border: 1px solid #000;
}
.text{
display: table-cell;
width: 300px;
border: 1px solid #000;
padding: 10px;
}
.wrap div+div{
border-left: none;
}
</style>
另外table-cell还能自动使多个子元素等宽分布,不需要自己计算宽度:

代码如下:
ul{
list-style-type:none;
display: table;
width: 250px;
padding:;
}
li{
display: table-cell;
text-align: center;
}
li+li{
border-left: 1px solid #000;
}
划重点:1、IE6/7不支持; 2、table-cell不支持margin属性(但支持padding),就很僵硬; 3、尽量不要和浮动/定位同时用,会破坏它的css属性。
三、如果你用ie我们就做不成朋友之弹性布局神器flex-box,用法如下:
父元素{
display:flex /* 行内元素用inline-flex */
align-items:center;/*当主轴为水平方向(默认)*/
}
原理是使flex-box的子元素(伸缩项目)沿着侧轴方向(当默认flex-direction:row时,侧轴就是垂直方向)居中对齐。
使用flex-wrap,还可以使伸缩容器里的内容折叠显示:

当调整视口宽度缩小到480px时:

代码如下:
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{margin: 0;padding: 0;}
#box{
display: flex;
flex-wrap: wrap;
justify-content:center;/* 主轴方向居中对齐*/
align-items: center;/* 侧轴方向居中对齐*/
padding: 50px;
font-size: 2.5em;
font-weight: bold;
text-align: center;
border: 1px solid #000;
}
</style>
</head>
<body>
<div id="box">
<p class="item1">超好吃的</p>
<p class="item2">♥</p>
<p class="item3">麻辣小龙虾</p>
</div>
</body>
浏览器兼容情况:

低版本浏览器兼容性解决:
display: -moz-box; /* 低版本firefox */
display:-webkit-box;/* IOS 6-,safari 3.1-6 */
------
display: -ms-flexbox; /* IE10 */
display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */
display: -moz-flex; /* 较低版本firefox */
display: flex; /*IE11, Chrome29+, FireFox 20+ */
参考:
兼容:
https://zhuanlan.zhihu.com/p/21640023
http://www.cnblogs.com/iriszhang/p/6102524.html
flex-box的兼容性bug解决:
http://www.w3cplus.com/css3/normalizing-cross-browser-flexbox-bugs.html
浅谈position、table-cell、flex-box三种垂直(水平)居中技巧的更多相关文章
- 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式
一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...
- 浅谈Spring解决循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...
- JS 导出Table为excel的三种可行方法
[html] view plain copy<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- 浅谈Android项目----JSON解析(4种解析技术详解)
json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...
- 《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sinat_17736151/articl ...
- 浅谈MySQL同步到ElasticSearch的几种方式及其优缺点
同步双写 优点:业务逻辑简单. 缺点: 硬编码,有需要写入mysql的地方都需要添加写入ES的代码: 业务强耦合: 存在双写失败丢数据风险: 性能较差:本来mysql的性能不是很高,再加一个ES,系统 ...
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
ViewPagerViewPager类提供了多界面切换的新效果.新效果有如下特征:[1] 当前显示一组界面中的其中一个界面.[2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分 ...
- 浅谈HTML5单页面架构(三)—— 回归本真:自定义路由 + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4650310.html 不过,这一篇,我想进一步探讨一下这两个框架的优缺点,另外,再进一步,抛开这两个框架,回到本真, ...
- 浅谈position: absolute和position:relative
一.在此先说一下文档流的概念: 1,文档流定义: 百度百科定义:文档流是文档中可显示对象在排列时所占用的位置. 大多网友的理解:元素的位置由元素在 (X)HTML 中的位置决定.将窗体自上而下分成一行 ...
随机推荐
- P1891 疯狂LCM
\(\color{#0066ff}{ 题目描述 }\) 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N ...
- 序列终结者 BZOJ 1251 Splay
题目背景 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...
- 远程私有库的创建 pod 组件化
参考: http://www.cnblogs.com/hs-funky/p/6780203.html http://www.jianshu.com/p/4b63dfbd8be7 http://ww ...
- clojure with postgres
主要关注访问pg.不关心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbc http://clojure-doc.org/art ...
- vim简单配置(tab,行号,自动缩进)
进入到个人目录:cd - 打开vimrc文件:vim .vimrc 在文件中添加以下内容:set shiftwidth=4 #按tab键缩进4个空格set softtabstop=4 ...
- P4824 [USACO15FEB]Censoring (Silver) 审查(银)
传送门 一个串的匹配肯定考虑KMP 那就暴力KMP 记录一下到每个字符时匹配的位置 找到一个符合的串就标记然后暴力回跳 感觉好像太暴力了... #include<iostream> #in ...
- 剧本--ansible
剧本不喜欢, 1.1 编写剧本规范:(PYyaml语法格式文件) 剧本中有层级划分 每个层级都要用两个空格进行区分 第一级标题 第二级标题 第三级标题 强调注意:一定使用ansible软件配置剧本时, ...
- Java中的ThreadLocal使用
ThreadLocal用于下面的场景: 1. 不允许多个线程同时访问的资源 2. 单个线程存活过程只使用一个实例 官方定义如下: This class provides thread-local va ...
- phpstrom的xdebug开启和yii2下的分页的链接
phpstrom的xdebug开启 1.修改php.ini文件(修改完重启apaceh) xdebug.remote_enable = onxdebug.idekey= PHPSTROM [注意:远程 ...
- Vue中的scoped和scoped穿透
1.什么是scoped 在Vue文件中的style标签上有一个特殊的属性,scoped.当一个style标签拥有scoped属性时候,它的css样式只能用于当前的Vue组件,可以使组件的样式不相互污染 ...