問題緣起

在閒看別人網站時發現了這樣的程式碼

<span class="hamburger icon" data-icon="C">

.icon:before { content: attr(data-memory); display:block; }

感覺很新鮮,content的用法以前見過,但是content和attr連用還是頭回見。於是去查閱了一些資料。


解釋一下content和attr()

在CSS2.1中attr()已經被定義,它表示總是返回一個字串。

在CSS3中attr()可以返回多種不同的型別。

ie8以上均支援css2定義的attr,

在CSS2.1中可以這樣使用:

示例程式碼:

div:after{content:attr(title);}

【註明:寫本文件時尚無瀏覽器支援CSS3定義的attr()】

content一般和:before,:after一起使用,用來生成內容(img和input沒有該屬性),content的內容一般可以為以下四種:

 none: 不生成任何值。
attr: 插入標籤屬性值
url: 使用指定的絕對或相對地址插入一個外部資源(影象,聲頻,視訊或瀏覽器支援的其他任何資源)
string: 插入字串

content和attr()配合使用

attr屬性通常和自定義屬性data-配合使用,因為傳統的其它屬性雖然也能存值,但通常不適合存放表達性文字。

示例程式碼:

<div data-line="1"></div>

div[data-line]:after { content: attr(data-line);/* 屬性名稱上不要加引號! */ }


額外內容

偽元素和偽類是非常相像的兩個東西。在實際上 css3 為了區分兩者,已經明確規定了偽類用一個冒號來表示,而偽元素則用兩個冒號來表示。

:Pseudo-classes

::Pseudo-elements

但因為相容性的問題,所以現在大部分還是統一的單冒號,但是拋開相容性的問題,我們在書寫時應該儘可能養成好習慣,區分兩者。


參考文獻:

1.CSS3中的content和attr的用法

2.CSS3/CSS2 函式取值attr()