父容器与子容器宽、高不确定,子容器实现水平、垂直居中的几种方式

2017-03-09  本文已影响262人  3314e96d10b4

之前写在博客园上的文章

年前前端圈蛮热闹的,大家撕的挺欢的,阿当想说的并不是固步自封,抵制学习新东西,而是想说要夯实基础,然后对框架有甄别能力的基础上再去有选择的学习。归根结底还是要掌握好根本,也就是道,其余的工具都不过是术,得道了,术这些东西自然手到擒来。好了,胡扯打住。阿当说区别真前端和伪前端其中一点就是能说出几种HTML元素的垂直居中方式。
那我在这里总结一下我get的几种方式。
代码结构如下,父容器,子容器宽高不确定

<div class="parent">
  <div class="child"></div>
</div>

一、实现子容器水平居中的几种方式:

结语:我在上述四种实现水平居中的方式里都在反复提及一个概念。即在使用了某种css属性之后,宽度不确定的子容器,此时它的宽度具有了收缩性(宽度由内容宽度决定),从而实现了其在父元素上的水平居中效果!


二、实现子容器的垂直居中的几种方式:

<div class="parent">
  <div class="child"></div><span></span>
</div>

一丝大神也有对这个方法的介绍,参照http://www.iyunlu.com/view/css-xhtml/77.html,方法也很巧妙,是利用添加伪元素来替代span, .parent:before{conten: ''; display: inline-block; height: 100%; vertical-align: middle;}。 实现思路是一样的。//但是要考虑到IE8+以上才支持:after or :before 伪元素 :)
这是我的demo页面,http://codepen.io/CoolHector/pen/KzwvpQ 我给子容器插入了一段文本来充开内容宽度。

综上,实现子容器水平、垂直居中对齐的方式有(父容器,子容器宽高不确定。)

  1. 父容器.parent{text-align: center; display: table-cell; vertiacal-align: middle;}。 子容器.child{display: inline-block;}
  2. 利用定位。父容器.parent{position: relative;} 子容器.child{position: absolute; top: 50%, left: 50%; transform: translate(-50%, -50%); }
  3. 利用弹性布局。父容器display: flex; justify-content: center; align-items: center;

拓展阅读:
关于display: table-cell:http://www.zhangxinxu.com/wordpress/?p=1187
以及http://www.blueidea.com/tech/web/2008/6257.asp(注意这篇文章有三页~别匆匆一瞥就关了)
关于display: flex 弹性布局:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool
关于BFC与hasLayOut: http://www.cnblogs.com/pigtail/archive/2013/01/23/2871627.html
未知高度多行文本垂直居中: http://www.iyunlu.com/view/css-xhtml/77.html

上一篇下一篇

猜你喜欢

热点阅读