- .link{
- padding-top:30px;
- padding-bottom:30px;
- }
居中一直是CSS中被抱怨的典型。为什么实现起来这么辛苦?所以有人被嘲笑。我觉得问题不是没有办法做到,只是视情况而定,有很多不同方式,但是很难弄清楚应该用何种方式。因此我写了这篇文章,希望能把他变得容易点。
水平居中
内联元素(inline or inline-*)居中?
你可以让他相对父级块级元素居中对齐
- .center-children{
- text-align:center;
- }
块级元素(block level)居中?
你可以通过设置margin-left和margin-right为auto让它居中(同时还要设置width,否则它就会承满整个容器,无法看出居中效果),如。
- .center-me{
- margin:0<spanstyle="width:auto;height:auto;float:none;"id="8_nwp"><astyle="text-decoration:none;"mpid="8"target="_blank"rel="nofollow noopener noreferrer" 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的例子。
- <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"rel="nofollow noopener noreferrer" 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"rel="nofollow noopener noreferrer" 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相等去对齐文本。
- .center-text-trick{
- height:100px;
- line-height:100px;
- whitewhite-space:nowrap;
- }
它是多行的?
上下等padding的方式也可以让多行居中,但是如果这方法没用,你可以让这些文字的容器按table cell模式显示,然后设置文字的vertical-align属性对齐,就像talbe那样
- <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"rel="nofollow noopener noreferrer" 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)垂直居中?
你知道元素的高度吗?
出于很多方面的原因,不知道网页布局的高度是相当普遍的。
但是如果你的布局有一个固定高度,你就可以这样垂直居中:
- .parent{
- position:relative;
- }
- .child{
- position:absolute;
- top:50%;
- height:100px;
- margin-top:-50px;/*如果没有使用:border-box;的盒子模型则需要设置这个*/
- }
元素的高度是未知的
尽管未知,但你仍有可能向上推移50%的宽度
- .parent{
- position:relative;
- }
- .child{
- position:absolute;
- top:50%;
- transform:translateY(-50%);
- }
你可以使用flexbox吗?
这并不奇怪,使用flexbox会容易非常多
- <main>
- <div>
- I'ma<spanstyle="width:auto;height:auto;float:none;"id="2_nwp"><astyle="text-decoration:none;"mpid="2"target="_blank"rel="nofollow noopener noreferrer" 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"rel="nofollow noopener noreferrer" 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%的宽度即可,这种方案有极好的跨浏览器支持。
- .parent{
- position:relative;
- }
- .child{
- width:300px;
- height:100px;
- padding:20px;
- position:absolute;
- top:50%;
- left:50%;
- margin:-70px00-170px;
- }
元素的宽度高度未知
如果你不知道高度和宽度(可变的),你可以使用transofrm属性在两个方向都平移负50%
- .parent{
- position:relative;
- }
- .child{
- position:absolute;
- top:50%;
- left:50%;
- transform:translate(-50%,-50%);
- }
以上就是CSS中的垂直和水平居中完全指南。睡觉也是一种解脱,睡着了就会不悲、不气、不烦恼、不孤单,是上天赐予你短暂失忆的时间。更多关于CSS中的垂直和水平居中完全指南请关注haodaima.com其它相关文章!