CSS实现文字垂直居中

Posted 小跳不会Coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS实现文字垂直居中相关的知识,希望对你有一定的参考价值。

一、问题描述: 当高度固定或不固定时,单行或多行文本难以实现垂直居中;

二、解决方法:

1、使用line-height属性,将line-height设置与元素高度等高。

局限性:只适用于单行文本,局限性大。

代码:

.box 
	height: 100px;
	line-height: 100px;
	white-space: nowrap;

2.padding:设置相等的上下padding值。

局限性:有高度限制时不能垂直居中。

代码:

.box
	padding-top: 30px;
	padding-bottom: 30px;


3.绝对定位居中:top:0; bottom:0; left:0; right:0; margin:auto;

元素在过度受限情况下,将margin设置为auto,浏览器会重算margin的值。(过度受限指的是同时设置top/bottom与height或者left/right与width。)

优点:支持响应式,只有这种方法在resize之后仍然垂直居中

缺点:使用绝对定位时元素必须有明确高度,没有显式设置overflow时,内容超过元素高度时会溢出,没有滚动条。IE浏览器不支持

代码:

.box/*display:none;*/
	position:absolute;
	width:200px;
	height:200px;
	top:0;
	bottom:0;
	left:0;
	right:0;
	margin:auto;
	background:#000; 
	resize:both;/*用于设置了所有除overflow为visible的元素*/
	overflow:auto; 

4.固定高度定位居中:top: 50%;height: 100px;margin-top: -50px;

优点:代码量少、浏览器兼容性高,支持ie6,ie7
缺点:不支持响应式(不能使用百分比、min/max-width),高度固定。

代码:

.parent 
	position: relative;


.child 
	position: absolute;
	top: 50%;
	height: 100px;
	margin-top: -50px; /*transform: translateY(-50%);*/

5.不固定高度定位居中:top:50%;left:50%;transform:translate(-50%, -50%)

缺点:不支持响应式(不能使用百分比、min/max-width)

代码:

.parent position: relative;
.child
	position:absolute;
	top:50%;
	left:50%;
	transform:translate(-50%, -50%);

6.table-cell方式居中:dispaly:table;display:table-cell;vertical-align:middle;

display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签。

原理:利用表布局特点,vertical-align设置为middle后,单元格中内容中间与所在行中间对齐。

优点:支持任意内容的可变高度、支持响应式布局

缺点: 每一个需要垂直居中的元素都会需要加上额外标签(需要table、table-cell两个额外元素);

IE浏览器不支持

代码:

.father 
	height:200px; 
	display:table; 


.son
	border:1px solid #000; 
	width:760px;
	vertical-align:middle;
	display:table-cell; /*cell垂直居中,如果外层div不为table则tablecell须有高度*/ 

7.弹性盒式布局居中:display: flex;align-items:center;

优点:真正的垂直居中布局

缺点:ie11才开始支持弹性布局

代码:

.box
	display:-webkit-box;
	display:-moz-box;
	display:-ms-flexbox;
	display: -webkit-flex;
	display:flex; 
	-webkit-align-items:center;
	align-items:center;
	-webkit-justify-content: center;
	justify-content: center;

总结

1、只有单行文本时,可以将line-height设置与元素高度等高

2、外层div与内层div高度均固定时,可以使用设置相等的上下padding值;

3、当高度固定时,可以采用固定高度定位居中:top: 50%;height: 100px;margin-top: -50px;此方法对IE浏览器支持较好;

4、当高度不固定时,可以采用弹性盒式布局居中:display: flex;align-items:center;此方法操作简单,但ie11才开始支持弹性布局;或者采用table-cell方式居中:dispaly:table;display:table-cell;vertical-align:middle;此方法支持任意内容的可变高度,但操作繁琐,并且IE8以上的浏览器才支持;

用CSS如何实现单行图片与文字垂直居中

vertical-align实现单行图片与文字垂直居中:
vertical-align
初始值: baseline(缺省值)
可否继承:否
适用于: 内联元素
说明:vertical-align:baseline使元素的基线同父元素的基线对齐。
警告:vertical-align不能影响表格单元中的内容的对齐,对于块元素中的内容也一样。

文字不多,但时常有人范错误,有人说我用了为什么没有效果呢?首行看一下他的代码:
.stylevertical-align:middle;.....
HTML:<div class="style"><img src="地址" />...<div>
  
分析:从上面的代码可以看出错误就是把样式应用在块元素中了

我们只需要改样式为:
.style imgvertical-align:middle;.....

如果STYLE中有其它如INPUT或其它内联元素可写成:
.style img,.style.inputvertical-align:middle;.....

.style *vertical-align:middle;.....
/*在不影响其它元素的情况下使用这个通配符*/
  
以上是在没有设置高度/行高的事情下,如果加入了高度和行高的事情下FF可以支持,IE6以下则不完全支持,看以下测试结果。(为了增加明显的效果对图片适当增加了高度)

总结:对于单行图片文字垂直居中(有图片的情况下)
1.当没有高度行高时,我们只要简单的对内联元素应用vertical-align:middle;就可以了。此外对于一个图片和文字的高度相差无几的,不用这个样式也是可以的。
2.对于有行高或有行高+高度的,FF可以正确显示,ie6失效。所以也只能对IE6以下版本使用KACK了!现在IE7已经改正了这个错误。
3.对2补充一下,可以用不定高度,用上下补白的方法,这样就可以兼容IE6了。
参考技术A 这个问题是在做页面中经常会遇到的问题,首行我们先看一下最基础的的吧!以下选自(CSS权威指南)以下为引用的内容:vertical-align初始值: baseline(缺省值)可否继承:否适用于: 内联元素说明:vertical-align:baseline使元素的基线同父元素的基线对齐。警告:vertical-align不能影响表格单元中的内容的对齐,对于块元素中的内容也一样。以下为引用的内容:.stylevertical-align:middle;.....HTML:<div class="style"><img src="地址" />...<div>分析:从上面的代码可以看出错误就是把样式应用在块元素中了我们只需要改样式为以下为引用的内容:.style imgvertical-align:middle;.....如果STYLE中有其它如INPUT或其它内联元素可写成以下为引用的内容:.style img,.style.inputvertical-align:middle;.....或.style *vertical-align:middle;...../*在不影响其它元素的情况下使用这个通配符*/以上是在没有设置高度/行高的事情下,如果加入了高度和行高的事情下FF可以支持,IE6以下则不完全支持,看以下测试结果。(为了增加明显的效果对图片适当增加了高度)总结:对于单行图片文字垂直居中(有图片的情况下)1.当没有高度行高时,我们只要简单的对内联元素应用vertical-align:middle;就可以了。此外对于一个图片和文字的高度相差无几的,不用这个样式也是可以的。2.对于有行高或有行高+高度的,FF可以正确显示,ie6失效。所以也只能对IE6以下版本使用KACK了!现在IE7已经改正了这个错误。3.对2补充一下,可以用不定高度,用上下补白的方法,这样就可以兼容IE6了。本回答被提问者采纳 参考技术B

利用css的text-align:center代码来实现。

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>图片文字垂直居中</title>

<style>

.cont p

text-align:center

</style>

</head>

<body>

<div class="cont">

<p><img src="这里是图片url" /></p>

<p>这里是文字</p>

</div>

</body>

</html>

效果图:

参考技术C 以下选自(CSS权威指南)

以下为引用的内容:
vertical-align
初始值: baseline(缺省值)
可否继承:否
适用于: 内联元素
说明:vertical-align:baseline使元素的基线同父元素的基线对齐。
警告:vertical-align不能影响表格单元中的内容的对齐,对于块元素中的内容也一样。

  
文字不多,但时常有人范错误,有人说我用了为什么没有效果呢?首行看一下他的代码。

以下为引用的内容:
.stylevertical-align:middle;.....
HTML:<div class="style"><img src="地址" />...<div>

  
分析:从上面的代码可以看出错误就是把样式应用在块元素中了
我们只需要改样式为

以下为引用的内容:
.style imgvertical-align:middle;.....

  
如果STYLE中有其它如INPUT或其它内联元素可写成

以下为引用的内容:
.style img,.style.inputvertical-align:middle;.....

.style *vertical-align:middle;.....
/*在不影响其它元素的情况下使用这个通配符*/

  
以上是在没有设置高度/行高的事情下,如果加入了高度和行高的事情下FF可以支持,IE6以下则不完全支持,看以下测试结果。(为了增加明显的效果对图片适当增加了高度)

以上是关于CSS实现文字垂直居中的主要内容,如果未能解决你的问题,请参考以下文章

前端面试 CSS— 实现布局:div垂直居中,左右10px,高度始终为宽度一半

css如何控制文字垂直居底

利用CSS怎么让文字居中

css实现水平垂直居中

CSS label中的文字垂直居中,有简单代码。

css如何使div里面的文字垂直对齐