搜尋

定位 position

所有網頁元素在排版中都有預設的定位方式,透過定位相關的樣式屬性,就能更明確地進行元素的定位,這也是許多別具創意的排版常用的排版樣式。這篇教學會完整介紹 position、top、bottom、right、left、z-index、inset、inset-block、inset-inline 等定位相關的樣式屬性。

快速導覽:

CSS 教學 - 定位 position

位置距離:top、bottom、left、right

除了使用預設值進行定位,也會透過 topbottomleftright 這四個樣式屬性指定位置,這四個樣式屬性代表「被定位的元素與其參考容器的四個方向的距離」,通常也會稱為「offset 屬性」,這四個樣式屬性僅適用於「定位樣式非 static的元素,且都沒有繼承特性。

樣式屬性 說明
top 與參考容器上緣之間的距離。
bottom 與參考容器下緣之間的距離。
left 與參考容器左側之間的距離。
right 與參考容器右側之間的距離。

這四個樣式的屬性值預設都是 auto,使用「絕對長度或相對長度」的數值作為單位 ( 參考「長度與角度單位」),由於「topbottom」和「leftright」代表完全不同方向的距離數值,通常不會同時使用 ( 因為沒必要,就如同定義座標也只需要兩個數值 ),但如果真的同時使用 ( 製作不同方向語系的網頁 ),則會遵循下列規則:

  • topbottom 同時使用時,top 數值為主
  • leftright 同時使用時,參考容器的文字左到右書寫語系以 left 為主,右到左書寫語系以 right 為主

下方的範例使用呈現同時使用四個樣式屬性的狀況,由於元素排版方向一率由上到下,所以都會使用 top 數值為主,如果文字書寫方向是右到左,就會以 right 為主。

線上展示:https://codepen.io/oxxo/pen/oNraqem

<!-- HTML 程式碼-->
<div class="a">
  <div>文字左到右</div>
</div>
<div class="b">
  <div>文字右到左</div>
</div>

<!-- CSS 程式碼 -->
<style>
  div[class]{
    border: 1px solid #000;
    width: 200px;
    height: 100px;
    position: relative;   /* 因為子元素使用 absolute,所以需要設定 relative 產生參考容器 */
    margin: 10px;
  }
  .b {direction: rtl;}
  div div {
    border: 1px solid red;
    width: 100px;
    height: 50px;
    position: absolute;
    top: 5px;
    bottom: 30px;
    left: 5px;
    right: 30px;
  }
</style>

CSS 教學 - 定位 position - 同時使用 top、bottom、left、right

內嵌寬度:inset、inset-block、inset-inline

有時候面對不同方向語系的網頁,或沒有設定寬度的定位時,可能會有左右顛倒或不容易控制位置的狀況,這時可透過「內嵌寬度」的樣式,針對不同的方向嵌入特定的寬度,進而控制元素的位置,這種類型的樣式屬性有 insetinset-blockinset-inline,這幾個樣式屬性都沒有繼承特性,並僅適用於「定位樣式非 static元素,相關說明如下:

樣式屬性 說明
inset 內嵌「上右下左」寬度造成偏移。
inset-block 根據元素流向,內嵌「上下」寬度造成偏移。
inset-inline 根據元素流向,內嵌「右左」寬度造成偏移。

這三個樣式的屬性值預設都是 auto,使用「絕對長度或相對長度」的數值作為單位 ( 參考「長度與角度單位」),三個屬性裡只有 inset 不會受到元素流向影響,inset 支援 1~4 個數值,一個數值表示「上右下左」,兩個數值表示「上下、左右」,三個數值表示「上、左右、下」,四個數值表示「上、右、下、左」。下方範例使用四種不同流向的元素,可以看出 inset 所呈現的結果完全相同,且由於是「內嵌寬度」,當沒有設定元素尺寸且尺寸小於父元素時,會造成子元素範圍縮減的情況。

線上展示:https://codepen.io/oxxo/pen/MYgraXY

<!-- HTML 程式碼-->
<div><div class="a">oxxo</div></div>
<div><div class="b">oxxo</div></div>
<div><div class="c">oxxo</div></div>
<div><div class="d">oxxo</div></div>

<!-- CSS 程式碼 -->
<style>
  div:not([class]) {
    position: relative;
    width: 200px;
    height: 100px;
    border: 2px solid #000;
    margin: 10px;
  }
  div div{
    position: absolute;
    margin: 0;
    padding: 0;
    background: orange;
  }
  .a {
    direction: ltr;
    inset: 5px 20px 40px 60px;
  }
  .b {
    direction: rtl;
    inset: 5px 20px 40px 60px;
  }
  .c {
    writing-mode: vertical-rl;
    inset: 5px 20px 40px 60px;
  }
  .d {
    writing-mode: vertical-lr;
    inset: 5px 20px 40px 60px;
  }
</style>

CSS 教學 - 定位 position - 四種不同流向的元素的 inset 結果

由於 inset 不會受到元素流向影響,且如果元素設定了寬高尺寸,尺寸也不會被內嵌寬度所影響,因此有時會使用 inset 進行定位,作為 topleftbottomright 四個樣式屬性的縮寫格式,使用 inset 會先以「上、左」的數值為主,除非將上或左的數值設定為 auto,才會套用「下、右」數值,下方範例的第一個 div 雖然使用了四個數值,但會以「上、左」為主,第二個 div 將上左的數值設為 auto,就會以「下、右」為主,第三個 div 則表現支援「負值」的數值。

線上展示:https://codepen.io/oxxo/pen/EaYoVRg

<!-- HTML 程式碼-->
<div><div class="a">以上、左為主</div></div>
<div><div class="b">上、左設為 auto,使用下、右數值</div></div>
<div><div class="c">支援負值</div></div>

<!-- CSS 程式碼 -->
<style>
  div:not([class]) {
    position: relative;
    width: 300px;
    height: 100px;
    border: 2px solid #000;
    margin: 20px;   
  }
  div div{
    position: absolute;
    margin: 0;
    padding: 0;
    background: orange;
    width: 300px;
    height: 100px;
  }
  .a {inset: 5px 20px 40px 60px;}
  .b {inset: 5px 20px auto auto;}
  .c {inset: auto -10px -10px auto;}
</style>

CSS 教學 - 定位 position - 使用 inset 進行定位

至於 inset-blockinset-inline 則會受到元素流向的影響,在不同的流向中,內嵌寬度的位置也會跟著顛倒,下方範例呈現不同流向的呈現差異。

線上展示:https://codepen.io/oxxo/pen/ogvpjye

<!-- HTML 程式碼-->
<div><div class="a ib">oxxo123</div></div>
<div><div class="b ib">oxxo123</div></div>
<div><div class="c ib">oxxo123</div></div>
<div><div class="d ib">oxxo123</div></div>
<div><div class="a il">oxxo123</div></div>
<div><div class="b il">oxxo123</div></div>
<div><div class="c il">oxxo123</div></div>
<div><div class="d il">oxxo123</div></div>

<!-- CSS 程式碼 -->
<style>
  div:not([class]) {
    position: relative;
    width: 200px;
    height: 100px;
    border: 2px solid #000;
    margin: 10px;
  }
  div div{
    position: absolute;
    margin: 0;
    padding: 0;
  }
  .a {direction: ltr;}
  .b {direction: rtl;}
  .c {writing-mode: vertical-rl;}
  .d {writing-mode: vertical-lr;}
  .ib {
    background: #0c0;
    inset-block: 5px 20px;
  }
  .il {
    background: #f50;
    inset-inline: 5px 20px;
  }
</style>

CSS 教學 - 定位 position - inset-block 和 inset-inline

CSS 教學 - 定位 position - inset-block 和 inset-inline

定位類型:position

position 樣式屬性可以定義元素的「定位方式」,沒有繼承特性,不論元素 position 的屬性值為何,在排版時都會有一個「容器」作為定位的參考依據,下方會列出相關屬性值,接著再分別介紹各個屬性值的意義和使用方式。

屬性值 說明 定位參考 z-index 影響
static 預設定位 文件預設排版方向。 X
relative 相對定位 元素原始的位置。 O
absolute 絕對定位 static 的祖先元素或 body 元素。 O
fixed 固定定位 視窗邊界或套用特殊樣式的祖先元素。 O
sticky 黏貼定位 捲動後元素和視窗邊界的距離。 O

position:static 預設定位

position:static 是元素預設的定位樣式,通常不需要額外設定這個樣式屬性,除非是在某些情況要不同排版狀態才會進行設定 ( 不同解析度畫面、與使用者互動...等 ),這表示所有的元素都有有下列預設的定位特性:

  • 元素會按照自身的的顯示類型,根據「預設的」排版方向 Normal Flow 定位。
  • 不會被 topbottomleftrightz-index 的數值影響

下方範例展示 inline 元素和 block 元素預設的排版情況。

線上展示:https://codepen.io/oxxo/pen/GRbYxMR

<!-- HTML 程式碼-->
inline 元素
<div class="a">
  <span>apple</span>
  <span>banana</span>
  <span>coconut</span>
  <span>oxxo</span>
</div>
block 元素
<div class="b">
  <div>apple</div>
  <div>banana</div>
  <div>coconut</div>
  <div>oxxo</div>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 5px;
    margin: 5px;
  }
  div div{background: #ccc;}
  span {
    background: #ccc;
    border: 1px solid #000;
  }
</style>

CSS 教學 - 定位 position - static 預設定位

position:relative 相對定位

position:relative 表示元素會進行「相對定位」,設定這個屬性值的元素會有下列特性:

  • 根據元素「原本的大小和位置」進行相對位移。
  • 相對定位元素位移之後,會保留原本的「容器空間」,不會因為元素發生相對定位造成版面位移。
  • 相對定位元素會使用「margin 外邊界」進行定位。
  • 顯示屬性為 table-*-grouptable-rowtable-columntable-celltable-caption 的元素無法設定相對定位。

下方的例子可以清楚看出元素設定為相對定位後,相對位置的參考對象是元素「原本的位置」,藍色虛線框表示元素原本的位置和所佔的空間,不會因為元素位置進行相對移動之後,造成文字往上移動的狀況。

線上展示:https://codepen.io/oxxo/pen/NWZOYaR

<!-- HTML 程式碼-->
<div>
  oxxo.studio
  <div class="a">top: 30px;<br/>left: 80px</div>
  hello world!!
</div>
<div>
  oxxo.studio
  <div class="b">bottom: 30px;<br/>right: 50px;</div>
  hello world!!
</div>

<!-- CSS 程式碼 -->
<style>
  div:not([class]) {
    border: 1px solid #000;
    width: 200px;
    height: 150px;
    margin: 10px 50px;
  }
  .a, .b {
    border: 1px solid red;
    background: pink;
    position: relative;  /* 設定相對定位 */
    width: 100px;
    height: 100px;
    font-size:14px;
  }
  .a {
    top: 30px;
    left: 80px;
  }
  .b {
    bottom: 30px;
    right: 50px;
  }
</style>

CSS 教學 - 定位 position - relative 相對定位

根據同樣的規則,如果相對定位的元素出現在「行內元素」的內容裡,元素原本的內容空間也會被保留,下方範例會將 strong 元素變成相對定位,原本的空間仍然會保留而呈現空白狀態。

線上展示:https://codepen.io/oxxo/pen/yLdRKzo

<!-- HTML 程式碼-->
<div>
STEAM 教育由五個單字組成,分別是 Science ( 科學 )、Technology ( 技術 )、Engineering ( 工程 )、Arts ( 藝術 ) 和 Mathematics ( 數學 ),因此 STEAM 教育也稱作「跨學科教育」。<strong>OXXO.STUDIO</strong> STEAM 教育延伸 STEM 的精神,除了強調「動手做」以及「解決問題」的能力,更將藝術 Art、技術、工程和數學整合,創造出能夠應用於真實生活的應用。
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 280px;
    height: 240px;
  }
  strong {
    background: pink;
    position: relative;
    top: 60px;
    left: 50px;
  }
</style>

CSS 教學 - 定位 position - relative 相對定位元素原本的內容空間也會被保留

position:absolute 絕對定位

position:absolute 表示元素會進行「絕對定位」,設定這個屬性值的元素會有下列特性:

  • 絕對定位元素會參考元素「最靠近的非 static 元素 」位置進行定位 ( 「非 static 容器」表示該容器的不能是 position:static )。
  • 如果絕對定位元素「沒有」參考的非 static 容器,則會使用 body 作為定位容器
  • 絕對定位元素會脫離原本的排版方式,元素容器和內容空間會完全獨立於其他平面
  • 絕對定位元素預設位置會使用「如果只有單一元素,預設的擺放位置」,可透過 topleft 之類樣式修改。
  • 絕對定位元素的定位位置是「margin 外邊界」。
  • 絕對定位元素的顯示類型會轉換成「block」類型,可設定寬高與上下邊界。

下方範例展示絕對定位元素所參考的「非 static 容器」,藍色 div 因為父元素設定 position:relative 就會參考父元素,紅色 div 因為有一個祖先元素設定了 position:relative,就會參考這個元素,而綠色 div 因為其父元素都沒有設定,就會參考頁面進行絕對定位。

線上展示:https://codepen.io/oxxo/pen/JjQmLrm

<!-- HTML 程式碼-->
<div class="a">
  <div>
    <div>apple</div>
  </div>
</div>
<div class="b">
  <div>
    <div>banana</div>
  </div>
</div>
<div class="c">
  <div>
    <div>oxxo</div>
  </div>
</div>

<!-- CSS 程式碼 -->
<style>
  body {padding-top:60px;}
  div {
    border: 1px solid #000;
    padding: 20px;
    background: #aaa;
    margin: 10px;
  }
  div div {
    background: #ccc;
    margin: 0;
  }
  div div div {
    position: absolute;
    top: 0;
    left: 0;
  }
  .a > div {position: relative;}   /* 第二層 div 為「非 static 容器」 */
  .a div div {background: #f005;}

  .b {position: relative;}         /* 第一層 div 為「非 static 容器」 */
  .b div div {background: #06f5;}

  .c div div {background: #0a05;}
</style>

CSS 教學 - 定位 position - absolute 絕對定位

因為絕對定位元素會使用「margin 外邊界」進行定位,所以如果絕對定位元素本身有設定外邊界,則定位時需要加上或減去外邊界的數值,下方範例的元素設定了 margin:20px,定位時就會發現位置往右往下各移動了 20px。

線上展示:https://codepen.io/oxxo/pen/VwJEXMN

<!-- HTML 程式碼-->
<div class="a">
  <div>
    <div>apple</div>
  </div>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 20px;
    background: #aaa;
    margin: 10px;
  }
  div div {
    position: relative;
    background: #ccc;
    margin: 0;
  }
  div div div {
    position: absolute;
    top: 0;
    left: 0;
    margin: 20px;       /* 設定外邊界 */
    background: #f005;
  }
</style>

CSS 教學 - 定位 position - absolute 絕對定位元素設定外邊界

轉換成絕對定位元素會脫離原本的排版方式,彷彿從原本的排版消失,獨立到另外的圖層,原本所佔的容器或內容空間,就會由其他的元素根據排版方式填補,下方的範例將文字裡的 strong 元素轉換成絕對定位,除了離開原本的位置且由其他元素遞補位置,也可以看出 strong 元素具有 block 特性,可以調整寬高與上下邊界。

線上展示:https://codepen.io/oxxo/pen/RwzeMLX

<!-- HTML 程式碼-->
<div>
  STEAM 教育學習網秉持著 STEAM/STEM 的精神<strong>OXXO.STUDIO</strong>,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    margin: 10px;
    padding: 20px;
    position: absolute;  /* 父元素設定為 absolute 變成非 static 元素 */
  }
  strong {
    position: absolute;
    left: 0;
    top: 0;
    border: 1px solid red;
    padding: 10px 30px;
    background: #f005;
  }
</style>

CSS 教學 - 定位 position - absolute 絕對定位元素會脫離原本的排版方式

position:fixed 固定定位

position:fixed 表示元素會進行「固定定位」,設定這個屬性值的元素會有下列特性:

  • 固定定位元素會參考所在的「頁面視窗」進行定位,不會隨卷軸滾動而移動
  • 固定定位元素會脫離原本的排版方式,元素容器和內容空間會完全獨立於其他平面
  • 固定定位元素的定為位置是「margin 外邊界」。
  • 固定定位元素的顯示類型會轉換成「block」類型,可設定寬高與上下邊界。
  • 如果固定元素的「祖先元素」的 transformperspectivefilterbackdrop-filter 的屬性值非 none,固定元素就會參考這個元素進行定位

下方範例會將四個固定定位元素分別定位在頁面的四個角落,不論這些元素原本位在何處,定位後就會使用頁面視窗進行定位。

線上展示:https://codepen.io/oxxo/pen/Bagqrmj

<!-- HTML 程式碼-->
<div>
  STEAM 教育學習網秉持著 STEAM/STEM 的精神<div class="a">apple</div>,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。
</div>
<div>我是 div
  <div class="b">banana</div>
</div>
<div>我是第一層 div
  <div>我是第二層 div
    <div class="c">coconut</div>
  </div>
</div>
<div class="d">oxxo</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 10px;
  }
  div[class] {
    position: fixed;  /* 具有 class 屬性的 div 都設定為 fixed */
    width: 100px;
    height: 100px;
    padding: 0;
  }
  .a {
    top: 0;
    left: 0;
    background: #f00d;
  }
  .b {
    top: 0;
    right: 0;
    background: #0a0d;
  }
  .c {
    bottom: 0;
    right: 0;
    background: #00fd;
  }
  .d {
    bottom: 0;
    left: 0;
    background: #f90d;
  }
</style>

CSS 教學 - 定位 position - fixed 固定定位

如果固定元素的「祖先元素」的 transformperspectivefilterbackdrop-filter 的屬性值非 none,固定元素就會參考這個元素進行定位,下方範例將設定了某個 div 為 filter: blur(2px),位於該 div 裡的固定元素,就會參考這個 div 進行定位,也因為是參考元素不是參考視窗,捲軸移動時就會跟著移動。

線上展示:https://codepen.io/oxxo/pen/yLdRKPo

<!-- HTML 程式碼-->
<div>
  STEAM 教育學習網秉持著 STEAM/STEM 的精神<div class="a">apple</div>,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。
</div>
<div>我是 div
  <div class="b">banana</div>
</div>
<div>我是第一層 div
  <div class="test">我是第二層 div
    <div class="c">coconut</div>
  </div>
</div>
<div class="d">oxxo</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 10px;
  }
  .a, .b, .c, .d {
    position: fixed;
    width: 100px;
    height: 100px;
    padding: 0;
  }
  .a {
    top: 0;
    left: 0;
    background: #f00d;
  }
  .b {
    top: 0;
    right: 0;
    background: #0a0d;
  }
  .c {
    bottom: 0;
    right: 0;
    background: #00fd;
  }
  .d {
    bottom: 0;
    left: 0;
    background: #f90d;
  }
  .test {
    filter: blur(2px);  /* 設定有模糊的 filter */
  }
</style>

CSS 教學 - 定位 position - fixed 固定定位元素祖先有設定 filter

position:sticky 黏貼定位

position:sticky 表示元素會進行「黏貼定位」,設定這個屬性值的元素會有下列特性:

  • 黏貼定位元素會參考元素「最靠近的祖先元素的捲動高度」進行定位。
  • 當黏貼定位元素的 topbottomleftright 數值小於等於元素和視窗邊緣的距離,黏貼定位元素就會具有類似 fixed 固定不動的表現方式
  • 如果數值大於元素和視窗邊緣的距離,或接觸到任意祖先元素的邊緣,黏貼定位元素就會恢復成類似 relative 跟隨元素移動的表現方式
  • 如果黏貼定位的祖先元素設定了 overflow 的樣式屬性,可能會影響黏貼定位元素的顯示。

下方範例將黃色 div 設定為黏貼定位,當這個 div 往上捲動距離視窗上緣 50px 的時候,就會觸發變成類似 fixed 固定不動,但當碰到父元素邊緣或距離視窗上緣超過 50px 的時候,又會恢復成類似 relative 相對移動的方式。

線上展示:https://codepen.io/oxxo/pen/XWLxEzE

<!-- HTML 程式碼-->
<div class="test">紅色區塊高度 50px;</div>
<h1>Hello!!</h1>
<div>
  <div class="a">oxxo</div>
</div>
<div></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 300px;
    border: 1px solid #000;
  }
  .a {
    width: 100px;
    height: 100px;
    position: sticky;   /* 設定為黏貼定位 */
    top: 50px;
    left: 0;
    background: yellow;
  }
  .test {
    position: fixed;    /* 使用一個固定定位元素凸顯位置 */
    top: 0;
    left: 110px;
    background: #f009;
    height: 50px;
    top: 0;
    left: 110px;
  }
</style>

CSS 教學 - 定位 position - sticky 黏貼定位

下方範例會將所有的 h2 設定為黏貼定位元素,可以看出當捲動捲軸抵達頂端時,h2 就會固定不動,呈現出特別的閱讀效果。

線上展示:https://codepen.io/oxxo/pen/abgRYVj

<!-- HTML 程式碼-->
<main>
  <h1>Hello World!!</h1>
  <h2 class="a">apple</h2>
  <p>我是內容<br/>我是內容<br/>我是內容<br/>我是內容<br/></p>
  <h2>banana</h2>
  <p>我是內容<br/>我是內容<br/>我是內容<br/>我是內容<br/></p>
  <h2>oxxo</h2>
  <p>我是內容<br/>我是內容<br/>我是內容<br/>我是內容<br/></p>
  <p>我是內容<br/>我是內容<br/>我是內容<br/>我是內容<br/></p>
  <p>我是內容<br/>我是內容<br/>我是內容<br/>我是內容<br/></p>
</main>

<!-- CSS 程式碼 -->
<style>
  main {
    border: 1px solid #000;
  }
  h2 {
    background: orange;
    position: sticky;
    top: 0;
  }
</style>

CSS 教學 - 定位 position - sticky 黏貼定位特別的閱讀效果

圖層關係:z-index

z-index 樣式屬性可以設定元素的「Z 軸」位置,也就是常見專有名詞「圖層」,表示每個元素在顯示時的「前後關係」,通常在預設狀態下,程式碼裡下方元素的「容器空間」會覆蓋上方元素,但內容不會覆蓋,z-index 樣式屬性沒有繼承特性,但具有下列特性:

  • 只適用於「static 定位元素」。
  • 屬性值使用「正整數或負整數」,值越大越靠近使用者,數值越小越靠遠離使用者,數值大的元素覆蓋數值小的元素。
  • 如果數值相同,則按照程式碼中的順序,下方元素覆蓋上方元素。
  • 預設值 auto,等同 z-index:0

CSS 教學 - 定位 position - 圖層關係 z-index

下方範例有兩組 div,都有修改 div 的 margin 使其互相覆蓋,上方的 div 使用預設值,可以看出下方元素雖然會覆蓋上方元素,而下方的 div 都修改成 position:relative,下方元素的「容器和內容」就都會覆蓋掉上方的元素。

線上展示:https://codepen.io/oxxo/pen/GRbYxyR

<!-- HTML 程式碼-->
<main>
  <div class="a">apple</div>
  <div class="b">banana</div>
  <div class="c">oxxo</div>
</main>
<main class="z">
  <div class="a">apple</div>
  <div class="b">banana</div>
  <div class="c">oxxo</div>
</main>

<!-- CSS 程式碼 -->
<style>
  main {padding: 30px;}
  .z div {position: relative;} /* 下方的 div 都是 relative */
  div {
    padding: 16px;
    margin-top: -30px;
    border: 1px solid #000;
    font-size: 24px;
  }
  .a {background: #f90;}
  .b {
    margin-left: 10px;
    background: #0c0;
  }
  .c {
    margin-left: 20px;
    background: #0cf;
  }
</style>

CSS 教學 - 定位 position - z-index 預設的容器與內容覆蓋狀況

下方範例會修改 z-index 數值,讓 div 圖層前後排列順序改變,就會產生不同的效果。

線上展示:https://codepen.io/oxxo/pen/BagqrJj

<!-- HTML 程式碼-->
<main>
  <div class="a">apple</div>
  <div class="b">banana</div>
  <div class="c">oxxo</div>
</main>
<main class="z">
  <div class="a">apple</div>
  <div class="b">banana</div>
  <div class="c">oxxo</div>
</main>

<!-- CSS 程式碼 -->
<style>
  main {padding: 30px;}
  .z div {position: relative;}
  div {
    padding: 16px;
    margin-top: -30px;
    border: 1px solid #000;
    font-size: 24px;
  }
  .a {
    background: #f90;
    z-index: 10;       /* z-index 數值最大,擺在最前面 ( 原本在後方 ) */
  }
  .b {
    margin-left: 10px;
    background: #0c0;
    z-index: -99;      /* z-index 數值最小,擺在最後面 ( 原本在中間 ) */
  }
  .c {
    margin-top: -60px;
    margin-left: 80px;
    background: #0cf;
    z-index: 5;      /* z-index 數值第二大,擺在中間 ( 原本在最後方 ) */
  }
</style>

CSS 教學 - 定位 position - 設定 z-index

小結

元素的定位是網頁排版中最常出現的技巧,幾乎隨處可見透過定位方式來指定元素位置,透過這篇教學可以清楚認識元素的定位,相信對於網頁排版一定相當有幫助。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 使用巢狀結構語法 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 位置名稱與時間單位

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 定義字型 ( @font-face ) 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視 3D 正多面體

視窗與使用者行為

捲軸樣式 ( scrollbar ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫