CSS中需要明白的 content 屬性

jopen 8年前發布 | 28K 次閱讀 CSS 前端技術

如果你是一個前端開發者,可能知道有一些很好的偽類的改變,比如CSS content屬性.如果不熟悉這些概念的,可能需要去復習一篇了.

在這篇文章中.我們主要是看 content屬性. CSS的 content 屬性需要在 ::before和::after 偽類元素中使用. 屬性會在頁面上生成content中的內容,當然需要您的瀏覽器支持這個屬性.

content 屬性的基本語法.

content 屬性的表現形式就如下所寫,這里列出了每一個屬性的值.

p::before {
  content: normal|counter|attr|string|open-quote|url|initial|inherit;
}

這個與CSS中的稍有不同,例如在::before或者::after中使用 attr(),你需要寫如下方式的代碼:

p::after {
  content: " (" attr(title) ")";
}

這里只是一個例子,更多的在后面.下面我們將討論每一個值,包含attr().

值: none 或者 normal

當設置為none,這個偽元素不會生成.如果設置為normal,他將計算到none.

p::before {
  content: normal;
}
p::after {
  content: none;
}

這種事情,可能用于嵌套元素中,他們已經有了一個偽元素的定義,但是在某些情況下,你想覆蓋他們.

值: <string>

content可以設置為一個字符串,任何的字符內容.如果使用不是拉丁字符的,這個字符必須得編碼.我們看下面的自理,考慮這個HTML.

<h2>Tutorial Categories</h2><ol>
  <li>HTML and CSS</li>
  <li class="new">Sass & Less</li>
  <li>JavaScript</li></ol><p class="copyright">SitePoint, 2015<p>

下面是CSS代碼:

.new::after {
  content: " New!";
  color: green;
}
.copyright::before {
  content: "\00a9  ";
}

這里在列表項中插入一個文本內容,且同樣在P標簽中插入一個編碼字符.

一個字符串必須有單引號或者雙引號包含起來.

值: <uri>

如果你想顯示一些媒體文件,這時候 <uri>就可以派上用場了.你可以指向一個外部資源(比如圖片).如果一些資源或者圖片不顯示,他會忽略或者有一個占位符. 那看下面的代碼,如何使用他們.

HTML:

<a class="sp" >SitePoint</a>

CSS:

.sp::before {
  content: url(http://www.sitepoint.com/favicon.ico);
}

值: counter() or counters()

這個值大部分用于復合值.他可以是兩個不同函數中的一個-- counter() 或者 counters().

下面我們通過一個例子來看看counter:

<h2>Name of First Four Planets</h2>
<p class="planets">Mercury</p>
<p class="planets">Venus</p>
<p class="planets">Earth</p>
<p class="planets">Mars</p>

CSS:

.planets {
  counter-increment: planetIndex;
}
.planets::before {
  content: counter(planetIndex) ". ";
}

這個數字將會在p標簽中顯示.類似一個排序列表. 這個例子中,我們可以很簡單的使用一個排序列表. 這里我們不做詳細講解.后期我會出一篇詳細的文章來講解這兩個函數.

值: attr()

從字面量來看,attr 函數就是插入一個指定的屬性值,他僅有一個參數.如果元素沒有屬性,返回一個空字符.

下面一個例子:

<ul>
  <li><a >HTML and CSS</a></li>
  <li><a >JavaScript</a></li>
  <li><a >Mobile</a></li></ul>

通過上面的HTML,在結合下面的CSS的屬性設置為href,這時候鏈接文字后面將會加入他自身的鏈接文本.

a::after {
  content: " (" attr(href) ") ";
}

值: open-quote 或者close-quote

當我們設置為這個值,content屬性會生成一個引號標記.它通常與<q>標簽元素一起使用.但是你可以用在任何元素上.因此你可以做一些相關事情,例如下面:

blockquote::before {
  content: open-quote;
}
blockquote::after {
  content: close-quote;
}

這 close-quote 值僅在 ::after 偽元素中有效, 如果值 open-quote沒有被設置在同樣的元素的偽元素::before上,他也不會有任何效果.

值: no-open-quote or no-close-quote

no-open-quote值移除開始的引號,no-close-quote 移除結束的引號. 你可能非常想知道他們有什么用呢.看下面的HTML代碼:

<p>
    <q>A wise man once said: 
      <q>
        Be true to yourself, but don't listen to those who say 
        <q>
          Don't be true to yourself.
        </q>
      </q> 
      That is good advice.
    </q>
</p>

注意上面的段落,講話人引入了 (“A wise man…”)說話人,依次,也引入了另外的說話人("those who say..."). 因此我們 引入進行了三次嵌套. 從語法上講,這是一個正確的處理方式.如果要使用生成的內容,我們得確保引入嵌套的正確:

q {
  quotes: '“' '”' '‘' '’' '“' '”';
}
q::before { 
  content: open-quote;
}
q::after {
  content: close-quote;
}

第一個選擇器定義了我們要用到的一些引號.使用quotes屬性設置三個值. 然后我們插入引號作為內容使用.這就類似于上面一節講到的那樣.

但是如果我們想第二個引號被忽略或者不插入,那怎么辦? 我們可以使用 no-open-quote 和 no-close-quote值來覆蓋他們.

.noquotes::before {
  content: no-open-quote;
}
.noquotes::after {
  content: no-close-quote;
}

第二個不需要引號的,就將第二個q加入class = "noquotes".這就完成了我們想要的結果.

后期我們會將部分屬性做一些詳細講解.請留意!

本文屬于吳統威的博客, 微信公眾號:bianchengderen,QQ群:186659233 的原創文章,轉載時請注明出處及相應鏈接:http://www.wutongwei.com/front/infor_showone.tweb?id=180 ,歡迎大家傳播與分享.

來自: http://www.wutongwei.com/front/infor_showone.tweb?id=180

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!