iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Modern Web

一個人的朝聖:重啟對 CSS 的認識系列 第 19

Z-index and stacking contexts

  • 分享至 

  • xImage
  •  

概念

在 normal flow 下,position 要設定 static 以外的值,z-index 才有效。

*如果是用 flexbox 或是 grid 排版,可直接修改 item 的 z-index,不需要另外加 position: relative

<div class="container">
  <div class="item">I am item</div>
</div>
.container {
  width: 250px;
  height: 250px;
  background: rgb(232 240 254 / 0.5);
}

.container .item {
  position: relative;
  z-index: -1;
  width: 300px;
  background: pink;
}

container 元素 z-index 初始值為 auto,item 元素 z-index 為 -1,item 會被蓋在 container 底下

如果改成以下樣式

.container {
  position: relative;
  z-index: 0;
}

container 元素的 position 已經不是 static,且 z-index 也不是 auto,此時 container 會建立一個全新的 stacking context,即使現在把 item 的 z-index 設為 -999,item 也不會被蓋在 container 底下。

可以使用 opacitywill-change 或是 transform 等方式,來建立 stacking context,不一定要用 position + z-index

*建立 stacking context 的方式很多,可參考 MDN Web Docs - Stacking context

Stacking context

stacking context 像是把相同父層的元素集結在一起成為一個獨立環境,可以透過 z-index 來控制每一層在 z 軸的位置。

https://ithelp.ithome.com.tw/upload/images/20241003/20128122VAAzQkSqG7.png
圖取自 x.com(Julia Evans) - z-index & stacking contexts

*同一個 stacking context 才會比較 z-index 值,適合拿來做圖層群組化


參考資源

What The Heck, z-index??


上一篇
Focus
下一篇
Functions
系列文
一個人的朝聖:重啟對 CSS 的認識30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言