博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现文本垂直居中水平居中的几种方法
阅读量:5910 次
发布时间:2019-06-19

本文共 3090 字,大约阅读时间需要 10 分钟。

hot3.png

第一种单行垂直居中(line-height)

         如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可,例如

.div-box{height:50px; line-height: 50px; width:100px; overflow: hidden; border:1px solid; }
垂直居中

         代码很简,其中使用overflow:hidden的设置是为了防止内容超出容器或者产生自动换行。如果想让文本水平也居中的话,只要添加text-align:center就行了。

第二种多行文本垂直居中(display:table)

           CSS中的vertical-align属性只会对拥有valign特性的(X)HTML标签起作用,但是在CSS中还有一个display属性能够模拟<table>,采用display-tablediv以表格形式显示,然后就可使用vertical-align的property属性了。

.div-box{ height:200px; display:table; border: 1px solid #f00;}.div-box .div1{vertical-align: middle; display: table-cell;}

文本垂直居中文本垂直居中

         值得注意的是display:tabledisplay:table-cell,前者必须设置在父元素上,后者必须设置在子元素上,因此在设置文本垂直居中时,要为文本多添加一个div。这个方法很不错,但是不幸的是Internet Explorer 6r(甚至 IE8 beta) 并不能正确地理解display:tabledisplay:table-cell,因此这种方法在Internet Explorer 6及以下的版本中是无效的。

第三种position+margin

         这是采用绝对定位div的一种方法,把top设成50%,将需要居中的文本的margin-top设为自身高度的一半,这就要保证需要居中的文本的高度,如果是不确定的可以采用js动态获取高度设置margin-top亦可以达到同样的效果。

.div-box{ position: relative;width: 30%; height: 30%; border: 1px solid #f00;}.div-box .div1{position:absolute; top:50%;left: 50%;margin-left: -5px; margin-right: -5px;  width: 10px; height: 10px; background: #f00;}

第四种还是position+margin

        这个方法使用了一个position:absolute,有固定宽度和高度的div。这个div 被设置为margin:auto;top:0;bottom:0 。但是因为它有固定高度,其实并不能和上下都间距为 0,因此margin:auto;会使它居中。

.div1{position: absolute; margin: auto; top: 0;bottom: 0px;width: 100px;background: #f00;height: 100px;}

如果想要水平居中也是一样将leftright都设置为0

第五种采用变形(transform)

这个方法不仅能实现文本垂直居中,还支持文本高度的可变性,内容块定义transform: translate(-50%,-50%)必须带上浏览器厂商的前缀,还要加上top: 50%; left: 50%;

.div-box{ position:relative; width: 50%;height: 50%; border:1px solid #f00;}.div-box .div1{ height:100px; width:100px; position: absolute; background: #F00;left: 50%;top: 50%;transform :translate(-50%,-50%);-webkit-transform: translate(-50%,-50%);-moz-transform: translate(-50%,-50%);}
文本垂直居中文本垂直居中

第六种行内块元素(Inline-Block)

很受欢迎的一种居中实现方式,基本思想是使用display: inline-block, vertical-align: middle和一个伪元素让内容块处于容器中央。这个概念的解释可以参考CSS-Tricks上的文章《》

.div-box{ text-align: center; overflow: auto; border:1px solid ; height: 500px; }.div-box:after{content: '';   height: 100%;  margin-left: -0.25em; /* To offset spacing. May vary by font */  }.div-box:after,.div-box .div1{  display: inline-block;  vertical-align: middle;  }.div-box .div1{max-width: 99%; }

如果内容块宽度大于容器宽度,比如放了一个很长的文本,但内容块宽度设置最大不能超过容器的100%减去0.25em,否则使用伪元素:after内容块会被挤到容器顶部,使用:before内容块会向下偏移100%。如果你的内容块需要占据尽可能多的水平空间,可以使用max-width: 99%;(针对较大的容器)或max-width: calc(100% -0.25em)(取决于支持的浏览器和容器宽度)。

第七种采用css3新属性Flexbox

。Flexbox是CSS3新增属性,设计初衷是为了解决像垂直居中这样的常见布局问题。相关的文章如《》。

.div-box{display:display: flex; -ms-flex;display: -webkit-flex;align-items: center;-ms-flex-align: center;-webkit-align-items: center;-webkit-box-align: center;align-items: center;justify-content:center;border:1px solid ; height: 500px; }.div-box .div1{width:50px; height:50px; border:1px solid;}

其中align-items属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式,实现垂直居中,justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式,实现水平居中;

转载于:https://my.oschina.net/u/1778998/blog/777558

你可能感兴趣的文章
[Erlang 0129] Erlang 杂记 VI 2014年10月28日
查看>>
单调、加班、血汗工厂,被夸大的富士康背后真相到底是什么?
查看>>
23.2. 基础操作
查看>>
JSDT 应用研究
查看>>
如何添加自定义脚本到开机自启动
查看>>
24.5. IN / NOT IN
查看>>
【批处理学习笔记】第七课:简单的批处理命令(6)
查看>>
Android.Hack.02_Animations
查看>>
[LeetCode] Repeated Substring Pattern 重复子字符串模式
查看>>
Quartz.NET总结(四)Quartz 远程调度
查看>>
2.22. Spring boot with Cache
查看>>
RxVolley使用文档 —— RxVolley = Volley + RxJava + OkHttp
查看>>
[Everyday Mathematics]20150130
查看>>
180.2. UpdateInstaller (AppServer, Plugins, IBMIHS)
查看>>
在自己的网站添加关注新浪关注按钮
查看>>
flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作
查看>>
[数分提高]2014-2015-2第5教学周第1次课
查看>>
Java 单例模式
查看>>
python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)
查看>>
一条简单的sql在11g和12c中的不同
查看>>