css 居中css怎么写写?

收藏,3.2k 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
不设置宽度可以把一个div居中吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
position: left:10%; right:10%;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
使用css3的display:box可以做到。
display:-webkit-
-webkit-box-orient:
-webkit-box-pack:
display: -moz-
-moz-box-orient:
-moz-box-pack:
display: -o-
-o-box-orient:
-o-box-pack:
display: -ms-
-ms-box-orient:
-ms-box-pack:
box-orient:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
text-align:或者margin: 0
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
margin-left: margin-right:
需要父容器text-align:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你可以试一下这个
同步到新浪微博
分享到微博?
与我们一起探索更多的未知
专业的开发者技术社区,为用户提供多样化的线上知识交流,丰富的线下活动及给力的工作机会
加入只需一步
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要举报该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知 CSS实现垂直居中的5种方法
作者: 时间:  文档类型:转载 来自:
第 1 页 CSS实现垂直居中的5种方法 [1] 第 2 页
利用 CSS 来实现对象的垂直居中有许多不同的方法,比较难的是选择那个正确的方法。我下面说明一下我看到的好的方法和怎么来创建一个好的居中网站。
使用 CSS 实现垂直居中并不容易。有些方法在一些浏览器中无效。下面我们看一下使对象垂直集中的5种不同方法,以及它们各自的优缺点。(可以看看
,有简短解释。)
这个方法把一些 div 的显示方式设置为表格,因此我们可以使用表格的 vertical-align property 属性。
&div id="wrapper"&&div id="cell"&&div class="content"&&&Content goes here&/div&&/div&&/div&
#wrapper {display:}#cell {display:table- vertical-align:}
content 可以动态改变高度(不需在 CSS 中定义)。当 wrapper 里没有足够空间时, content 不会被截断
Internet Explorer(甚至 IE8 beta)中无效,许多嵌套标签(其实没那么糟糕,另一个专题)
这个方法使用绝对定位的 div,把它的 top 设置为 50%,top margin 设置为负的 content 高度。这意味着对象必须在 CSS 中指定固定的高度。
因为有固定高度,或许你想给 content 指定 overflow:auto,这样如果 content 太多的话,就会出现滚动条,以免content 溢出。
&div class="content"&&Content goes here&/div&
#content {&position:&top:50%;&height:240&margin-top:-120 /* negative half of the height */}
适用于所有浏览器不需要嵌套标签
没有足够空间时,content 会消失(类似div 在 body 内,当用户缩小浏览器窗口,滚动条不出现的情况)
责任编辑:
◎进入论坛、版块参加讨论,我还想。
页次:1/5页
1个记录/页
1
2
3
4
5

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。
转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。
特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们,我们将立即删除修改。
本文总共有 6 条评论,现在显示最新的 5 条。评分:- llllllllllllllllllll + 评分人数: 1 ,平均分: 3.00 Publish at
17:51:02 不顶用啊! Publish at
15:05:45 评分3方法三那个打错了,我到作者的博客上看了,应该是这样的:&div id="floater"&&/div&&div id="content"&&&&&Content here&/div& Publish at
16:24:39 我照着方法三弄了 怎么没有垂直居中呀,还是在顶部,似乎margin-bottom没起作用,不知道是怎么回事 Publish at
11:08:45 缩小窗口的时候还不是把 top 遮掉了。。。。。。。。。。。。。。。。。。。。 Publish at
11:16:13 真累,用表格最简单
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:?不良评论请用,以利管理员及时删除。?尊重网上道德,遵守中华人民共和国的各项有关法律法规?承担一切因您的行为而直接或间接导致的民事或刑事法律责任?本站评论管理人员有权保留或删除其管辖评论中的任意内容
?您在本站发表的作品,本站有权在网站内转载或引用 ?参与本评论即表明您已经阅读并接受上述条款
专业书推荐
&1999-. 版权所有点评:在制作Web页面时都有碰到CSS制作水平垂直居中,我想大家都有研究过或者写过,平时工作收集了几种不同的方式制作垂直居中方法,但每种方法各有千秋在此与大家分享或许对初学者有所帮助作为前端攻城师,在制作Web页面时都有碰到CSS制作水平垂直居中,我想大家都有研究过或者写过,特别的其中的垂直居中,更是让人烦恼。这段时间,我收集了几种不同的方式制作垂直居中方法,但每种方法各有千秋呀,要正确的选择也是一件不容易的事情。我会将这几种方法一一介绍给大家,以供大家参考。或许对于我这样的初学者有一定的帮助。
用CSS来实现元素的垂直居中效果是件苦差事,虽然说实现方法有多种,但有很多方式在某些浏览器下可能无法正常的工作。接下来我们就一起来看看这些不同方法实现垂直居中的各自优点和其不足之处。
这种方法用来实现单行垂直居中是相当的简单的,你只要保证元素内容是单行,并且其高度是固定不变的,你只要将其&line-height&设置成和&height&值一样就Ok了。不过这种方法局限性太大,只有单行文本的元素才适用,所以在多行元素中是不能使用这种方法的。
Html Markup
复制代码代码如下:
&div class=&vertical&&content&/div&
复制代码代码如下:
.vertical {
height: 100
line-height: 100/*值等于元素高度的值*/
适合在所有浏览器,没有足够空间时,内容不会被切掉
仅适合应用在文本和图片上,并且这种方法,当你文本不是单行时,效果极差,差到让你感到恶心。
这种方法对运用在小元素上是非常有用的,比如说让一个button、图片或者单行文本字段。
这种方法将在需要给容器设置绝对定位(position:absolute),并且定位高度(top:50%)和margin-top为高度的一半(margin-top:-height/2)。这就意味着使用这种方法来实现垂直居中的效果,那么元素必须要有一个固定的高度。这样一来,你给元素设置了固定高度,如果你又给他设置了&overflow:auto&,那么当元素内容超过容器后,这样元素的就会出现滚动,而不会自适应内容的高度。
HTML Markup
复制代码代码如下:
&div class=&vertical&&content&/div&
复制代码代码如下:
.vertical {
height: 100/*元素的高度*/
top: 50%;/*元素的顶部边界离父元素的的位置是父元素高度的一半*/
margin-top: -50/*设置元素顶边负边距,大小为元素高度的一半*/
能在各浏览器下工作,结构简单明了,不需增加额外的标签
由于固定死元素的高度,致使没有足哆的空间,当内容超过容器的大小时,要么会消息,要么会出现滚动条(如果元素在body内,当用户缩小浏览器窗口时,body的滚动条将不会出现)。
这种方法主要是针对多行元素来进行元素的垂直居中,而并非是此元素的内容垂直居中,这一点先要理解并分开清楚。另外此方法是通过绝对定位来实现的,那么用这种方法实现元素的垂直居中需要注意以下几点:其一元素定位关系到一个相对定位参考,所以要保证元素是相对于哪个为参考坐标;另外需要设置给元素明确定一个高度值并且给元素设置一个负值的margin-top,而且值为元素高度的一半。这里我建议大家给元素定一个宽度值,因为元素进行绝对定位后脱离文档流,其宽度是根据元素内容所占宽度来计算的,为这能让其视觉效果更好,最好给元素定义一个宽度值。
根据这种方法,我们稍作修改就能使元素不单是垂直居中,而且还可以水平居中,如:
HTML Markup
复制代码代码如下:
&div id=&wrap&&test&/div&
复制代码代码如下:
width: 200/*元素的宽度*/
height:200/*元素的高度*/
left: 50%;/*配合margin-left的负值实现水平居中*/
margin-left: -100/*值的大小等于元素宽度的一半*/
top:50%;/*配合margin-top的负值实现垂直居中*/
margin-top: -100/*值的大小等于元素高度的一半*/
这种方法可以实现元素的水平垂直居中,常用于页面在最中间的布局,使用这种方法一定要把握住:水平垂直居中的元素要有明确的大小(换句话说就是要有确切的宽和高度值);给元素进行绝对定位,并设置left,top值为&50%&(此处最好使用 对定位,如果只是单单水平居中,此处可以换成相对定位);最后设置margin-top和margin-left的负值,而且其值分别为元素高度和宽度的一半。
方法三是使用的的div模拟表格效果,也就是说将多个&div&的&display&属性设置为禾&table&和&table-cell&,并设置他们的&vertical-align&的属性值为&middle&。有关于&display:table&更多的介绍可以点击这里或者去阅读Quirksmode的《The display declaration》一文。
复制代码代码如下:
&div id=&container&&
&div id=&content&&content&/div&
复制代码代码如下:
#container {
height: 300
display:/*让元素以表格形式渲染*/
#content {
display:table-/*让元素以表格的单元素格形式渲染*/
vertical-align:/*使用元素的垂直对齐*/
这种方法不会像前面的两种方法一样,有高度的限制,此方法可以要据元素内容动态的改变高度,从而也就没有空间的限制,元素的内容不会因为没足够的空间而被切断或者出现难看的滚动条。
不足之处呢?这种方法只适合现代浏览器,在IE6-7下无法正常运行;而且较前两者而言,结构也更复杂。
这种方法在现代浏览器下是非常方便。但是在IE6-7中是不被支持的,因为display:table在IE6-7中不被支持,那么为了解决这种方法在IE6-7的兼容,需要额外增加一个div,并使用hack,下面我们一起来看看其解决办法。
HTML Markup
复制代码代码如下:
&div class=&table&&
&div class=&tableCell&&
&div class=&content&&content&/div&
复制代码代码如下:
height: 300/*高度值不能少*/
width: 300/*宽度值不能少*/
.tableCell {
display: table-
vertical-align:
text-align:
padding: 10
*position:
*top: 50%;
*left: 50%;
.content {
*position:
*top: -50%;
*left: -50%;
这种方法有点新意,用这种方法你需要在居中元素前面放一个空的&div&(块元素就可以),然后设置这个&div&的高度为50%,margin-bottom为元素高度的一半,而且居中元素需要清除浮动。需要注意的是,使用这种方法,如果你的居中元素是放在body中的话,你需要给html,body设置一个&height:100%&的属性。
HTML Markup
复制代码代码如下:
&div id=&floater&&&!--This block have empty content --&&/div&
&div id=&content&&Content section&/div&
复制代码代码如下:
html,body {height: 100%;}
height:50%;/*相对于父元素高度的50%*/
margin-bottom: -120/*值大小为居中元素高度的一半(240px/2)*/
#content {
clear:/*清除浮动*/
height: 240
这种方法能兼容所有浏览器,在没有足哆空间下,内容不会被切掉
元素高度被固定死,无法达到内容自适应高度,如果居中元素加上overflow属性,要么元素出现滚动条,要么元素被切掉;另外就是一个不算缺点的缺点,那就是加了一个空标签。
这种方法和方法三一样使用display:table-cell来实现,不过方法五不同之处是这个方法我们需要一个线盒型,用来实现IE下的效果,需要增加一上行内标签比如说&span&(此处最好使用行内标签,千万不要使用块标签,因为使用块标签会没有效果),并把这个线盒型高度设置为100%,其实现原理大家可以去阅读《大小不固定的图片、多行文字的水平垂直居中》。
HTML Markup
复制代码代码如下:
&p class=&table&&
&span class=&tableCell&&Centering multiple lines
in a block container.&/span&
&!--[if lte IE 7]&&b&&/b&&![endif]--&
复制代码代码如下:
&style type=&text/css&&
height: 200
width: 200
text-align:
.tableCell {
display: table-
vertical-align:
&!--[if lte ie 7]&
&style type=&text/css&&
.tableCell {
display: inline-
display: inline-
height: 100%;
vertical-align:
&![endif]--&
这种方法的优点和方法三是一样的,不会有高度的限制。
不好的地方就是这种方法为了让IE运行正常,需要额外增加一些标签,另外就是线盒型的标签种类有限制。不过用起来还是蛮方便的。
这种方法是采用的display:inline-block,然后借助另一个元素的高度来实现居中
Html Markup
复制代码代码如下:
&div id=&parent&&
&div id=&vertically_center&&
&p&I am vertically centered!&/p&
&div id=&extra&&&!-- ie comment --&&/div&
复制代码代码如下:
&style type=&text/css&&
height: 100%;
height: 500/*定义高度,让线盒型div#extra有一个参照物,可以是固定值,也可以是百分比*/
#vertically_center,
display: inline-/*把元素转为行内块显示*/
vertical-align:/*垂直居中*/
height: 100%; /*设置线盒型为父元素的100%高度*/
&!--[if lt IE 8]&
&style type=&text/css&&
/*IE6-7不支持display:inline-block,所以在ie6-7另外写一个hack,用来支持ie6-7*/
#vertically_center,
&![endif]--&
可以自适应高度,简单易懂
需要给元素的父元素设置一个高度,这个高度可以是一个固定值或者百分值高度,另外需要增加一个额外的标签,当作线盒型,如div#extra,并且需要设置其高度为100%。另外就是ie6-7不支持display:inline-block,需要给他们另外写一个样式。
这是一个很有意思的方法,但你要懂得如何使用display。有关于这种方法的操作,大家可以去看一看Jonathan Potter写的《CSS, Vertical Centering》。
这个方法是针对多行内容居中,而且容器高度是可变的,方法很简单,就是给出上下一样的padding值
复制代码代码如下:
&div class=&columns&&
&div class=&item&&test&/div&
复制代码代码如下:
.item {padding-top:30padding-bottom:30}
在所有浏览器下能正常工作,支持所有元素,简单易懂,结构清晰
使用这种方法不能给容器固定高度,如果固定高度将无法达到效果。
正如前面所述,如果元素固定高度后要实现垂直居中,用CSS实现很方便,但对于自适应高度的就比较棘手了。那么第七种方法,要给大家介绍的是使用jQuery的方法
Html Markup
复制代码代码如下:
&div class=&container&&
&p&Centered In The Middle Of The Page With jQuery&/p&
复制代码代码如下:
.container{
background-color:#338BC7;
height:150
jQuery Code
复制代码代码如下:
$(document).ready(function(){
$(window).resize(function(){
$('.container').css({
position:'absolute',
left: ($(window).width() - $('.container').outerWidth())/2,
top: ($(window).height() - $('.container').outerHeight())/2
// 最初运行函数
$(window).resize();
这种方法,结构简单,易懂,不需要固定元素的大小。兼容各浏览器。
需要调用jQuery,如果不支持js或者用户禁掉了js,那么将无法正常运行,那就是杯具了。
上面这种方法对实现页面居中布局很方便,下面我根据上面的思路和方法二写了一个实现元素水平垂直居中的小插件
jQuery Plugin
复制代码代码如下:
(function($){
$.fn.vhAlign = function(){
return this.each(function(i){
//获取元素的内容高度
var h = Math.ceil($(this).height());
//outerHeight=padding+border+height
var oh = Math.ceil($(this).outerHeight());
//取得margin-top值
var mt = Math.ceil(oh / 2);
//取得元素宽度
var w = Math.ceil($(this).width());
//outerWidth=padding+border+width
var ow = Math.ceil($(this).outerWidth());
//取得margin-left
var ml = Math.ceil(ow / 2);
//实现元素居中效果
$(this).css({
&margin-top&: &-& + mt + &px&,
&top&: &50%&,
&margin-left&: &-& + ml + &px&,
&left&: &50%&,
&width&:w,
&height&:h,
&position&: &absolute&
})(jQuery);
Html Markup
复制代码代码如下:
&div class=&wrap&&
&p&test jquery&/p&
接下来需要调用刚才写好的jQuery插件
复制代码代码如下:
&script type=&text/javascript& src=&vhAlign.js&&&/script&
最后需要在div.wrap调用这个function
复制代码代码如下:
&script type=&text/javascript&&
$(document).ready(function(){
$(&.wrap&).vhAlign();
这里有一点需要特别注意,如果元素不是相对于body居中,那么需要在其父元素中进行相对定位。
上面我们一起见证了八种不同方法实现元素的垂直居中效果,下面我们在简单的看一下如何实现元素的水平居中(其实上面有一些效果也实现了水平居中,你可以慢慢回想一下)。
这种方法主要使用margin: auto配合元素的width来实现水平居中的效果
Html Markup
复制代码代码如下:
&div class=&horizontal&&content&/div&
复制代码代码如下:
.horizontal {
width: 200
使用上面方法实现元素水平居中一定要让元素满足两个条件:其一,元素需要有一个固定宽度值;其二元素的margin-left和margin-right都必须设置为auto,这两个条件少了任何一个都无法让元素达到水平居中的效果。此方法使用水平居中,支持所有浏览器运行,因此他也常用来实现Web页面水平居中的布局效果,如果用在布局,需要注意IE下的效果,换句话说,如果你的Web页面没有明确声明&!DOCTYPE&,那么在IE也会以怪异模式解析你的Web页面,此时上面这种办法将无法让你的页面实现水平居中,但你可以使用下面这种方法解决这个bug。
Html Code:
复制代码代码如下:
&div class=&container&& 页面内容。... &/div&
复制代码代码如下:
text-align:/*实现IE在怪异模式下页面水平居中*/
.container {
text-align:/*让文本恢复到左对齐*/
width: 960/*设置页面总宽度*/
margin: 0/*使页面水平居中对齐*/
实现固定宽度的水平居中,我们还可以使用绝对定位配合负的margin来实现,具体代码如下:
Html Markup
复制代码代码如下:
&div class=&horizontal&&content&/div&
复制代码代码如下:
.horizontal {
width: 960
left: 50%;
margin-left: -480/*此值等于&-width/2&*/
这种方法有几点需要注意:其一要有一个固定宽度,其二对要居中的元素进行绝对定位,并且&left: 50%&;其三对此元素设置一个负的&margin-left&并且值等于宽度的一半,另外如果元素不是相对于浏览器的话,还需要在其父元素上设置一个相对定位&position: relative&。
这种方法主要是针对单行文本居中或者前面介绍的table格式居,主要运用的是text-align:center让元素水平居中
复制代码代码如下:
.testH{text-align:}
面主要是和大家一起探讨和学习了多种方法让元素实现垂直居中,大家可以在这几种方法上稍做改变就能实现其水平居中,这样就达到了元素水平垂直居中的效果。实现方法很多,而且他们也各有千秋,可以说他们各有各的好,各有各的坏,具体怎么让他们更适合你的实际应用,你可以仔细对比一下,我比较喜欢方法四,简单,兼容性强,只是需要增加一个额外的标签。说了这么多,希望能给需要的朋友有所帮助。
最新图文资讯
相关文章列表:
站长圈推荐文章
 -   -   -   -   -   - 

我要回帖

更多关于 外部css文件怎么写 的文章

 

随机推荐