在前端页面的布局方面,很多时候需要用到垂直居中,如果父集元素或子元素的高度是固定的那么垂直居中可以用line-height或者定位 top:50%;margin-top:- height/2 px;实现,那么如果父元素的高度和子元素的高度都不是固定值呢?

下面就总结一下使用css进行垂直居中布局的方法及使用环境。最好用的在最后。

html 使用如下:

  1. <div class="parent">
  2.  
  3. <div class="child"> </div>
  4.  
  5. </div>

1.父元素高度与子元素高度差值为固定值,对父元素使用padding使子元素居中

当父元素与子元素差值为固定值 H px 时,可以对父元素使用上下边的padding:H/2 px;  把子元素居中。

  1. .parent{
  2. width:200px;
  3. height:auto;
  4. padding:50px 0;
  5. background-color: #13B202;
  6. }
  7. .child{
  8. width: 40px;height: 40px;
  9. margin:0 auto;
  10. background-color: #000;
  11. }

效果如下:

2. 父集高度为固定值,父集使用 line-height ,子集使用 display:inline-box ; 

对父元素使用line-height:父集的高度;

由于line-height只对行元素有效果,所以改变子元素的display属性为inline-block,这样,行元素即可以有行元素属性,又能够像块元素一样设置宽高。

最后对子元素设置vertical-align: middle; 使其在行高内垂直居中,这样居中布局就实现了。

  1. .parent{
  2. width: 200px;
  3. height: 200px;
  4. text-align: center;
  5. line-height: 200px;
  6. background-color: #13B202;
  7. }
  8. .child{
  9. display: inline-block;
  10. width: 40px;height: 40px;
  11. vertical-align: middle;
  12. background-color: #000;
  13. }

效果如下:

3.子元素高度固定,如果需要横向居中,子元素宽度也需固定,对子集使用定位 使其居中。

当子元素 的高度固定,无论父元素高度如何变化,子元素都可以通过 top:50%; margin-top: - 子元素高度/2 px ;使其垂直居中,这种一般用于父集高度不固定,会随着屏幕高度或者其他因素变化的情况使用,例如弹窗的垂直居中。对于水平方向的居中也一样,使用left:50%;margin-left:-子元素宽度/2 px ;

  1. .parent{
  2. position: relative;
  3. width: 100%;
  4. height: 100%;
  5. background-color: #13B202;
  6. }
  7. .child{
  8. position: absolute;
  9. left: 50%;
  10. top: 50%;
  11. width: 40px;
  12. height: 40px;
  13. margin-left: -20px;
  14. margin-top: -20px;
  15. background-color: #000;
  16. }

效果如下:

4. 父元素高度不固定,子元素高度也不固定 。

这种情况下上面列出的都不能使用,当遇到这种情况时确实很让人头疼,不知如何是好,那么使用css3的 box-align 和 box-pack 进行水平居中,使用align-items进行垂直居中。

这种情况下,无论父元素和子元素宽高如何变化,子元素都能够保持水平和垂直居中显示。唯一不足之处就是对于不支持CSS3的浏览器不能使用。

  1. .parent{
  2. width: 200px;
  3. height: 200px;
  4. background-color: #13B202;
  5. display: flex;
  6. display: -webkit-flex;
  7. -webkit-box-pack: center;
  8. justify-content: center;
  9. -webkit-box-align: center;
  10. -ms-flex-align: center;
  11. -webkit-align-items: center;
  12. align-items: center;
  13. }
  14. .child{
  15. width: 40px;
  16. height: 40px;
  17. background-color: #000;
  18. }

效果如下:

5. 使用定位 和 css3 的 transform 属性, 对.child 定位 left: 50%; top: 50%; transform: translate(-50%,-50%);

无论父级和子集的宽高如何变化,它都能实时居中,吼吼吼,效果图就不放了哈哈哈~

CSS布局-垂直居中问题的更多相关文章

  1. css布局 - 垂直居中布局的一百种实现方式(更新中...)

    首先将垂直居中的现象和实现方式两大方向细分类如下: 接下来逐条累加不同情况下的垂直居中实现. 目录: 一.父元素高度固定时,单行文本 | 图片的垂直居中 1. line-height行高简单粗暴实现法 ...

  2. css布局--垂直居中

    1. 使用table-cell和vertical-align实现垂直居中 html <div class="parent">使用table-cell和vertical- ...

  3. CSS布局中的水平垂直居中

    CSS布局中的水平垂直居中 各位好,先说两句题外话.今天是我开通博客园的博客第一天,虽然我申请博客园的账号已经有一年半了,但是由于各种原因迟迟没有开通自己的博客.今天非常有幸开通博客,在此也写一篇关于 ...

  4. Flexbox制作CSS布局实现水平垂直居中

    Flexbox实现一个div元素在body页面中水平垂直居中: <!DOCTYPE html><html lang="en"><head>  & ...

  5. CSS布局之-水平垂直居中

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.另外,文中的css都是用less书写的,如果看不懂less,可以把我给的 ...

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

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...

  7. 还在为垂直居中苦恼?CSS 布局利器 flexbox 轻轻松松帮你搞定

    传统的 CSS 布局方式是基于盒模型(它是根据盒子与父盒子以及兄弟盒子的关系确定大小和位置的算法),实现时依赖于 block, inline, table, position, float 这些属性, ...

  8. CSS布局:元素垂直居中

    CSS布局之元素垂直居中 本文将依次介绍在不同条件下实现垂直居中的多种方法及简单原理 Tip:下文中说的适用场景只是举了几个简单的例子方便读者理解.实际应用场景太复杂,生搬硬套容易出错.最重要的是掌握 ...

  9. CSS布局:元素水平垂直居中

    CSS布局:元素水平垂直居中 本文将依次介绍在不同条件下实现水平垂直居中的多种方法 水平垂直居中是在写网页时经常会用到的需求,在上两篇博客中,分别介绍了水平居中和垂直居中的方法.本文的水平垂直居中就是 ...

随机推荐

  1. 考研编程练习---StringMatching(后缀表达式)

    题目描述: Finding all occurrences of a pattern in a text is a problem that arises frequently in text-edi ...

  2. Microsoft .NET Framework 安装未成功(证书方面)

    问题:在为windows7 sp1安装framework 4.6.2的时候,有两次证书方面的报错 // 错误1: 无法建立到信任根颁发机构的证书链 // 错误2: 已处理证书链,但是在不受信任的根证书 ...

  3. Objective-C 方法交换实践(二) - 方法指针交换

    一. 基本函数 根据 sel 得到 class 的实例方法 Method class_getInstanceMethod(Class cls, SEL name) 根据 sel 得到 class 的函 ...

  4. 【JUC源码解析】CyclicBarrier

    简介 CyclicBarrier,一个同步器,允许多个线程相互等待,直到达到一个公共屏障点. 概述 CyclicBarrier支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后 ...

  5. power sequece

  6. POJ 3278 Catch That Cow (附有Runtime Error和Wrong Answer的常见原因)

    题目链接:http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  7. 7个Node.js的Web框架

    NodeJS也就是Node,是众所周知的使用javascript构建Web应用框架,它启动一个服务器非常简单,如下: var http = require('http'); http.createSe ...

  8. sqlmap+tor解决ip黑名单限制

    1.安装tor浏览器(8.0.8)并配置好 旧版tor是需要Vidalia配合的,新版貌似集成了?还是怎样的,反正不需要了 2.启动tor浏览器 3.启动sqlmap python sqlmap.py ...

  9. spark-local-运行异常-Could not locate executable null\bin\winutils.exe in the Hadoop binaries

    windows下-local模式-运行spark: 1.下载winutils的windows版本 GitHub上,有人提供了winutils的windows的版本,项目地址是:https://gith ...

  10. Android 对话框(Dialogs)

    对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 1.对话框设计 如需了解有关如何设计对话框的信息(包括语言建议),请阅读对话框设 ...