搜尋

CSS 文字與清單計數 ( 函式類型 )

雖著 CSS 的版本演進,也陸續支援動態取得元素屬性等好用的功能,這篇教學會介紹「文字與清單計數」相關的 CSS 函式,例如 attr()、url()、counter()、counters() 等等,透過動態取得的文字或變數,讓版面的操控更具彈性。

CSS 教學 - CSS 函式 ( 文字與清單 )

教學影片

搭配教學影片一起閱讀,效果會更好!歡迎大家訂閱 STEAM 教育學習網的 Youtube 頻道

前往:https://www.youtube.com/@steam.oxxostudio



「文字與清單計數」的 CSS 函式

下方列出「文字與清單計數」類型的 CSS 函式 ( 目前所有瀏覽器都支援 ):

文字與清單函式 說明
attr() 取得套用該選擇器元素的屬性值。
url() 網址。
counter() 計數器。
counters() 多層計數器。

attr()

attr()」是「取得套用該選擇器元素的屬性值」CSS 函式,通常會搭配虛擬元素的 content 一同使用,基本寫法如下:

div::before {
  content: attr(name);  /* 讀取 name 屬性數值作為內容文字 */
}
div::after {
  content: "<< " attr(name) " >>";  /* 讀取 name 屬性數值作為內容文字,文字左右加上額外文字 */
}

下方的範例執行後,會使用虛擬元素,將 div 的前方和後方都加上對應屬性的文字。

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

<!-- HTML 程式碼 -->
<div left="123" right="456">oxxo</div>
<div left="789" right="000">apple</div>

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

  div::before {
    content: attr(left) ", ";
  }

  div::after {
    content: " ," attr(right);
  }
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - attr()

W3C 在 CSS Level 5 的規範中,attr() 可以將讀取的數值應用於長度、角度、顏色等 CSS 樣式,使用這種方式不僅可以讓版面的設計更加靈活,大幅減少 JavaScript 的使用,進而提高網頁效能,目前支援下列幾種寫法:

  • 注意!雖然已有部分新版瀏覽器支援這種寫法,但目前仍有許多瀏覽器「不支援」。
  • 由於安全性的緣故,不支援 attr() 和 url() 互相混用 ( 無法用這種方式改變背景圖 )。
div {
  /* 傳統寫法,僅支援 content、marker */
  content: attr(data-count);
  content: attr(data-title);

  /* 讀取屬性值並指定單位 */
  opacity: attr(data-opacity type(<number>)); /* 指定數字類型 */
  width: attr(data-width %);                  /* 讀取後套用百分比單位 */
  height: attr(data-height px);               /* 讀取後套用 px 單位 */

  /* 讀取屬性值並指定單位,增加預設值,如果讀取屬性失敗就用預設值 */
  content: attr(data-title type(<string>), "oxxo"); /* 指定字串類型,讀取錯誤就用 oxxo */
  width: attr(data-width %, 50%);                   /* 讀取後套用百分比單位,讀取錯誤就用 50% */
  height: attr(data-height px, 200px);              /* 讀取後套用 px 單位,讀取錯誤就用 200px */
}

使用 attr() 讀取屬性時,可在後方加入下列參數,就能根據參數指定該數值的類型:

參數 寫法 單位需求 說明
* type(*) 有單位數值需要加上單位 全部類型
string type(<custom-ident>) - 字串
integer type(<integer>) - 整數
number type(<number>) - 數字
color type(<color>) 顏色單位 顏色
length type(<length>) 長度單位 長度
px, em, rem, vw, vh, vmin, vmax, mm, cm, in, pt, pc px 不用單位,套用參數單位 長度
angle type(<angle>) 角度單位 角度
deg, grad, rad deg 不用單位,套用參數單位 長度
time type(<time>) 時間單位 時間
s, ms s 不用單位,套用參數單位 時間
percentage type(<percentage>) 百分比單位 百分比
% % 不用單位,套用參數單位 百分比
frequency type(<frequency>) 頻率單位 頻率
Hz, kHz Hz 不用單位,套用參數單位 頻率

下方範例會使用 attr() 讀取元素屬性值,透過屬性值改變 CSS 樣式 ( 如果看不到效果,表示瀏覽器仍不支援 )。

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

<!-- HTML 程式碼 -->
<div class="a" o="0.5">沒有 w,o="0.5"</div>
<div class="b" w="200">w="200"</div>
<div class="c" w="200px">w="200px"</div>
<div class="d" w="50">w="50"</div>
<div class="e" w="50%">w="50%"</div>
<div class="f" d="-10">d="-10"</div>
<div class="g" d="-10deg">d="-10deg"</div>
<div class="h" d="-10deg">d="-10deg"</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    height: 50px;
    margin: 10px;
    max-width: 300px;
    background: orange;
  }
  .a {
    width: attr(w px, 200px);             /* 讀取不到 w 就套用 200px */
    opacity: attr(o type(<number>), 1);   /* o 是浮點數,使用 number */
  }
  .b {
    width: attr(w px, 100px);             /* 讀取 w,因為只有純數字,所以使用 px 單位 */
  }
  .c {
    width: attr(w type(<length>), 100px); /* 讀取 w,因為自帶 px 單位,所以 type 使用 length */
  }
  .d {
    width: attr(w %, 100px);              /* 讀取 w,因為只有純數字,所以使用 % 單位 */
  }
  .e {
    width: attr(w type(<percentage>), 100px); /* 讀取 w,因為自帶 % 單位,所以 type 使用 percentage */
    }
  .f {
    transform: rotateZ(attr(d deg, 15deg));   /* 讀取 d,因為只有純數字,所以使用 deg 單位 */
  }
  .g {
    transform: rotateZ(attr(d type(<angle>), 15deg)); /* 讀取 d,因為自帶 deg 單位,所以 type 使用 angle */
  }
  .h {
    transform: rotateZ(attr(d type(*), 15deg)); /* 讀取 d,使用星號使得不論何種類型都能讀取 */
  } 
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - 使用 attr() 讀取屬性值作為樣式使用

如果將 attr() 搭配 CSS 變數,也更能發揮變數的特色,下方範例除了搭配變數,也混合 calc() 進行更複雜的計算,做出更好管理的 CSS 樣式。

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

<!-- HTML 程式碼 -->
<div class="a" w="50px">50px ( 讀取失敗,套用預設值 )</div>
<div class="b" w="100" o="0.8">100</div>
<div class="c" w="200">200</div>
<div class="d" w="200" o="0.3">200 x 2</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    height: 50px;
    margin: 10px;
    background: orange;
    --w: attr(w px, 250px);
    --o: attr(o type(<number>), 0.5);
    width: var(--w);
    opacity: var(--o);
  }
  .d {
    width: calc(var(--w) * 2);
  }
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - 使用 attr() 讀取屬性值搭配變數與 calc() 進階計算

url()

url()」是「網址」CSS 函式,通常應用於「背景圖片、清單圖示、滑鼠游標、外部字體」等需要使用 url 的樣式,使用方法如下:

div {
  background-image: url("oxxo.gif");
  list-style-image: url("../icon/icon-01.jpg");
  content: url("bg.jpg");
  cursor: url("mycursor.cur");
  src: url("google-font.woff");
}
div::before {
  content: " - " url(star.gif);
}

url() 的網址可以「不用引號」或「使用雙引號或單引號」包覆,但如果網址中有出現「括號、空格或引號」,則必須使用引號包覆 ( 這種情形幾乎不會發生 ),例如下方的寫法都可以正常運作的。

background-image: url(oxxo.gif);   /* 不使用引號 */
background-image: url('oxxo.gif'); /* 使用單引號 */
background-image: url("oxxo.gif"); /* 使用雙引號 */

下方的範例執行後,畫面中的 div 會加入背景圖片,清單則會使用圖片作為清單標記。

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

<!-- HTML 程式碼 -->
<div></div>
<ul>
  <li>oxxo</li>
  <li>banana</li>
  <li>orange</li>
  <li>papaya</li>
</ul>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 300px;
    height: 200px;
    background-image: url(https://img.freepik.com/free-vector/minimal-geometric-stripe-shape-background_1409-1014.jpg);
  }
  li {
    list-style: url(https://cdn-icons-png.freepik.com/16/11694/11694600.png);
  }
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - url()

url() 除了使用網址作為參數,也支援「base64 編碼」或「SVG 程式碼」的圖片內容,下方的範例執行後,會用這兩種方式呈現背景圖片。

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

<!-- HTML 程式碼 -->
<div class="a"></div>
<div class="b"></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 225px;
    height: 225px;
    border: 1px solid black;
    margin: 5px;
  }
  .a {
    background-image: url(data:image/png;base64,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)
  }
  .b {
    background-image: url('data:image/svg+xml,<%3Fxml version="1.0" encoding="UTF-8"%3F><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="225px" height="225px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path style="opacity:1" fill="%23fffefd" d="M -0.5,-0.5 C 74.5,-0.5 149.5,-0.5 224.5,-0.5C 224.5,74.5 224.5,149.5 224.5,224.5C 149.5,224.5 74.5,224.5 -0.5,224.5C -0.5,149.5 -0.5,74.5 -0.5,-0.5 Z"/></g><g><path style="opacity:1" fill="%23ff5916" d="M 67.5,170.5 C 65.9814,173.526 65.3148,176.859 65.5,180.5C 65.5034,183.025 65.8367,185.359 66.5,187.5C 67.6737,196.514 71.507,204.181 78,210.5C 78.6877,211.332 78.521,211.998 77.5,212.5C 48.2324,195.34 32.0657,169.674 29,135.5C 27.6436,114.26 31.9769,94.26 42,75.5C 42.6667,74.1667 43.3333,74.1667 44,75.5C 46.6601,86.484 52.1601,95.8173 60.5,103.5C 60.56,104.043 60.8933,104.376 61.5,104.5C 61.8333,103.667 62.1667,102.833 62.5,102C 62.0542,98.6499 61.3875,95.4833 60.5,92.5C 60.2665,87.1053 60.5998,81.772 61.5,76.5C 62.4915,71.9496 63.4915,67.2829 64.5,62.5C 74.5133,33.6547 94.1799,14.8213 123.5,6C 124.833,5.33333 126.167,5.33333 127.5,6C 125.539,9.21483 124.373,12.7148 124,16.5C 123.298,25.2032 123.632,33.8698 125,42.5C 128.058,50.2834 131.392,57.9501 135,65.5C 143.853,79.8737 152.187,94.5404 160,109.5C 161.897,115.485 163.73,121.485 165.5,127.5C 177.98,110.853 182.48,92.1865 179,71.5C 200.654,107.867 200.988,144.534 180,181.5C 168.36,199.822 152.194,211.989 131.5,218C 153.158,203.498 160.325,183.665 153,158.5C 150.433,164.069 147.433,169.403 144,174.5C 142.104,176.53 139.937,178.197 137.5,179.5C 137.158,172.876 135.658,166.543 133,160.5C 124.602,147.036 117.269,133.036 111,118.5C 109.524,113.594 108.524,108.594 108,103.5C 92.0711,117.283 86.0711,134.617 90,155.5C 91.8739,162.952 94.0405,170.285 96.5,177.5C 84.6868,173.684 77.3534,165.684 74.5,153.5C 70.7749,158.614 68.4415,164.281 67.5,170.5 Z"/></g><g><path style="opacity:1" fill="%23ff8e66" d="M 64.5,62.5 C 63.4915,67.2829 62.4915,71.9496 61.5,76.5C 61.0439,71.4045 62.0439,66.7378 64.5,62.5 Z"/></g><g><path style="opacity:1" fill="%23ffcbb9" d="M 60.5,92.5 C 61.3875,95.4833 62.0542,98.6499 62.5,102C 62.1667,102.833 61.8333,103.667 61.5,104.5C 60.8933,104.376 60.56,104.043 60.5,103.5C 60.7037,100.082 60.7037,96.4158 60.5,92.5 Z"/></g><g><path style="opacity:1" fill="%23ff895f" d="M 67.5,170.5 C 66.7081,176.13 66.3748,181.797 66.5,187.5C 65.8367,185.359 65.5034,183.025 65.5,180.5C 65.3148,176.859 65.9814,173.526 67.5,170.5 Z"/></g></svg>');
  }
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - url() 使用編碼呈現圖片

counter()

counter()」是「計數器」CSS 函式, 具有兩個參數,分別是「計數器名稱」以及「計數器類型」,使用後可以「產生指定格式的計數器數值」,必須搭配清單的「counter-reset」和「counter-increment」樣式屬性使用,基本寫法如下:

延伸閱讀:清單計數器 counter()、counters()

li::marker { 
  content: counter(名稱, 類型);
}
li::before { 
  content: counter(名稱, 類型);
}

常用的計數器類型如下表所示:

類型 說明
decimal 阿拉伯數字
decimal-leading-zero 個位數開頭補零阿拉伯數字
lower-alpha 小寫英文字母
lower-greek 小寫希臘字母
lower-roman 小寫羅馬數字
upper-alpha 大寫英文字母
upper-greek 大寫希臘字母
upper-roman 大寫羅馬數字
cjk-ideographic 中文數字
hiragana 日文平假名
katakana 日文片假名
armenian 希臘數字
georgian 喬治亞文
hebrew 希伯來文

下方的範例執行後,會使用 counter() 定義清單的數字標記格式。

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

<!-- HTML 程式碼 -->
<ul>
  <li>oxxo</li>
  <li>banana</li>
  <li>apple
    <ul>
      <li>aaa
        <ul>
          <li>xxx</li>
          <li>yyy</li>
          <li>yyy</li>
        </ul>
      </li>
      <li>bbb</li>
      <li>ccc</li>
    </ul>
  </li>
  <li>orange</li>
</ul>

<!-- CSS 程式碼 -->
<style>
ul {
  counter-reset: oxxo;
  list-style-type: none;
}
li{
  counter-increment: oxxo;
}
li::before {
  content: counter(oxxo, decimal) ' > ';
}
</style>

CSS 教學 - CSS 函式 ( 文字與清單 ) - counter()

counters()

counters()」是「多層計數器」CSS 函式,具有兩三個參數,分別是「計數器名稱」、「分隔符」以及「計數器類型」, 有別於 counter 只能取得「單層」的計數數值,counters() 使用後可以「保留父層數值,並結合新的計數器數值」,必須搭配清單的「counter-reset」和「counter-increment」樣式屬性使用,基本寫法如下:

延伸閱讀:清單計數器 counter()、counters()

li::marker { 
  content: counters(名稱, 分隔符, 類型);
}
li::before { 
  content: counters(名稱, 分隔符, 類型);
}

下方的範例執行後,會使用 counters() 定義清單的數字標記格式。

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

<!-- HTML 程式碼 -->
<ul>
  <li>oxxo</li>
  <li>banana</li>
  <li>apple
    <ul>
      <li>aaa
        <ul>
          <li>xxx</li>
          <li>yyy</li>
          <li>yyy</li>
        </ul>
      </li>
      <li>bbb</li>
      <li>ccc</li>
    </ul>
  </li>
  <li>orange</li>
</ul>

<!-- CSS 程式碼 -->
<style>
  ul {
    counter-reset: oxxo;
    list-style-type: none;
  }
  li{
    counter-increment: oxxo;
  }
  li::before {
    content: counters(oxxo, '-', decimal) '、';
  }
</style>

CSS 教學 - CSS 函式 ( 文字與清單計數 ) - counters()

小結

「文字與清單計數」相關的 CSS 函式已經存在許久,特別是 url(),由於太常會用到,甚至會忘記了它也是一種 CSS 函式,此外,雖然目前 attr() 只能應用在基本虛擬元素,但隨著瀏覽器的進步,相信不久的將來就能真正發揮出它的功能囉。

意見回饋

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

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

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

數值與單位

全域關鍵字與文字數值 長度與角度單位 位置名稱與時間單位 特殊樣式屬性 ( all、appearance)

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer ) 選擇器作用域 ( @scope ) 定義字型 ( @font-face ) 計數規則 ( @counter-style ) 列印網頁 ( @page )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path )

顏色與濾鏡

顏色單位 色彩模型 相對顏色 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄 使用 Color Font ( 彩色字型 ) 使用 Icon Font ( 圖示文字 ) 製作自己的 Icon Font 顯示生成內容與引號

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬高尺寸 ( width、height ) 顯示與比例 ( box-sizing、aspect-ratio ) 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度 縮放與調整 ( zoom、resize )

背景與陰影

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

清單與表格

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

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 ( shape-* ) 定位 ( position ) 邏輯屬性 ( logical properties ) 重置 CSS ( Reset CSS ) 水平置中技巧 垂直置中技巧

Flex 彈性排版

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

Grid 網格排版

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

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序 動畫進度控制 ( timeline )

變形、裁切與遮罩

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

視窗與使用者行為

捲軸樣式 ( scrollbar ) 拉霸、滑桿樣式 ( slider ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll ) 列印換頁 ( break-* )

CSS 預處理器

認識 CSS 預處理器 Less ( 安裝、開始使用 ) Less ( 巢狀結構、選擇器 ) Less ( 變數、import ) Less ( Extend、Mixin ) Less ( 邏輯、迴圈、函式 )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 電子時鐘數字 漸層色的轉場與動畫 漸層色製作星空背景 漸層色邊框 漸層色製作圖案背景 不規則形狀動畫 彈跳的正方形動畫 3D 正多面體 超連結底線動畫效果 噁心黏黏球效果 CSS 視差滾動效果 捲軸控制放射形選單 捲軸改變文字背景色 CSS 頁面捲動進度條 CSS 水波效果 圓點載入動畫 ( 陰影動畫 ) 字母翻牌效果 探照燈動畫 立體雙色跑馬燈 樓梯文字動態效果 漸層色文字、雙色文字 流動色彩文字 空心文字、文字水波背景 左右傾斜的背景效果 Icon 圖示形狀變換 故障文字效果 按鈕的多種 hover 效果 點擊展開或收折的選單 點擊愛心圖案放射效果 純 CSS 數字載入進度條 純 CSS 碼表 ( 可計時 )