搜尋近期熱門

聯成電腦網頁設計教學:CSS置中的6個方法

聯成電腦網頁設計教學:CSS置中的6個方法

文、菜鳥編

 

 

在Office中,一個按鈕就可以讓你隨意的水平置中、垂直置中,但在網頁設計,可就沒有這麼輕鬆,尤其是在垂直置中,對於觀念沒有很正確的人來說,可能就已經殺死你一堆腦細胞了。如果你很常殘害你的腦瓜子,相信今天這一文章就可以幫你解決大部分的問題了。

 

 


 

 

方法一、行高(line-height)

 

早期最常使用的方法,但只能針對單行文字有效,以下圖來說,當設定了line-height與div的高相同時,單行文字是完全置中,但右圖可以看到當多行文字時,就會有問題發生,主要是因為TEXT1與TEXT2的行高也為100px造成。

 

 

HTML

 

<div class="outBox">

    TEXT

</div>

 

 

 

CSS

 

.outBox{

        width: 100px;

        height: 100px;

        background-color: #2D9;

        text-align: center;

        color: #FFF;

        line-height: 100px;

}

 

 


 

 

方法二、偽元素(beforeafter)

 

使用「vertical-align: middle」搭配偽元素就將區塊完全置中,以下圖來說,將before、after偽元素與innerBox設定為「inline-block」,使用vertical-align: middle後,三個元素就相互垂直置中。

 

 

HTML

 

<div class="outBox2">

    <div class="innerBox"></div>

</div>

 

 

 

CSS

 

.outBox2{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        text-align: center;

}

 

.outBox2:before, .outBox2:after {

  content: "";

  width: 10px;

  height: 10px;

  background-color: #999;

  display: inline-block;

  vertical-align: middle;

}

 

.innerBox2{

        width: 50px;

        height: 50px;

        background-color: #D92;

        display: inline-block;

        vertical-align: middle;

}

 

 

要達到在OutBox2元素中置中,只要將偽元素的寬度取消,高度設為100%,就可以完成下圖的置中了。

 

 

 

當然,多行文字就不是問題了。

 

 

 


 

 

方法三、使用position(calc運算法)

 

在沒有flexbox前,最多使用的就是position來定位置中,常見的有「使用calc運算語法」、「使用transform位移」、「使用margin定位」,這邊我們先介紹使用calc運算法,另兩個分別在後面說明。

 

使用定位方式都需將外層父級元素的定位為相對定位,子元素設定為絕對定位,再透過top與left來定位置中。以下圖來說,左圖設定top:50% , left:50%,可以發現並未置中,因為定位點是以子元素左上角為定位點,如果要達到置中效果,則須再在目前的定位減去子元素的寬度與高度的一半,如右圖。

 

 

修正top與left的定位,就可達到置中,記得減號兩邊必須有空格

top: calc(50% - 15px);

left: calc(50% - 15px);

 

 

HTML

 

<div class="outBox3">

    <div class="innerBox2"></div>

</div>

 

 

 

CSS

 

.outBox3{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        position: relative;

}

 

.innerBox3{

        width: 30px;

        height: 30px;

        background-color: #D92;

        position: absolute;

        top: calc(50% - 15px);

        left: calc(50% - 15px);

}

 

 


 

 

方法四、使用position(transform位移)

 

這方法與前述有點類似,差別在於這邊我們是透過位移方式來完成,在內部元素CSS中加上transform: translate(-50%,-50%); ,分別向左與向上方向移動,各為元素寬度與高度的50%,也就是向左位移20px,向上位移15px。

 

 

HTML

 

<div class="outBox4">

    <div class="innerBox4"></div>

</div>

 

 

 

CSS

 

.outBox4{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        position: relative;

}

 

.innerBox4{

        width: 40px;

        height: 30px;

        background-color: #D92;

        position: absolute;

        top: 50%;

        left: 50%;

        transform: translate(-50%,-50%);

}

 

 


 

 

方法五、使用position(margin定位)

只要將top、right、bottom、left的定位設定為0,加上magrin: auto;,就可以達到置中的效果,如下圖,如果只有設定top與bottom為0,就是垂直置中。

 

 

HTML

 

<div class="outBox5">

    <div class="innerBox5"></div>

</div>

 

 

 

CSS

 

.outBox5{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        position: relative;

}

 

.innerBox5{

        width: 50px;

        height: 60px;

        background-color: #D92;

        position: absolute;

        margin: auto;

        top: 0;

        /*left: 0;*/

        bottom: 0;

        /*right: 0;*/

}

 

 


 

 

方法六、使用flex

 

CSS3的普及及RWD布局關係,Flexbox被廣泛使用,只要將父級元素設定為flex,指定水平對齊(justify-content)與垂直對齊(align-items)就可以完成置中。

 

HTML

 

div class="outBox6">

    <div class="innerBox6"></div>

</div>

 

 

 

CSS

 

.outBox6{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        display: flex;

        justify-content: center;

        align-items: center;

}

 

.innerBox6{

        width: 30px;

        height: 30px;

        background-color: #D92;

}

 

 

Flexbox的好處就是當內層加入其它元素時,會自動調整布局,以下圖來說,在內部又加上class=”innerBox6-2”的塊級元素,原有元素不受影響仍垂直置中,水平部分就會依照內部元素來平均分配。

 

 

HTML

 

<div class="outBox6">

    <div class="innerBox6"></div>

    <div class="innerBox6-2"></div>

</div>

 

 

 

CSS

 

.outBox6{

        width: 100px;

        height: 100px;

        background-color:#2D9;

        display: flex;

        justify-content: center;

        align-items: center;

}

 

.innerBox6{

        width: 30px;

        height: 30px;

        background-color: #D92;

}

 

.innerBox6-2{

        width: 20px;

        height: 50px;

        background-color: #2AD;

}

 

 


 

 

結論:

相信這六種方法,可以幫你解決大部分置中的問題,語法是死的,但用法是活的,依照設計的需求,選定適合的方法就能事半功倍。

 

如果你覺得這篇文章很實用,也別忘了分享給你的親友們喔!

 

 

 

 

痞客邦Blog:http://lccnetvip.pixnet.net/blog
FB粉絲團:https://www.facebook.com/lccnetzone
菜鳥救星:https://www.facebook.com/greensn0w

本網站使用相關網站技術以確保使用者獲得最佳體驗,通過使用我們的網站,您確認並同意本網站的隱私權政策。欲了解詳情,請參閱 隱私權政策