用CSS 实现元素垂直居中,都有哪些好的方案

Posted

tags:

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

1、利用定位,先给父元素加一个定位属性,比如position:relative,然后给想要居中的元素设置


    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    top: 0;
    margin: auto;
//这个是上下左右全部居中,如果只是上下垂直居中,可以只设置top和bottom为0,
//left和right根据需要设置一个即可,这个适用于一些不方便计算上下距离的情况
//对于指导上下距离的可以直接使用top,left定位即可

2、vertical-align:middle;属性,该属性是让元素位于父元素的中部。

3、也可以使用css3属性来移动元素,让元素居中

4、或者使用padding值之类的属性来使元素上下垂直居中或者横向居中都可以

参考技术A css垂直居中,如果兼容各个浏览器的话,我还没有见过。
在百度里面搜了很多,代码都不健壮,最终都是用js来实现的。
首先,我们来了解水平居中,它有很多种方法,我们暂时先来了解其中的几种:

1. 在实现方案中,我们最熟悉的莫过于给元素定义一个宽度,然后使用margin:
body
width:960px;
margin:0 auto;


这个是当我们的定义元素的宽度时显现的,如果我们不能定义宽度时,该怎么办呢?
2. 我们对于定位也是常用的,在这里当然也可以采用定位的方法来实现:
body
position:absolute;
left:50%;


3. 既然定位可以,那浮动也是可以的:
body
float:left;
right:50%;


4. 对于几个元素同时居中在一条线上

body
vertical-align:middle;


5. 利用table:
ul
display:table;

ul li
display:table-cell;


6. 还可以使用inline-block来实现,但要使用这个就得在其父元素上设置text-align.如下:

body
text-align:center;

.content
display:inline-block;


实现垂直居中的四种方法:
1. 只能是单行文本居中(可适用于所有浏览器):
.content
height:100px;
line-height:100px;


2. 跟水平居中一样,垂直也可以用定位的方法:
.content
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
margin:auto;

或者
.content
position:absolute;
top:50%;


定位的方法,它的缺点是当没有足够的空间时,元素会消失。
3. 对此,浮动也是可以的:
.content
float:left;
height:50%;
margin-bottom:-120px;

.footer
clear:both;
height:240px;
position:relative;


对于浮动,我们需要在之后清除,并显示在中间。
4. 也可以使用vertical-align属性:
.content
display:table-cell;
vertical-align:middle;


这种方法可以随意改变元素高度,但在IE8中无效。

现在来看个div模块在屏幕中居中的例子:
position: absolute; top: 50%; left: 50%; //上下移动屏幕的50%
margin: auto;
-webkit-transform: translate(-50%,-50%); //减去自身的50%(多移动的)
-ms-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);

这个基本可以不确定宽高的模块居中,但是在低版本的浏览器中可能出现问题,现在还没测试过,但是主流的都是可以的!
河南新华电脑学院为您解答

用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如何控制文字垂直居底

CSS小技巧使用

css确定元素水平居中和垂直居中

将一个不定宽高的盒子设置水平垂直居中的六种方法

vue 弹性布局 实现长图垂直居上,短图垂直居中

绝对定位元素水平居中和垂直居中的原理