CSS 技巧:讓 SVG 圖標像文字一樣自然排版在文字後

更新 發佈閱讀 5 分鐘

問題

在一段文字後面需要接一個 SVG icon,例如「外部連結 icon」或「提示 icon」。

希望達到的效果是:

    • SVG 緊貼在最後一個字後面
    • 文字換行時,icon 跟著最後一個字
    • icon 不會跑到下一行開頭

例如希望呈現:

這是一段很長的文
字 🔗

而不是:

這是一段很長的文

🔗

問題範例

<span class="text">
這是一段很長的文字
<svg class="icon" width="16" height="16">
<circle cx="8" cy="8" r="8" />
</svg>
</span>

有些人會嘗試使用 flexinline-flex

.text {
display: inline-flex;
}

但當文字換行時,icon 可能會被排到 下一行開頭,造成 icon 與文字分離。


為什麼會發生這個問題?

因為 flex 會把內容拆成 flex items

[text node] [svg]

當空間不足時,瀏覽器可能會把 整個 svg item 移到下一行,而不是把它當作文字的一部分。


正確做法

讓 SVG 保持 inline 排版,讓瀏覽器使用 文字流排版(inline formatting context)

.icon {
display: inline;
vertical-align: text-bottom;
margin-left: 0.1em;
}

完整範例:

<span class="text">
這是一段很長很長很長很長很長很長很長的文字
<svg class="icon" width="16" height="16">
<circle cx="8" cy="8" r="8"/>
</svg>
</span>
.icon {
display: inline;
vertical-align: text-bottom;
margin-left: 0.15em;
}

效果:

這是一段很長很長很長很長很長很長
的文字 🔗

SVG 會自然貼在最後一個字後。


為什麼 SVG 可以 display: inline

1. SVG 在 HTML 中預設就是 inline element

在瀏覽器預設樣式中:

svg {
display: inline;
}

所以 SVG 可以直接出現在文字中,例如:

文字 <svg></svg> 文字

瀏覽器會把它當作一個 inline box


2. inline 元素會參與文字排版(inline formatting context)

當元素是 display: inline

  • 會跟文字一起排列
  • 會跟著文字換行
  • 不會強制換行

排版概念其實是:

[][][][svg]

SVG 在排版中就像一個「字元」。


3. SVG 屬於 replaced element

SVG 與 <img> 類似,屬於 replaced element

特性:

  • 內容由外部資源決定
  • 有 intrinsic size
  • 可以像圖片一樣嵌入文字流

例如:

文字 <img src="icon.png">
文字 <svg>...</svg>

這兩種在排版上非常相似。


為什麼 icon 會貼在最後一個字?

在 inline 排版中,瀏覽器會:

  1. 從左到右填滿一行
  2. 空間不足才換行

所以排版順序會是:

文字文字文字[svg]

如果空間足夠:

文字文字文字🔗

如果空間不足:

文字文字文字
🔗

因此 SVG 會自然跟在最後一個字後面。


結論

如果希望 icon 像文字一樣跟著排版不要使用 flex 保持 inline 排版

因為:

  • inline 元素會參與 文字流排版
  • SVG 會被當作 字元盒 (inline box) 處理
  • 因此可以自然貼在最後一個文字後方

讓 SVG 保持 display: inline,它就會像文字一樣參與排版,並自然接在最後一個字後面。

.icon {
display: inline;
}
raw-image
raw-image
留言
avatar-img
努力成長的前端小宅宅 沙龍
1會員
6內容數
在人生的里程中閃耀。 在故事中分享人生的里程碑,鼓勵進行自我評估。在每一個里程中展現你的光芒。 以分享學習到的知識與大家分享
2026/03/05
承接上一篇內容,那MAC該如何讓android 可以偵錯? 安裝 ADB ADB安裝起手式 : 先確認有安裝 Homebrew 如果還沒安裝,可以到官方網站安裝:https://brew.sh 打開 終端(Terminal) 輸入:brew update brew install and
2026/03/05
承接上一篇內容,那MAC該如何讓android 可以偵錯? 安裝 ADB ADB安裝起手式 : 先確認有安裝 Homebrew 如果還沒安裝,可以到官方網站安裝:https://brew.sh 打開 終端(Terminal) 輸入:brew update brew install and
2026/03/05
想必大家都知道 可以用 “Chrome DevTools” 遠端偵錯 Android 裝置,只要在 Chrome 瀏覽器 “前往chrome://inspect#devices” 並插上 USB 連接裝置就可以了把?! 但真的是這樣嗎? 你想想 MAC 與 android 使用的系統不同 是
2026/03/05
想必大家都知道 可以用 “Chrome DevTools” 遠端偵錯 Android 裝置,只要在 Chrome 瀏覽器 “前往chrome://inspect#devices” 並插上 USB 連接裝置就可以了把?! 但真的是這樣嗎? 你想想 MAC 與 android 使用的系統不同 是
2024/06/27
內容交付網路(CDN)是一種網路架構,旨在提高用戶訪問網站內容的速度和效能。其基本原則是將網站內容分佈在全球的伺服器節點上。當使用者訪問網站時,CDN會根據使用者的地理位置和網路狀況,自動從最近的節點傳送內容,降低數據傳輸。
Thumbnail
2024/06/27
內容交付網路(CDN)是一種網路架構,旨在提高用戶訪問網站內容的速度和效能。其基本原則是將網站內容分佈在全球的伺服器節點上。當使用者訪問網站時,CDN會根據使用者的地理位置和網路狀況,自動從最近的節點傳送內容,降低數據傳輸。
Thumbnail
看更多
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
這個表格會有以下功能: 基本表格(顯示姓名、年齡、職業) CSS 美化(加上邊框、hover 效果、標題底色) JS 搜尋(可以輸入文字快速篩選) JS 排序(點欄位標題可以排序) HTML <!DOCTYPE html> <html lang="zh-Hant"> <head>
Thumbnail
這個表格會有以下功能: 基本表格(顯示姓名、年齡、職業) CSS 美化(加上邊框、hover 效果、標題底色) JS 搜尋(可以輸入文字快速篩選) JS 排序(點欄位標題可以排序) HTML <!DOCTYPE html> <html lang="zh-Hant"> <head>
Thumbnail
作為 2024 年 5 月的最後一週,主題取名為「Filter fest!」。 也就是說這個 Pen 至少要使用到兩種以上的 "filter" 就對了。前幾週的挑戰練習了前端不同的 filter,例如:CSS filter、SVG filter、Javascript filter。
Thumbnail
作為 2024 年 5 月的最後一週,主題取名為「Filter fest!」。 也就是說這個 Pen 至少要使用到兩種以上的 "filter" 就對了。前幾週的挑戰練習了前端不同的 filter,例如:CSS filter、SVG filter、Javascript filter。
Thumbnail
老師請問tailwind是什麼呢? Tailwind 是一個現代化的 CSS 框架,它的設計理念是「高度可定制的實用型 CSS 庫」。與其他 CSS 框架不同的是,Tailwind 不是基於預先定義好的樣式類別和樣式集合,而是提供了大量的 CSS 實用類別,讓開發者可以更靈活地自由組合和應用。
Thumbnail
老師請問tailwind是什麼呢? Tailwind 是一個現代化的 CSS 框架,它的設計理念是「高度可定制的實用型 CSS 庫」。與其他 CSS 框架不同的是,Tailwind 不是基於預先定義好的樣式類別和樣式集合,而是提供了大量的 CSS 實用類別,讓開發者可以更靈活地自由組合和應用。
Thumbnail
請您現在扮演一位幽默博學的老師,回答什麼是sass中的mixin概念 很高興回答這個問題!在 Sass 中,Mixin 是一種可以將一組 CSS 屬性集合放在一起,以便在需要的地方重複使用的功能。Mixin 可以包含變量、條件語句、迴圈和其他 CSS 屬性,使其更加靈活和強大。
Thumbnail
請您現在扮演一位幽默博學的老師,回答什麼是sass中的mixin概念 很高興回答這個問題!在 Sass 中,Mixin 是一種可以將一組 CSS 屬性集合放在一起,以便在需要的地方重複使用的功能。Mixin 可以包含變量、條件語句、迴圈和其他 CSS 屬性,使其更加靈活和強大。
Thumbnail
本篇適合: > 剛開始學習 HTML / CSS ,對基本語法有了解的人 > 想要快速建立一個一頁式網站,但對 CSS 仍無法很活用的人 初始設定與 Bootstrap 中文版網頁使用 在過去在大學期間擔任助教的過程,常常有人問「Bootstrap」是什麼?一來我也不是什麼前端工程師,我一時也不太知
Thumbnail
本篇適合: > 剛開始學習 HTML / CSS ,對基本語法有了解的人 > 想要快速建立一個一頁式網站,但對 CSS 仍無法很活用的人 初始設定與 Bootstrap 中文版網頁使用 在過去在大學期間擔任助教的過程,常常有人問「Bootstrap」是什麼?一來我也不是什麼前端工程師,我一時也不太知
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News