Jarvis Huang
學海無涯
Published in
5 min readJun 16, 2019

--

學習網頁開發到現在,我一直覺得切版是我的弱項,尤其是水平置中和垂直置中。導致之前在練習教案的時候,都需要花許多時間去查資料和 try and error。為了把基礎打好以應付未來的挑戰,特別再複習了一下水平置中和垂直置中的方式,並整理出一些重點。

前言

在介紹水平置中的方法之前,需要先認識網頁元素(HTML element)的種類,因為 HTML會根據網頁元素的種類去預設它的 display 屬性。一般來說,網頁元素分為兩種:Block-level Element 和 Inline Element。

Block-level Element

Block-level element 顧名思義就是一個區塊元素,它會佔滿父元素的寬度,並從每次都是從新的一行開始。常見的 block-level elememt 有:

<div>  <figure>  <form>  <h1>~<h6  <header>  <li>  <main>  <nav>  
<ul> <ol> <p> <section> <table>

Inline Element

Inline Element 則可以解讀為行內元素,它不會換行,而且會自適應內容大小,但是不能夠設定 width、height、margin、background-img…等。常見的inline element 有:

<a>  <button>  <em>  <i>  <img>  <label>  <select>  <span>  <strong> <textarea> 

Display: inline-block

另外再介紹一種等等會用到的的 Display 屬性: display: inline-block

inline-block 同時擁有 bock-level element 和 inline element 的特性:它的外在是 inline,而內在是 block 。因為外在是inline,所以它不會換行而且會自適應內容大小,但內在像 block,因此它可以設定 width、height、margin、backgound-img…等參數。

水平置中的方法

text-align: center;

text-align 主要是用在 inline element。如果在父元素設定 text-align: center,那麼在該父元素裡面的所有元素,只要是文字或是 inline element,就會依據父元素的寬度進行水平置中。

若該父元素裡面是 block-level element,則不會水平置中(但 block-level element裡的文字或是inline element 也會有置中效果)。這時候可以加上 position: inline-block; 讓 block-level element 也擁有inline的特性,就可以達成水平置中的效果。

水平置中方法: text-align: center;

margin: 0 auto;

margin: 0 auto 主要是用在 block-level element。如果想針對一個區塊做水平置中,而該元素有已知寬度(如px、%),就可以對想置中的元素設定margin: 0 auto;

註1:如果區塊的寬度沒有設定或是可變動的,會直接佔用整個寬度空間,所以一定要對想置中的元素設定好固定寬度。

註2:如果置中元素裡內容想要能夠有自適應內容大小的效果,則建議使用 text-align: center;

若是inline element,則需要加上 display: block 後才能設定 margin 並完成置中。

水平置中方法:margin: 0 auto;

Position

最後我們也可以使用 Position 的方式來達成水平置中,直接來看實例:

  1. 首先我們可以先設定父元素和子元素的起始位置(如下圖)。要注意的是,如果有設定 position: absolute 的元素,它的父元素必須是非預設(預設是static)的值。
設定 position

2. 將 content 設為 left: 50%, top: 50%,這時候 content 就會由上往下、由左而右的移動50%的距離。由於元素都是以左上角為定位點,所以此時被置中的其實是左上角的點。

移動 content

3. 這時我們就需要使用 transform: translate(-50%, -50%) 去將 content 往回移自身的 50%距離。如此一來,content 就會是水平置中及垂直置中了。

註:translate(-50%, -50%) 裡第一個是 -50% 是移動 X 軸,而第二個 -50% 是移動 Y 軸。

使用 transform: translate(-50%, -50%) 移動 content

最後附上 Codepen:

以上就是到目前為止我所知道的水平置中方法,之後再來整理垂直置中方法的筆記。

--

--