css实现文字垂直居中问题

一、问题描述

当高度固定或者不固定时,单行或者多行文本难以实现垂直居中;

二、产生原因

1、高度不固定,CSS 本身并没有提供相应的 API 支持(确切来说是提供不全);

2、浏览器不支持;

三、解决方法:

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

优点:简单明了;

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

代码:

.center-text-trick {height: 100px;line-height: 100px;

white-space: nowrap;}

方法二

padding:设置相等的上下padding值

缺点:有高度限制时不能垂直居中。

代码:

.link{padding-top: 30px;padding-bottom: 30px;}

<div class="link">padding-top:30px;padding-bottom: 30px;</div>

方法三

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

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

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

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

IE浏览器不支持

代码:

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

方法四

固定高度定位居中: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%);*/}

方法五

不固定高度定位居中: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%);}

 

方法六

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

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

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

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

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

IE浏览器不支持

代码:

.wrapper{ height:200px; display:table; }

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

<div class="wrapper">

<span class="content">不定高度文字</span></div>

 

方法七

弹性盒式布局居中:display: flex;justify-content: center;

利用弹性盒式布局,将子元素的主轴、侧轴的排列方式都设置为居中对齐

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

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

代码:

<div class="container is-Flexbox"><div class="center">既要脚踏实地于现实生活,又要不时跳出现实到理想的高台上张望一眼。<br>在精神世界里建立起一套丰满的体系,引领我们不迷失不懈怠。</div></div>

.is-Flexbox{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;justify-content: center;此方法操作简单,但ie11才开始支持弹性布局;或者采用table-cell方式居中:dispaly:table;display:table-cell;vertical-align:middle;此方法支持任意内容的可变高度,但操作繁琐,并且IE8以上的浏览器才支持;

时间: 2024-10-08 13:19:30

css实现文字垂直居中问题的相关文章

css解决文字垂直居中

参考链接: http://www.cnblogs.com/lufy/archive/2012/09/12/2681972.html   http://zhidao.baidu.com/question/69214815.html 对于文字的水平居中,text-align:center可以解决,垂直居中情况较复杂,分类讨论: 一.单行垂直居中 单行文本,如果一个容器中只有一行文字,对它实现居中相对比较简单,我们只需要设置它的实际高度height和所在行的高度line-height相等即可.如: d

css基础 文字垂直居中 行高等于容器高度

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜.              ide:visual studio 2017             browser:Chrome                     os:win7 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu

DIV+CSS如何让文字垂直居中?(转)

此篇文章转自网络,但是我忘了原文地址,如果有人知道,麻烦告知一声~ 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<spa

CSS 文字垂直居中

div.wrap { display: table; width: 100%; position: absolute; left: 0; top: 0; height: 100%; text-align: center; font-size: 1.2em; line-height: 1.2em; vertical-align: middle; color: #094D7E; font-weight: bold; _position: absolute; overflow: hidden; } d

文本框文字垂直居中 CSS

<html> <head> <style type="text/css"> #text { height:20px; vertical-align:middle; line-height:20px; /*line-height must be equal to height*/ } </style> </head> <body> <table> <input type="text&quo

css实现固定高度及未知高度文字垂直居中的完美解决方案

在工作当中我们经常碰到类似于"固定高度文字垂直居中及未知高度垂直居中问题",或者 "图片垂直居中问题",而我们最容易会想到使用表格来垂直居中,或者如果是单行文字的话使用height(高度)和line-height(行高)来解决,但是假如页面有多行文字的话 固定高度该怎么解决? 或者未知高度我们该用css怎么解决? 且兼容各个游览器! 一:单行文字垂直居中: 如果一个容器中只有一行文字的话,让他垂直居中比较简单 直接定义height(高度)和 line-height(

div+css文字垂直居中 解决左侧头像右侧姓名,姓名多换行后相对于头像仍居中显示

在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign 特性的元素才生效,例如表格元素中的<td>.<th>.<caption>等,而 像<div>.<span>这样的元素是没有valign特性的,因此使用verti

css 文字垂直居中问题

CSS 文字垂直居中问题 问题:在 div 中文字居中问题: 当使用 line-height:100%%; 时,文字没有居中,如下: html: <div id="header_logo_des"></div>CSS: #header_logo_des{ width: 100%; height: 100%; font-size: 28px; text-align:center; line-height: 100%; /*设置line-height与父级元素的he

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

从上面的代码可以看出错误就是把样式应用在块元素中了 我们只需要改样式为 以下为引用的内容:.style img{vertical-align:middle;.....} 如果STYLE中有其它如INPUT或其它内联元素可写成 以下为引用的内容:.style img,.style.input{vertical-align:middle;.....}或.style *{vertical-align:middle;.....}/*在不影响其它元素的情况下使用这个通配符*/ 以上是在没有设置高度/行高的