搜尋

生成內容 content 與引號 quotes

CSS 的「生成內容 content」是相當特殊的樣式屬性,這兩個樣式只能套用在特定選擇器,也不會負責「樣式」,而是會產生額外元素的「內容」,這篇教學會介紹生成內容 content 與引號 quotes 的用法。

快速導覽:

CSS 教學 - 生成內容 content 與引號 quotes

生成內容 content

生成內容 content 是專屬於特定「虛擬元素」的樣式屬性,沒有繼承特性,只針對「::before::after::marker」這三個虛擬元素有作用,如果套用於虛擬元素之外的元素不會有任何作用。而所謂的「生成內容」並不是生成式 AI,而是會根據使用者輸入的內容,或讀取元素特定屬性值而產生的內容

更多參考:虛擬元素選擇器 ( 偽元素 )

下方範例會使用 content 搭配虛擬元素,就能在元素的前後加上內容,或將清單標記修改成使用者輸入的內容。

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

<!-- HTML 程式碼 -->
<h3 class="a">apple</h3>
<h3 class="b">banana</h3>
<ul>
  <li>coconut</li>
  <li>papaya</li>
  <li>pineapple</li>
</ul>

<!-- CSS 程式碼 -->
<style>
  h3 {margin: 5px;}
  .a::before {
    color: red;
    content: '(oxxo)';  /* 元素前方加上 (oxxo) 文字 */
  }
  .b::after {
    color: red;
    content: '(oxxo)';  /* 元素後方加上 (oxxo) 文字 */
  }
  li::marker {
    color: orange;
    content: "$"       /* 將清單符號修改為 $ */
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 在元素的前後加上內容

content 搭配 attr()

使用 content 最常見的用法之一,就是搭配 attr() 函式「顯示元素屬性」 ( attr() 函式也只能針對虛擬元素使用 ),下方範例會讀取元素本身的屬性,再將屬性變成文字呈現在畫面中。

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

<!-- HTML 程式碼 -->
<h3 class="a" name='oxxo'>apple</h3>
<h3 class="b" title="oxxo">banana</h3>
<ul>
  <li icon="㊙️">coconut</li>
  <li icon="💩">papaya</li>
  <li icon="🔥">pineapple</li>
</ul>

<!-- CSS 程式碼 -->
<style>
  h3 {margin: 5px;}
  .a::before {
    color: red;
    content: attr(name);  /* 讀取元素 name 屬性內容 */
  }
  .b::after {
    color: red;
    content: attr(title);  /* 讀取元素 title 屬性內容 */
  }
  li::marker {
    color: orange;
    content: attr(icon);  /* 讀取元素 icon 屬性內容 */
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 搭配 attr()

content 搭配 url()

除了顯示「文字」,content 也可以搭配 url() 函式顯示圖片,但是使用 url() 所顯示的圖片無法修改長寬大小,所以這種用法也比少見。

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

<!-- HTML 程式碼 -->
<h3 class="a">apple</h3>
<h3 class="b">banana</h3>
<ul>
  <li icon="㊙️">coconut</li>
  <li icon="💩">papaya</li>
  <li icon="🔥">pineapple</li>
</ul>

<!-- CSS 程式碼 -->
<style>
  h3 {margin: 5px;}
  .a::before,
  .b::after,
  li::marker {
    content: url(https://steam.oxxostudio.tw/download/css/list-style-image-01.jpg);
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 搭配 url()

content 搭配 counter()、counters()

參考「清單計數器 counter()、counters()」教學,content 也可以搭配計數器函式 counter()counters(),實作按照順序出現的數字,或按照順序出現的字母或符號,下方範例呈現兩種函式產生數字或字母的做法:

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

<!-- HTML 程式碼 -->
<div class="d1">
  <h3 class="a">apple</h3>
  <h3 class="b">banana</h3>
  <ul>
    <li icon="㊙️">coconut</li><li icon="💩">papaya</li><li icon="🔥">pineapple</li>
  </ul>
</div>
<div class="d2">
  <h3 class="a">apple</h3>
  <h3 class="b">banana</h3>
  <ul>
    <li icon="㊙️">coconut</li><li icon="💩">papaya</li><li icon="🔥">pineapple</li>
  </ul>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    counter-reset: oxxo;     /* 定義計數器名稱和初始值 */
    float: left;
    border: 1px solid #000;
    margin: 5px;
  }
  h3, li {
    margin: 5px;
    counter-increment: oxxo; /* 每出現一次 h3 或 li 就將 oxxo 增加 1 */
  }
  .d1 .a::before,
  .d1 .b::after,
  .d1 li::marker {
    color: red;
    content: counter(oxxo);  /* 顯示計數器數值 */
  }
  .d2 .a::before,
  .d2 .b::after,
  .d2 li::marker {
    color: red;
    content: counters(oxxo,"",upper-alpha);  /* 顯示計數器數值對應的字母 */
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 搭配 counter()、counters()

content 組合多種內容

content 除了單純使用文字、數值或函式,也可以將這些全部組成成一串字串,數字或文字使用「引號」包覆,函式直接撰寫韓式名稱與參數,彼此之間使用「空白分隔」進行組合,下方範例會將手動輸入的文字、標點符號,組合元素本身的屬性以及計數器數字。

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

<!-- HTML 程式碼 -->
<div class="d1">
  <h3 class="a" name="oxxo">apple</h3>
  <h3 class="b" name="xoox">banana</h3>
  <ul>
    <li icon="㊙️">coconut</li><li icon="💩">papaya</li><li icon="🔥">pineapple</li>
  </ul>
</div>
<div class="d2">
  <h3 class="a" name="oxxo">apple</h3>
  <h3 class="b" name="xoox">banana</h3>
  <ul>
    <li icon="㊙️">coconut</li><li icon="💩">papaya</li><li icon="🔥">pineapple</li>
  </ul>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    counter-reset: oxxo;
    float: left;
    border: 1px solid #000;
    margin: 10px;
  }
  h3, li {
    margin: 5px;
    counter-increment: oxxo;
  }
  .d1 .a::before,
  .d1 .b::after,
  .d1 li::marker {
    color: red;
    content: counter(oxxo) "." attr(name) attr(icon) ".ok.";
  }
  .d2 .a::before,
  .d2 .b::after,
  .d2 li::marker {
    color: red;
    content: counters(oxxo,"",upper-alpha) "." attr(name)attr(icon) ".ok.";
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 組合多種內容

content 顯示引號、空白或反斜線

如果要在 content 裡顯示引號、空白或反斜線,則需要使用「跳脫字元」呈現,但仍需注意 content 無法呈現 HTML 標籤,最終結果都是以字串呈現,下方列出常用的寫法:

特殊符號 寫法
單引號 \'
雙引號 \"
反斜線 \\
空白、連續空白 \00a0
撰寫時換行 \

下方範例會顯示單引號、雙引號、引號、空白、反斜線以及在 CSS 裡換行的寫法。

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

<!-- HTML 程式碼 -->
<h3 class="a">apple</h3>
<h3 class="b">apple</h3>
<h3 class="c">apple</h3>
<h3 class="d">apple</h3>
<h3 class="e">apple</h3>

<!-- CSS 程式碼 -->
<style>
  h3{margin: 5px;}
  h3::before {color: red;}
  .a::before{
    content: "\"\" "       /* 顯示雙引號 */
  }
  .b::before{
    content: "\' \' ";     /* 顯示單引號 */
  }
  .c::before{
    content: "\' \00a0\00a0\00a0 \" ";  /* 單引號雙引號與連續空白 */
  }
  .d::before{
    content: "\\\\\\\\ ";  /* 連續反斜線 */
  }
  .e::before{
    content: "hello\
      oxxo ";             /* 撰寫時換行 */
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - content 顯示引號、空白或反斜線

引號 quotes

在 HTML 裡被 q 標籤所包覆的文字,會自動在前後加上「引號」,這個引號可以透過樣式屬性 quotes 修改,使其不單純是雙引號或單引號quotes 具有繼承特性,撰寫時需要同時包含「兩個屬性值」,屬性值使用引號包覆並用空白分隔,前方屬性值代表前方引號,後方屬性值代表後方引號,下方範例會透過 quotes 呈現各種不同引號效果。

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

<!-- HTML 程式碼 -->
<h3 class="a"><q>apple</q></h3>
<h3 class="b"><q>apple</q></h3>
<h3 class="c"><q>apple</q></h3>
<h3 class="d"><q>apple</q></h3>

<!-- CSS 程式碼 -->
<style>
  h3{margin: 5px;}
  .a{
    quotes: "<" ">";    /* 前後使用 < > 包覆引用文字 */
  }
  .b{
    quotes: "((" "))";  /* 前後使用 (( )) 包覆引用文字 */
  }
  .c{
    quotes: "💩" "💩";  /* 前後使用 💩 💩 包覆引用文字 */
  }
  .d{
    quotes: "\\\\" "\"\00a0\00a0\00a0\"";  /* 使用特殊字元包覆引用文字 */
  }
</style>

CSS 教學 - 生成內容 content 與引號 quotes - 引號 quotes

小結

生成內容 content 與引號 quotes 是 CSS 裡的特殊樣式,除了虛擬元素和引用元素之外,其他元素都不支援這兩個樣式屬性,雖然如此,其中 content 在排版中仍然大量被使用,或許這也跟虛擬元素常常被使用有關吧。

意見回饋

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

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 )