搜尋

輪廓 outline

輪廓是一種會出現在元素「邊框外緣」的一種「裝飾線條」,具有不佔空間又不受限矩形的特性,這篇教學會介紹控制輪廓樣式的 outline、outline-style、outline-width 和 outline-color 用法,最後還會介紹什麼是「不規則形狀」的輪廓。

快速導覽:

CSS 教學 - 輪廓 outline

outline 撰寫語法

輪廓是元素的一種「裝飾」,會出現在「邊框外緣」,跟元素邊框有點類似,但也有下列幾種差別:

差異 輪廓 outline 邊框 border
空間 不具空間,裝飾性質 具有空間,會推擠其元素
形狀 不一定要矩形 ( 行內容器有時會合併成不規則形狀 ) 矩形
瀏覽器預設渲染 部分元素的 :focus 會有輪廓 部分元素會有邊框
獨立控制四個邊緣 不行,一次控制全部輪廓 可以
不顯示 使用 none 使用 nonehidden

如果要控制輪廓樣式,最簡單的方法可以使用「縮寫形式」的 outline,一次設定「輪廓粗細、輪廓樣式、輪廓顏色」,撰寫語法如下:

div {
  border: 輪廓粗細 輪廓樣式 輪廓顏色;
}

雖然縮寫形式很方便,但仍有一些相關規則:

  • 屬性值使用「空白」分隔。
  • 屬性值「沒有先後順序規則」。
  • 縮寫形式如果沒有輪廓樣式,會自動套用 none,不會呈現輪廓。

下方的範例會讓三個 div 呈現不同輪廓,並用 span 作為實際內容區域,從中可以注意輪廓包覆著邊框,如果有設定邊框圓角,輪廓也會變成圓角

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

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

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 50px;
    margin: 20px;
    padding: 10px;
    border: 5px solid red;
  }
  span {
    display: block;
    width: 100%;
    height: 100%;
    background: orange;
  }
  .a {outline: 2px solid #000;}
  .b {outline: 5px solid #000;}
  .c {
    border-radius: 30px;     /* 邊框圓角 */
    outline: 5px solid #000;
  }
</style>

CSS 教學 - 輪廓 outline - outline 撰寫語法

由於 outline 只是裝飾性質,不佔任何空間,因此如果輪廓寬度較大,就會發生遮蔽其他元素的狀況,下方範例呈現同樣寬度的 borderoutline 在空間上的差異。

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

<!-- HTML 程式碼 -->
<div class="a">border: 30px solid #f005;</div>
<span>hello oxxo!!</span>
<br>
<span>good morning</span>
<div class="b">outline: 30px solid #0f0;</div>
<span>hello oxxo!!</span>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    height: 50px;
    margin-left: 30px;
  }
  span {font-size: 20px;}
  .a {border: 15px solid #f00;}
  .b {outline: 15px solid #0f0;}
</style>

CSS 教學 - 輪廓 outline - outline 不佔任何空間

outline-style 輪廓樣式

設定輪廓時,需要使用特定的「樣式名稱」,就能產生對應的「輪廓樣式」,下方列出 CSS 支援的輪廓樣式名稱 ( 幾乎和邊框相同 ):

邊框樣式名稱 說明
auto 讓瀏覽器自動渲染輪廓樣式 ( 每種瀏覽器和每個元素都不太相同 )。
none 沒有輪廓,輪廓寬度為 0。
solid 實線。
double 雙實線,雙實線的總寬度為輪廓的寬度。
dotted 圓點虛線,圓點直徑等於寬度,圓點間隔根據瀏覽器自行定義。
dashed 方形虛線,長度與間隔根據瀏覽器自行定義。
groove 凹槽雕刻效果輪廓。
ridge 浮雕效果輪廓。
inset 陷入效果輪廓。
outset 突起效果輪廓。

下方範例會使用多個 div,分別表現不同的輪廓樣式。

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

<!-- HTML 程式碼 -->
<div class="a">solid</div>
<div class="b">double</div>
<div class="c">dotted</div>
<div class="d">dashed</div>
<div class="e">groove</div>
<div class="f">ridge</div>
<div class="g">inset</div>
<div class="h">outset</div>
<div class="i">auto</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 120px;
    padding: 20px 10px;
    margin: 15px;
    outline: 10px solid red;
    float: left;
  }
  .a {outline-style: solid;}
  .b {outline-style: double;}
  .c {outline-style: dotted;}
  .d {outline-style: dashed;}
  .e {outline-style: groove;}
  .f {outline-style: ridge;}
  .g {outline-style: inset;}
  .h {outline-style: outset;}
  .i {outline-style: auto;}
</style>

CSS 教學 - 輪廓 outline - outline-style 邊框樣式

outline-width 輪廓粗細

設定輪廓的粗細時,需要使用「具有長度單位」的數值,和邊框粗細的差異是,邊框粗細可以單獨設定上下左右的粗細,而輪廓只能一次性設定全部輪廓的粗細,下方列出 CSS 支援的輪廓粗細長度單位:

延伸閱讀:長度與角度單位

長度單位 性質 說明
px 絕對長度 像素。
em 相對長度 元素本身字體大小的幾倍。
rem 相對長度 根元素字體大小的幾倍。
thin 細 ( 關鍵字 ) 通常是 1px~2px,由瀏覽器決定。
medium 中等 ( 關鍵字 ) 通常是 2px~4px,由瀏覽器決定。
thick 粗 ( 關鍵字 ) 通常是 3px~5px,由瀏覽器決定。
pt、cm、mm、in 絕對長度 印刷單位。

下方範例使會使用五個 div,分別呈現不同輪廓粗細的設定方式。

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

<!-- HTML 程式碼 -->
<div class="a">outline-width: 10px;</div>
<div class="b">outline-width: 0.5em;</div>
<div class="c">outline-width: 1rem;</div>
<div class="d">outline-width: thin;</div>
<div class="e">outline-width: thick;</div>

<!-- CSS 程式碼 -->
<style>
  :root {
    font-size: 20px;
  }
  div {
    width: 200px;
    margin: 30px;
    padding: 10px;
    outline:10px solid #000;
    font-size: 14px;
  }
  .a {outline-width: 10px;}
  .b {outline-width: 0.5em;} /* 14px x 0.5 = 7px */
  .c {outline-width: 1rem;}  /* 20px x 1 = 20px */
  .d {outline-width: thin;}
  .e {outline-width: thick;}
</style>

CSS 教學 - 輪廓 outline - outline-width 輪廓粗細

outline-color 輪廓顏色

設定輪廓的顏色時,需要使用「具有顏色單位」的數值,只支援「單色」,每種顏色單位都可以添加不同程度的透明度,下方列出 CSS 支援的輪廓顏色單位。

延伸閱讀:顏色單位CSS 函式 ( 色彩模型 )

顏色單位 性質 範例
顏色名稱 使用 CSS 支援色顏色名稱 redblue
transparent ( 關鍵字 ) 透明。 transparent
十六進位色碼 紅綠藍十六進位色碼。 #ffc900#ffc90055
十六進位色碼 ( 簡寫 ) 簡寫紅綠藍十六進位色碼。 f00f005
rgb() RGB 色彩模型 ( sRGB 色彩空間 )。 rgb(255, 0, 0, 0.5)
hsl() HSL 色彩模型 ( sRGB 色彩空間 )。 hsl(120, 50%, 30%, 0.5)
lab() Lab 色彩模型 ( CIELab 色彩空間 )。 lab(100% -125 125 / 0.2)
lch() LCH 色彩模型 ( CIELab 色彩空間 )。 lch(50% 50 180 / 0.3)
oklab() OkLab 色彩模型 ( OkLab 色彩空間 )。 oklab(0.3 -0.4 0.4 / 0.8)
oklch() OkLCH 色彩模型 ( OkLab 色彩空間 )。 oklch(0.3 0.2 0 / 0.5)
color() 指定色彩空間顏色。 color(display-p3 0.5 1 0)
color-mix() 顏色混合。 color-mix(in srgb, blue 60%, white)
light-dark() 深色與淺色模式。 light-dark(#fa0, #06f)

下方範例使會使用五個 div,分別呈現不同邊框顏色的設定方式,顏色單位可以混合使用,只要最後可以正確計算出顏色數值就可以

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

<!-- HTML 程式碼 -->
<div class="a">outline-color: orange;</div>
<div class="b">outline-color: #a0a;</div>
<div class="c">outline-color: #ff000077;</div>
<div class="d">outline-color: rgb(0,200,100);</div>
<div class="e">outline-color: hsl(50, 50%, 30%, 0.5);</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 260px;
    margin: 30px;
    padding: 10px;
    outline:10px solid #000;
    font-size: 14px;
  }
  .a {outline-color: orange;}
  .b {outline-color: #a0a;}
  .c {outline-color: #ff000077;}
  .d {outline-color: rgb(0,200,100);}
  .e {outline-color: hsl(50, 50%, 30%, 0.5);}
</style>

CSS 教學 - 輪廓 outline - outline-color 輪廓顏色

不規則形狀的 outline

outline 最大的特色就是「不受限矩形」範圍,這種現象在 inlineinline-* 等行內容器特別明顯,雖然網頁元素容器都是矩形,但行內元素的換行或不同高度間的組合,對於 outline 而言卻會合併成一個「不規則形狀」,因此就會替這個不規則形狀加上輪廓。

下方的範例展示設定了 outline 的 div、span 裡的 strong 以及整個 span,可以看見行內容器組合後的不規則輪廓,以及 div 仍保留矩形輪廓的效果。

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

<!-- HTML 程式碼 -->
<div><span>STEAM 教育學習網<strong>透過一系列免費且高品質的教學與範例</strong>,讓所有人都能輕鬆跨入 STEAM 的學習領域。</span></div>
<span>STEAM 教育學習網<img class="a" src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg">透過一系列免費且高品質的教學與範例</span>
  
<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    margin: 30px;
    padding: 10px;
    outline: 3px dotted #000;
  }
  strong {outline: 3px solid red;}
  span {outline: 3px dashed blue;}
  img {width:100px;}
</style>

CSS 教學 - 輪廓 outline - 行內容器不規則形狀的 outline

但如果行內容器每一行的「行高太高」,造成上下行的間距超過了容器本身容器空間 ( 參考「文字行高、文字縮排」 ),這時就會變成兩個獨立的容器空間,輪廓也就會分開。

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

<!-- HTML 程式碼 -->
<div><span>STEAM 教育學習網<strong>透過一系列免費且高品質的教學與範例</strong>,讓所有人都能輕鬆跨入 STEAM 的學習領域。</span></div>
<div class='a'><span>STEAM 教育學習網<strong>透過一系列免費且高品質的教學與範例</strong>,讓所有人都能輕鬆跨入 STEAM 的學習領域。</span></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    margin: 20px;
    padding: 10px;
    outline: 3px solid #000;
  }
  .a {line-height: 50px;}
  strong {outline: 5px solid red;}
  span {outline: 2px dashed blue;}
</style>

CSS 教學 - 輪廓 outline - 行內容器行高太高的 outline

小結

元素輪廓 outline 是一個滿有意思的樣式屬性,雖然沒有 border 的豐富多變,但其「不影響容器邊界」的特性,更適合用來操作一些不希望影響排版的樣式,相信對於網頁設計一定很有幫助。

意見回饋

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

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則

CSS 選擇器

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

數值與單位

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

變數與內容函式

變數 數學計算 文字與清單計數 生成內容與引號

顏色與濾鏡

色彩模型 漸層色 影像濾鏡

文字樣式

使用通用字型 使用外部字型 @font-face 定義字型 文字尺寸 常用文字樣式 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 特殊文字樣式

元素容器

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

背景與陰影

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

清單與表格

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

基本排版與定位

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

Flexbox 彈性排版

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

Grid 網格排版

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

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 3D 轉換與透視