搜尋

可見性 visibility、content-visibility、透明度 opacity

visibility 和 opacity 樣式屬性就如同字面的意思,表示元素的可見性和透明度,這篇教學所介紹的樣式可以將元素「顯示」或「隱藏」,這篇教學會介紹元素可見性 visibility、內容可見性 content-visibility 以及 opacity 透明度的用法。

快速導覽:

CSS 教學 - 元素可見性 visibility、透明度 opacity

visibility 元素可見性

visibility 是一個很簡單的樣式屬性,可以將元素「隱藏」或「顯示」,因為具有繼承特性,所以如果父元素設定了隱藏,則子元素也會一併隱藏,這個樣式有下列屬性值:

屬性值 說明
visible 顯示 ( 預設值 )
hidden 隱藏,仍然保留容器空間。
collapse 對於 trtbodycolcolgroup 元素等於 display:none,其他元素則等同 visibility:hidden

屬性值 visible 和 hidden

visibility 的屬性值 visiblehidden 分別表示元素「顯示」或「隱藏」,但隱藏不等於 display:none 的完全消失,仍然會保留原本所佔的容器空間 ( 類似 opacity:0 ),隱藏元素所包含的子元素也會一併隱藏,也會失去透過鍵盤 tab 切換焦點的功能 ( 例如切換選單 )。

下方的範例將 strong 元素和 h3 元素設定為 visibility:hidden,這兩個元素就會從畫面中消失,但其空間仍然保留。

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

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

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    margin: 10px;
  }

  strong, h3 {
    border: 1px solid red;
    visibility: hidden; 
  }
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - visibility 的 visible 和 hidden

屬性值 collapse

collapse 是針對「表格」元素的屬性值,只要是 trtbodycolcolgroup 相關元素,設定後效果等於 display:none,元素會消失且不佔空間,如果是其他元素,則表現如同 visibility:hidden

下方範例呈現三個表格,第一個是正常表格,第二個表格使用 visibility:hiddentr 會保留空間,第三個表格使用 visibility:collapsetr 就會完全消失。

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

<!-- HTML 程式碼 -->
<table class="a">
  <tr><td>apple</td><td>banana</td><td>oxxo</td></tr>
  <tr><td>100</td><td>200</td><td>300</td></tr>
  <tr><td>9999</td><td>8888</td><td>7777</td></tr>
</table>
<table class="b">
  <tr><td>apple</td><td>banana</td><td>oxxo</td></tr>
  <tr><td>100</td><td>200</td><td>300</td></tr>
  <tr><td>9999</td><td>8888</td><td>7777</td></tr>
</table>
<table class="c">
  <tr><td>apple</td><td>banana</td><td>oxxo</td></tr>
  <tr><td>100</td><td>200</td><td>300</td></tr>
  <tr><td>9999</td><td>8888</td><td>7777</td></tr>
</table>

<!-- CSS 程式碼 -->
<style>
  table {
    margin: 10px;
    border: 3px solid #000;
  }
  td {
    border: 1px solid #000;
  }
  .b tr:first-child {
    visibility: hidden;
  }
  .c tr:first-child {
    visibility: collapse;
  }
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - visibility 屬性值 collapse

如果是作用在其他元素,表現就會如同 visibility:hidden,下方範例的兩個 h3 分別套用了 visibility:hiddenvisibility:collapse,呈現的結果完全相同。

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

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

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    margin: 10px;
    width: 200px;
  }

  .a h3 {
    visibility: hidden;
  }

  .b h3 {
    visibility: collapse;
  }
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - visibility 的 hidden 和 collapse 大同小異

content-visibility 內容可見性

content-visibility 是一個可以將「元素的內容」隱藏或顯示的樣式屬性,具有繼承特性,有下列屬性值:

屬性值 說明
visible 顯示 ( 預設值 )
hidden 隱藏,不保留容器空間,類似 display:none
auto 元素內容與使用者相關時才顯示,不相關時隱藏。

下方範例會展示屬性值 visiblehidden 的差異,可以看出 content-visibility: hidden 並不會保留容器空間,表現行為和 display:none 類似 ( 注意,如果使用 visibility: hidden 會保留容器空間 )。

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

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

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 5px;
    margin: 10px;
    background: #fc0;
  }
  .a {content-visibility: hidden;}
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - content-visibility 內容可見性

如果設定 auto 屬性值表示,當元素內容「與使用者相關時」才會顯示,不然就會隱藏,這種做法主要針對「過長」的頁面,透過自動隱藏和顯示的做法,可以替頁面提高執行效率,下方列出與使用者相關的情形:

  • 元素出現在畫面中。
  • 元素進入瀏覽器定義的頁面範圍 ( 通常是瀏覽視窗尺寸的 50%,提供瀏覽器有足夠的時間渲染元素 )。
  • 元素或其內容獲得焦點 ( 例如被選取或被程式點擊 )。
  • 元素或其內容放置在最上層。

通常使用 auto 屬性值會搭配 contain-intrinsic-size 才會突顯視覺效果,下方的範例會產生一個「過長」的頁面,接著透過 contain-intrinsic-size: auto 1000px 設定尚未渲染時元素內容預設高度為 1000px,透過 content-visibility: auto 隱藏畫面外的內容,當使用者開始捲動捲軸時,才會開始渲染進入頁面範圍的內容,「捲軸的長度」也就會發生變化,直到頁面全部渲染完成,捲軸長度就會固定。 ( 這個做法只是在證明尚未出現在畫面中的元素還沒有被渲染 )

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

<!-- HTML 程式碼 -->
<div><h3>區塊 1</h3></div>
<div><h3>區塊 2</h3></div>
<div><h3>區塊 3</h3></div>
<div><h3>區塊 4</h3></div>
<div><h3>區塊 5</h3></div>
<div><h3>區塊 6</h3></div>
<div><h3>區塊 7</h3></div>
<div><h3>區塊 8</h3></div>
<div><h3>區塊 9</h3></div>
<div><h3>區塊 10</h3></div>
<div><h3>區塊 11</h3></div>
<div><h3>區塊 12</h3></div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 5px;
    margin: 10px;
    background: #fc0;
    content-visibility: auto;
    contain-intrinsic-size: auto 1000px; /* 假設內容高度為 1000px */
  }
  h3 {height: 100px;}  /* 內容渲染後實際高度 */
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - content-visibility 使用 auto 屬性值

opacity 透明度

opacity 樣式屬性可以設定元素的「透明度」,屬性值為 0~1 的浮點數,數值越大越不透明,0 表示全透明,具有繼承的特性,如果父元素設定了透明度,子元素也會一起變成透明,這個樣式屬性和 CSS 的透明度函式「filter:opacity()」用法大同小異,差別只在於函式的透明度是「參數」,而樣式的透明度是「屬性值」。

下方範例使用 opacityfilter:opacity() 兩種方法修改元素的透明度,呈現的效果完全相同。

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

<!-- HTML 程式碼 -->
<div class="a">
  <span>使用樣式 opacity:0.5</span>
  <div>
    <div>apple</div>
    <div>oxxo.studio</div>
  </div>
</div>
<div class="b">
  <span>使用濾鏡 filter:opacity(0.5)</span>
  <div>
    <div>apple</div>
    <div>oxxo.studio</div>
  </div>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    padding: 5px;
    margin: 10px;
    background: orange;
  }
  .a {opacity: 0.5;}
  .b {filter: opacity(0.5);}
</style>

CSS 教學 - 元素可見性 visibility、透明度 opacity - opacity 透明度

小結

visibility 樣式屬性使用時只需注意 collapse 有其對應元素,以及 hidden 隱藏的元素仍然會佔據空間,至於 opacity 就更簡單,只需要利用 0~1 的浮點數控制透明度,兩個都是非常容易上手的樣式屬性。

意見回饋

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

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 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫