使用CSS使内容垂直居中的N中方法。
.middle-div{
width:300px;
height:200px;
position:absolute;
left:50%;
top:50%;
margin:-100px 0 0 -150px
}
.parent-div{
position:relitive;
}
<div class="parent-div">
<div class="middle-div">
<p>我是个高度已知的DIV,我里面的内容可以垂直+水平居中吗?</p>
</div>
</div>
$(".mydiv").css({
position: "absolute",
left: ($(window).width() - $(".mydiv").outerWidth())/2,
top: ($(window).height() - $(".mydiv").outerHeight())/2
});
.floater{
float:left;
height:50%;
margin-bottom:-120px;
}
.middle-div{
clear:both;
height:240px;
position:relitive;
background:#eee;
}
<div class="floater"></div>
<div class="middle-div"></div>
#content {
position:absolute;
top:;
bottom:;
left:;
right:;
margin:auto;
height:240px;
width:70%;
background:#eee;
}
<div id="content"> </div>
2.当待垂直居中的对象为单行文本或图片,高宽未知时(line-height法):
大家公认的最简洁有效的方法:设置容器height与line-height相等,另外,加上overflow:hidden防止意外发生(此处指的容器内字体大于容器高度时的意外)。CSS:
p.middle-p{
font:bold 12px/24px Helvertica,Arial,sans-serif;
overflow:hidden;
}
.demo{
height:24px;
color:#fff;
background:#a5a5a5;
font:bold 12px Helvertica,Arial,sans-serif;
}
html:
<p class="demo middle-p">
文本垂直在P中居中。去掉class中的”middle-p“,再看看效果是什么?添上”middle-p“设置字体大小为30px,看看有什么效果,去掉overflow之后呢?
</p>
该方法的缺点是只支持单行,且当<p>中为纯文字时,兼容各浏览器;当<P>中只有图片时,IE7+可使图片垂直居中。然而在FF,chrome和IE6均无效;当<p>中有图片和文字时,在IE6中无效,在IE7+,FF,Chrome下有效。
让我们试着解决只有图片时,在FF,Chrome等现代浏览器下无效的情况,在上述CSS中增加:
CSS:
p:after{
content:',';
font-size:1px;
visibility:hidden;
}
html:
<p class="demo middle-p">
<img src="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg" height="12px" width="12px">
</p>
OK!只有图片时在FF,Chrome下也可以垂直居中了!
3.当待垂直居中的对象为多行文本或其它,高宽未知时:
3.1当容器高度不固定时(padding法):
为容器添加CSS:
.middle-div{
padding:20px 5px;
background:#eee;
}
html:
<div class="middle-div">
<p>你好,我在DIV中垂直居中。</p>
<p>你好,我在DIV中垂直居中。</p>
<p>你好,我在DIV中垂直居中。</p>
<p>你好,我在DIV中垂直居中。</p>
</div> <div class="middle-div">
<img src="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg">
</div>
使容器padding上下相等,这是最简单的一种方法。支持各浏览器。 3.2当容器高度固定时(display:table-cell法):
你仍然可以使用padding,不过你需要清楚知道内容的高度和精确的数学计算...这显然是不可取的。
那么当容器高度固定,待垂直居中的内容又是多行时,该如何去做呢?
一种有效的做法是将容器display:table-cell,然后使用td,th,caption等标签专有属性:vertical-align:middle;
CSS:
.middle-div{
display:table-cell;
vertical-align:middle;
height:500px;
background:#eee;
}
html:
<div class="middle-div">
<p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>
<p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>
<p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>
</div>
Great!在IE8+,FF,Chrome下确实有效。遗憾的是IE6-7仍然无法垂直居中,因为IE6-7并不认识:table-cell属性,将其自动忽略了。
也许你会想使用table布局,这样不就可以兼容IE6-7了吗。不要试图这样做,因为使用table进行页面布局早已不被赞成。html标签是负责语义的,而不是样式。不要灰心,想让内容在IE6-7下垂直居中不妨试试这种方法:
CSS:
.parent{
height:500px;
position:relative;
background:#eee;
}
.sub-parent{
position:absolute;
top:50%;
}
.middle-div{
position:relative;
top:-50%;
}
html:
<div class="parent">
<div class="sub-parent">
<div class="middle-div">
<p>我能垂直居中吗?</p>
<p>我能垂直居中吗?</p>
<p>我能垂直居中吗?</p>
</div>
</div>
</div>
让人心塞的是这种方法只在IE6-7下可行,在IE8+以及FF等现代浏览器下效果反而差强人意。为什么呢?是middle-div的top:-50%出了问题。由于父容器的高度根据子容器高度计算出来的,导致-50%无效。可能的解决办法:middle-div的top:-(使用JS得出sub-parent的高度/2)px.
如果你了解一些CSS hack的技巧,结合上面的display:table-cell方法,那么一个完美的垂直居中方案将会诞生:
html与上一致;
CSS:
.parent{
height:500px;
display:table-cell;
vertical-align:middle;
*position:relative;
background:#eee;
}
.sub-parent{
*position:absolute;
*top:50%;
}
.middle-div{
*position:relative;
*top:-50%;
}
在浏览器中看一下效果吧!这个方法看起来还不错,如果非要找一个缺点,那就是DIV嵌套多了一点.
当允许使用JS时,完全可以动态获得内容的高度,然后结合display:table-cell和margin-top:-(height/2)px来解决。从而避免了多层嵌套.具体方法见1.1 3.3当容器高度固定时(display:inline-block法) CSS:
.parent{
height:700px;
border:1px solid #a5a5a5;
text-align:center;
}
.middle-div{
display:inline-block;
width:300px;
vertical-align:middle;
border:1px solid #f00;
}
.parent:before{
content:'';
display:inline-block;
height:100%;
vertical-align:middle;
margin-right:-0.25em;
}
html:
<div class="parent">
<div class="middle-div"><p>我是否可以垂直居中?</p></div>
</div>
由于使用了display:inline-block,故不兼容IE6-7.
4.小结 使用CSS布局尤其需要注意浏览器的兼容,一个垂直居中让我初窥各浏览器兼容混战的冰山一角。
想要掌握垂直居中,至少要了解display,position,margin,veritcla-align,line-height,padding以及float,CSS hack等知识。CSS的知识王国不就是一个个小问题堆积出来的吗?
上述只是部分方法,可能存在错误和纰漏,欢迎指正~
使用CSS使内容垂直居中的N中方法。的更多相关文章
- css如何实现垂直居中(5种方法)
css如何实现垂直居中(5种方法) 一.总结 一句话总结:行内只需要简单地把 line-height 设置为那个对象的 height 值就可以使文本居中了. 块的话可以尝试 margin:auto: ...
- CSS总结div中的内容垂直居中的五种方法
一.行高(line-height)法 如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如: p { height:30px; line-height:3 ...
- div中的内容垂直居中的五种方法
一.行高(line-height)法 如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如: p { height:30px; line-height:3 ...
- css 实现元素水平垂直居中总结5中方法
个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 <div id="divAu ...
- CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- CSS教程:div垂直居中的N种方法[转]
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
- 【翻译】CSS水平和垂直居中的12种方法
英语原文链接 在CSS中有许多不同的方法能够做到水平和垂直居中,但很难去选择合适的那个.我会向你展示我所看到的所有的方法,帮助你在所面对的情境下选择最棒的那一个. 方法1 此方法将只能垂直居中单行文本 ...
- CSS实现水平垂直居中的数种方法整合
CSS实现水平垂直居中可以说是前端老生常谈的问题了,一般面试官问的时候面试者都会回答出来,但是继续追问还有没有其他方法的时候有可能就说不出来了. 本着学习知识的目的,特在此纪录CSS实现水平垂直居中的 ...
- css设置元素垂直居中的几个方法
最近有人问我怎么设置元素垂直居中?我....(这么基础的东西都不会?我有点说不出话来), 不过还是耐心的教了他几个方法,好吧教完他们,顺便把这些方法整理一下 第一种:通过设置成为表格元素的方式来实现 ...
随机推荐
- configuration error-could not load file or assembly crystaldecisions.reportappserver.clientdoc
IIS启动网站后报错: configuration error Could not load file or assembly 'crystaldecisions.reportappserver.cl ...
- CSS3 波浪简单模拟--我是波浪,我有起伏,有大波与小波(坏笑中...)
我是波浪,我有起伏,我有大波与小波(坏笑中...) 最近改版网站,一般也不会去写动画,但是有些网站还是需要的,故拿出一个较简单的动画出来分享,很简单很简单. 原理简单阐述 其实很简单,使用一张美工做好 ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- postgresql数据库
新建一个虚拟机,在本地跑程序,连虚拟机数据库报错: no pg_hba.conf entry for host "192.168.1.4" Google下,发现是要修改postgr ...
- artTemplate-master的应用
刚开始,在没有使用这个模板之前,一致都是后台返回一个json的字符串,来在前端自己拼接字符串,不但麻烦,而且费时费力,而且还有时候经常拼接错误!导致了工作效率的延长 js模板的使用 <scrip ...
- 增删改查--windows下mysql客户端--表的使用
>>>>>>>>>>>>>>>>>>>> selet 5种子句之where常用运 ...
- linux 常用命令
//创建目录mkdir//创建中间没有路径的文件夹mkdir -p //删除文件rm//强制删除文件rm -f//删除目录rmdir//删除多个目录rmdir -p //输出当前环境根路径echo $ ...
- BZOJ 4066 简单题 ——KD-Tree套替罪羊树
[题目分析] 直接x,y二维轮番划分,暴力即可. 套上替罪羊,打碎重构,对于时间复杂度有了保证. 写起来好麻烦,重构的技巧很棒! [代码] #include <cstdio> #inclu ...
- 未能加载文件或程序集“Microsoft.ReportViewer.WinForms 解决办法
异常信息: 未能加载文件或程序集“Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken= ...
- 总结js的一些复制方法
1.复制对象: var item1={XXX}; var item2=$.extend(true,{},item1);//深度克隆对象(jQuery方法). lodash也有相关方法:https:// ...