手机
当前位置:查字典教程网 >网页设计 > Div+Css教程 >CSS中的垂直和水平居中完全指南
CSS中的垂直和水平居中完全指南
摘要:CSSCode复制内容到剪贴板.link{padding-top:30px;padding-bottom:30px;}居中一直是CSS中被抱...

CSS Code复制内容到剪贴板 .link{ padding-top:30px; padding-bottom:30px; }

居中一直是CSS中被抱怨的典型。为什么实现起来这么辛苦?所以有人被嘲笑。我觉得问题不是没有办法做到,只是视情况而定,有很多不同方式,但是很难弄清楚应该用何种方式。因此我写了这篇文章,希望能把他变得容易点。

水平居中

内联元素(inline or inline-*)居中?

你可以让他相对父级块级元素居中对齐

CSS Code复制内容到剪贴板 .center-children{ text-align:center; }

块级元素(block level)居中?

你可以通过设置margin-left和margin-right为auto让它居中(同时还要设置width,否则它就会承满整个容器,无法看出居中效果),如。

CSS Code复制内容到剪贴板 .center-me{ margin:0<spanstyle="width:auto;height:auto;float:none;"id="8_nwp"><astyle="text-decoration:none;"mpid="8"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=auto&k0=auto&kdi0=0&luki=3&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="8_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">auto</span></a></span>; }

如果有很多块级元素呢?

如果你有很匀块级元素需要水平居中成一行,你最好使用一个不同的display类型。这是一个使用inline-block和flex的例子。

CSS Code复制内容到剪贴板 <mainclass="inline-block-center"> <div> I'manelementthatisblock-likewithmysiblingsandwe'recenteredinarow. </div> <div> I'manelementthatisblock-likewithmysiblingsandwe'recenteredinarow.Ihavemorecontentinmethanmysiblingsdo. </div> <div> I'manelementthatis<spanstyle="width:auto;height:auto;float:none;"id="6_nwp"><astyle="text-decoration:none;"mpid="6"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=block&k0=block&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="6_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">block</span></a></span>-likewithmysiblingsandwe'recenteredinarow. </div> </main> <mainclass="flex-center"> <div> I'manelementthatisblock-likewithmysiblingsandwe'recenteredinarow. </div> <div> I'manelementthatisblock-likewithmysiblingsandwe'recenteredinarow.Ihavemorecontentinmethanmysiblingsdo. </div> <div> I'manelementthatisblock-likewithmysiblingsandwe'recenteredinarow. </div> </main> body{ background:#f06d06; font-size:80%; } main{ background:white; margin:20px0; padding:10px; } maindiv{ background:black; color:white; padding:15px; max-width:125px; margin:5px; } .inline-<spanstyle="width:auto;height:auto;float:none;"id="5_nwp"><astyle="text-decoration:none;"mpid="5"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=block&k0=block&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="5_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">block</span></a></span>-center{ text-align:center; } .inline-block-centerdiv{ display:inline-block; text-align:left; } .flex-center{ display:flex; justify-content:center; }

垂直居中

垂直居中在CSS中有点棘手

内联元素(inline or inline-*)居中,像文本和链接那样的?

它是一行的吗?

有时侯元素可以表现像垂直居中,只是因为它们有相等的上下padding

如果padding因为某些原因不能用,而且文本不会换行的情况下,你可以使用line-height,让其与height相等去对齐文本。

CSS Code复制内容到剪贴板 .center-text-trick{ height:100px; line-height:100px; whitewhite-space:nowrap; }

它是多行的?

上下等padding的方式也可以让多行居中,但是如果这方法没用,你可以让这些文字的容器按table cell模式显示,然后设置文字的vertical-align属性对齐,就像talbe那样

CSS Code复制内容到剪贴板 <table> <tr> <td> I'mverticallycenteredmultiplelinesoftextinarealtablecell. </td> </tr> </table> <divclass="center-table"> <p>I'mverticallycenteredmultiplelinesoftextinaCSS-createdtable<spanstyle="width:auto;height:auto;float:none;"id="4_nwp"><astyle="text-decoration:none;"mpid="4"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=layout&k0=layout&kdi0=0&luki=1&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="4_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">layout</span></a></span>.</p> </div> body{ background:#f06d06; font-size:80%; } table{ background:white; width:240px; border-collapse:separate; margin:20px; height:250px; } tabletd{ background:black; color:white; padding:20px; border:10pxsolidwhite; /*defaultisvertical-align:middle;*/ } .center-table{ display:table; height:250px; background:white; width:240px; margin:20px; } .center-tablep{ display:table-cell; margin:0; background:black; color:white; padding:20px; border:10pxsolidwhite; vertical-align:middle; }

块级元素(block level)垂直居中?

你知道元素的高度吗?

出于很多方面的原因,不知道网页布局的高度是相当普遍的。

但是如果你的布局有一个固定高度,你就可以这样垂直居中:

CSS Code复制内容到剪贴板 .parent{ position:relative; } .child{ position:absolute; top:50%; height:100px; margin-top:-50px;/*如果没有使用:border-box;的盒子模型则需要设置这个*/ }

元素的高度是未知的

尽管未知,但你仍有可能向上推移50%的宽度

CSS Code复制内容到剪贴板 .parent{ position:relative; } .child{ position:absolute; top:50%; transform:translateY(-50%); }

你可以使用flexbox吗?

这并不奇怪,使用flexbox会容易非常多

CSS Code复制内容到剪贴板 <main> <div> I'ma<spanstyle="width:auto;height:auto;float:none;"id="2_nwp"><astyle="text-decoration:none;"mpid="2"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=block&k0=block&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="2_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">block</span></a></span>-levelelementwithanunknownheight,centeredverticallywithinmyparent. </div> </main> body{ background:#f06d06; font-size:80%; } main{ background:white; height:300px; width:200px; padding:20px; margin:20px; display:flex; flex-direction:column; justify-content:center; resize:vertical; overflow:<spanstyle="width:auto;height:auto;float:none;"id="1_nwp"><astyle="text-decoration:none;"mpid="1"target="_blank"href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=f3e358418dc3f42b&k=auto&k0=auto&kdi0=0&luki=3&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=2bf4c38d4158e3f3&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F5106%2Ehtml&urlid=0"id="1_nwl"><spanstyle="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">auto</span></a></span>; } maindiv{ background:black; color:white; padding:20px; resize:vertical; overflow:auto; }

同时水平和垂直居中

元素有固定的宽度和高度

如果元素的宽度和高度是固定的,你需要先绝对居中,然后上移和左移50%的宽度即可,这种方案有极好的跨浏览器支持。

CSS Code复制内容到剪贴板 .parent{ position:relative; } .child{ width:300px; height:100px; padding:20px; position:absolute; top:50%; left:50%; margin:-70px00-170px; }

元素的宽度高度未知

如果你不知道高度和宽度(可变的),你可以使用transofrm属性在两个方向都平移负50%

CSS Code复制内容到剪贴板 .parent{ position:relative; } .child{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); }

【CSS中的垂直和水平居中完全指南】相关文章:

CSS line-height行高上下居中垂直居中样式属性

用CSS实现垂直居中的3种方法

CSS元素的class与ID命名常用关键字

CSS使用ul进行网页的多列布局

CSS中em和px的区别

css中元素水平垂直居中4种方法介绍

任意图片实现垂直居中的三种方法(兼容性还不错)

CSS制作水平垂直居中对齐 多种方式各有千秋

CSS之DIV长度相等的几个办法

纯CSS定义双色文字

精品推荐
分类导航