写在前面的话:
1: 为了方便起见,接下来我都会把想要居中的元素,不管是一行text,还是一个div,都叫做‘目标元素’, 把包含这个目标元素的叫做‘父元素’。(额。。。。这两个名字如此不对称,我也是醉了。)

2: 我会给一个元素设置一个同名的class和id,class用了写一些实际上跟居中没有关系的css,只是为了好看;id呢用来写跟居中有关的css,免得混淆了。

Case 1: 最简单的单行的行内元素(inline element)
HTML Code:

<div id='child' class='child'><span>aaaaa</span></div>

CSS Code:

.child {height: 100px;width: 100px;background-color: #F7F00E;
}#child {line-height: 100px;text-align: center;
}

垂直居中:只需要给父元素(#child)设置‘等值’的height和line-height.
水平居中:当然就是text-align: center 就行了

Case 2: 一个div在另一个div里面居中
HTML code:

<div id='child' class='child'><div>Apple</div></div>

CSS code:

#child {line-height: 100px;text-align: center;
}

case 2和case 1一样,对于垂直居中来说,只需要设置等值的line-height和height就可以了。达到的效果是:
------->

Case 3: 多个div元素在父div元素中垂直水平居中
HTML code:

<div id='child' class='child'><div>Apple</div><div>Orange</div></div>

CSS code:

#child {line-height: 100px;text-align: center;
}

这时候,我们往#child里面添加了一个div元素,如果我们保持我们之前的#child的css代码不变,这时候呈现的效果是:

因为我们给父元素#child设置了100px的line-height,而line-height是可以继承的,所以它里面的每一个div元素都通过继承拥有了100px的line-height。这个时候还想依赖于line-height来实现垂直居中,显然就不行了。对于这种情况,有多种解决方案:
1: table-cell +vertical-align
HTML code:

<div id='child' class='child'><div>Apple</div><div>Orange</div></div>

CSS code:

#child {display: table-cell;vertical-align: middle;text-align: center;
}

呈现的效果:

2: position relative + absolute + margin
HTML code:

<div id='parent' class='parent'><div id='child' class='child'><div>Apple</div><div>Orange</div></div>
</div>

CSS code:

.parent {height: 90px;width: 90px;border: 1px solid black;
}
.child {height: 60px;width: 60px;background-color: #F7F00E;
}
#parent {position: relative;
}
#child {position: absolute;top: 50%;left: 50%;margin: -30px 0 0 -30px;//修正中心点
}

先来看看效果的演进。从第一个图到第二个图是我们添加了#parend和#child里面的css的效果,但是这时候不包括#child里面的最后一句 margin: -30px 0 0 -30px;。因为我们设置了top和left分别相对父元素间隔50%的距离,但是这个位移是以子元素也就是#child的左上角为原点的,所以如果我们想要达到子元素(#child)和父元素(#parent)的中心重合的话,还得再次向左和向上分别移动宽度和高度的一半的距离,也就是#child里面最后一句代码做的事情。那30px,其实就是#child一半的宽度和高度。
----> ---->

3: position relative + absolute + margin auto
HTML code:
<div id='parent' class='parent'>

 <div id='child' class='child'><div>Apple</div><div>Orange</div></div>
</div>

CSS code:

.parent {height: 90px;width: 90px;border: 1px solid black;
}
.child {height: 60px;width: 60px;background-color: #F7F00E;
}
#parent {position: relative;}
#child {position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto;
}

这个实现的技巧在于,我们给目标元素#child的四个方位都设置了相对父元素为0的距离,但是没有最后一行 margin: auto;就像四个方向都有一个同样大小的力在拉扯着你,这时候产生的效果是呆在原地不动,这时候是左边的效果。但是,当我们添加了最后一行代码:margin: auto;我们的目标元素就会跑到父元素的正中间。margin: 0 auto; 常常被我们用来设置水平位置的居中,所以当我们给它四个方向都设置auto的时候,它就只能在父元素的正中间了。
--->

horizontal center and vertical middle in CSS相关推荐

  1. CSS垂直居中网页布局实现的5种方法

    利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法.我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站. 使用 CSS 实现垂直居中并不容易.有些方法在一些浏览器 ...

  2. 二,表格table的使用细节

    如有不足请不吝赐教! 最先接触的布局表格,表格灵活性,加载速度都不如<div>灵活,但是对于萌新来说再定位某些,例如div里面套文字,而刚接触html+css又不懂得那么多使用<sp ...

  3. PHP使用PhpSpreadsheet操作Excel

    一.PhpSpreadsheet 介绍 1.PhpSpreadsheet 是什么 PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式 PhpS ...

  4. 使用xlsx.js导出有复杂表头的excel

    前端使用xlsx.js导出有复杂表头的excel 参考: Vue项目中使用xlsx-style导出有格式的表格,这个博客中的实现是针对单个excel手写合并样式,比较繁琐. 我这里实现了根据table ...

  5. 【翻译】将Ext JS Grid转换为Excel表格

    原文:Converting an Ext 5 Grid to Excel Spreadsheet 稍微迟来的礼物--Ext JS Grid转为Excel代码,现在支持Ext JS 5! 功能包括: - ...

  6. ASP程序快速生成Excel文件

    ASP程序快速生成Excel文件 在一个web项目中,要求将数据生成Excel文件保存到本地,最早使用的方法是直接使用Microsoft的Office Web组件,但是总体感觉是慢(微软的通病).然后 ...

  7. C#中写入Excel

    using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Da ...

  8. python如何操作excel 基础代码

    一 基础操作 1打开excel表格并获取表格名称wookbook = load_workbook(filename = 表格文件路径)(注意只能打开存在的表格,不能用该方法创建一个新表格文件)work ...

  9. 自定义Excel导出简易组件

    1.组件原理 excel的数据存储是以xml格式存储的,所以导出Excel文件可以通过生成XML来实现.当然XML必须符合一定的格式要求. 2.组件实现 (1)新建类库文件"MyExcel& ...

最新文章

  1. gzip压缩後的javascript在ie下不加载
  2. 利用Memcache解决数据库高并发访问的瓶颈问题
  3. 室内主题元素分析图_主题乐园包装——“树”造型案例精选分享
  4. 万字总结webpack实战案例配置
  5. R中因子分析的得分计算
  6. 计算机硬件参数及性能判断,小菜硬件杂谈 如何从显卡型号判断性能
  7. android ios 声音大小,嫌手机声音太小?打开这个,声音瞬间放大10倍!
  8. 共享远程计算机文件夹,怎么远程访问共享文件夹
  9. 图片处理之thumbnailator和TwelveMonkeys的使用
  10. pom 备注_POM 500P物性表
  11. 军事ar虚拟现实电子沙盘系统的功能
  12. 004.前端面试排雷之唱、跳、rap三步曲(一)唱篇
  13. HIVE常用参数配置
  14. 北华大学c语言题库百度云,北华大学C语言题库精简打印版(全).doc
  15. 智能井盖被纳入《城市综合管廊运营服务规范》国标,喜大普奔
  16. python老王卖西瓜_搞不懂Python?大神教你用Python买西瓜!
  17. APP项目开发失败案例经验汇总
  18. XYQ加密算法——动态可逆加密算法。
  19. python byte类型_Python3的字节类型(bytes)
  20. 实现数据库存入html代码,并在前端就页面返回。

热门文章

  1. linux内核 删除文件_Linux内核与根文件系统的关系详解
  2. serialport 延时计时器 修改_为了夜经济,青岛真是拼了!地铁公交延时运营,再也不怕没车了...
  3. linux shell期末测试,LINUX期末复习---SHELL编程
  4. java判断 图片_java判断是否为图片的步骤和方法
  5. perl 字符串删除末尾几个字符_perl 第六弹 变量 II
  6. crm系统是什么很棒ec实力_易观发布2019中国CRM实力矩阵,EC成为领先者
  7. 计算机硬件实验教程pdf,计算机硬件技术基础实验教程答案(重庆大学)
  8. linux系统下c语言程序需要改动的地方,如何在Linux系统环境下进行C语言开发
  9. opencv-api getRotationMatrix2D
  10. 数据结构之基于Java的顺序队列实现