在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 網頁設計教程 > 詳細頁面

CSS偽元素與Content屬性的詳細區分(代碼示例)

CSS偽元素與Content屬性的詳細區分(代碼示例)

更新時間:2025-11-21 文章作者:未知 信息來源:網絡 閱讀次數:

網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立...
網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。
本篇文章給大家帶來的內容是關于CSS偽元素和Content屬性的詳細分析(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

繼上篇深入了解CSS偽類選擇器的用法(代碼示例)記錄完偽類后,我自然而然要向偽元素伸出“魔掌”的啦。本文講講述偽元素以及功能強大的Contet屬性,讓我們可以通過偽元素更好地實現更多的可能!

初識偽元素

?說起偽元素我第一想到的莫過于::before::after這兩個了,它倆其實就是在其附屬的選擇器命中的元素上插入第一個子節點和追加最后一個子節點。那這時我不禁地想問:“直接添加兩個class為.before和.after不是一樣的嗎?”
?其實使用偽元素::before::after以下兩個好處:

  1. HTML的代碼量減少,對SEO有幫助;

  2. 提高JavaScript查詢元素的效率。

?那為什么會這兩好處呢?原因就是偽元素并不存在于DOM中,而是位于CSSOM,HTML代碼和DOM Tree中均沒有它的身影,量少了自然效率有所提升。但這也引入一個問題——我們沒辦法通過JavaScript完全操控偽元素(我將在下面一節為大家講述)

一大波偽元素來了

除了::before和::after外,別漏了以下的哦!

:first-line:只能用于塊級元素。用于設置附屬元素的第一個行內容的樣式。可用的CSS屬性為font,color,background,word-spacing,letter-spacing,text-decoration,vertical-align,text-transform,line-height,clear。

:first-letter:只能用于塊級元素。用于設置附屬元素的第一個字母的樣式。可用的CSS屬性為font,color,background,marin,padding,border,text-decoration,vertical-align,text-transform,line-height,float,clear。

::selection:匹配選中部分的內容。可用的CSS屬性為background,color。

有沒有發現有的偽元素前綴是:有的卻是::呢?::是CSS3的寫法,其實除了::selection外,其他偽元素既兩種前綴都是可以的,為兼容性可選擇使用:,為容易區分偽元素和偽類則使用::,但我還是建議使用::來提高可讀性,兼容性就讓postcss等工具幫我們處理就好了。

::before和::after的注意事項

默認display: inline;

必須設置content屬性,否則一切都是無用功;

默認user-select: none,就是::before和::after的內容無法被用戶選中的;

偽元素和偽類結合使用形如:.target:hover::after。

JavaScript操作偽元素

?上文提到由于偽元素僅位于CSSOM中,因此我們僅能通過操作CSSOM API——window.getComputedStyle來讀取偽元素的樣式信息,注意:我們能做的就是讀取,無法設置的哦!

{- window.getComputedStyle的類型 -}
data PseudoElement = ":before" | "::before" | ":after" | "::after" | ":first-line" | "::first-line" | ":first-letter" | "::first-letter" | "::selection" | ":backdrop" | "::backdrop" | Null

window.getComputedStyle :: HTMLElement -> PesudoElement -> CSSStyleDeclaration

{- CSSStyleDeclaration實例的方法 -}
data CSSPropertyName = "float" | "backround-color" | ......
data DOMPropertyName = "cssFloat" | "styleFloat" | "backgroundColor" | ......

-- IE9+的方法
CSSStyleDeclaration#getPropertyValue :: CSSPropertyName -> *
-- IE6~8的方法
CSSStyleDeclaration#getAttribute :: CSSPropertyName -> *
-- 鍵值對方式獲取
CSSStyleDeclaration#[DOMPropertyName] -> *

示例:

.target[title="hello world"]::after{
  display: inline-block;
  content: attr(title);
  background: red;
  text-decoration: underline;
}
const elTarget = document.querySelector(".target")
const computedStyle = window.getComputedStyle(elTarget, "::after")
const content = computedStyle.getPropertyValue("content")
const bg = computedStyle.getAttribute("backgroundColor")
const txtDecoration = computedStyle["text-decoration"]
console.log(content) // "hello world"
console.log(bg)      // red
console.log(txtDecoration) // underline

玩透Content屬性

?到這里我們已經可以利用::before和::after實現tooltip等效果了,但其實更為強大的且更需花時間研究的才剛要開始呢!那就是Content屬性,不僅僅可以簡單直接地設置一個字符串作為偽元素的內容,它還具備一定限度的編程能力,就如上面attr(title)那樣,以其附屬元素的title特性作為content值。下面請允許我為大家介紹吧!

p::after{
    content: "普通字符串";
    content: attr(父元素的html屬性名稱);
    content: url(圖片、音頻、視頻等資源的url);
    /* 使用unicode字符集,采用4位16進制編碼
     * 但不同的瀏覽器顯示存在差異,而且移動端識別度更差
     */
    content: "\21e0";
    /* content的多個值可以任意組合,各部分通過空格分隔 */
    content: "'" attr(title) "'";
    
    /* 自增計數器,用于插入數字/字母/羅馬數字編號
     * counter-reset: [<identifier> <integer>?]+,必選,用于標識自增計數器的作用范圍,<identifier>為自定義名稱,<integer>為起始編號默認為0。
     * counter-increment: [<identifier> <integer>?]+,用于標識計數器與實際關聯的范圍,<identifier>為counter-reset中的自定義名稱,<integer>為步長默認為1。
     * <list-style-type>: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha
     */
    content: counter(<identifier>, <list-style-type>);
    
    /* 以父附屬元素的qutoes值作為content的值
     */
    content: open-quote | close-quote | no-open-quote | no-close-quote;
}

換行符:HTML實體為&#010,CSS為\A,JS為\uA。

?可以看到Content接受6種類型,和一種組合方式。其中最后兩種比較復雜,我們后面逐一說明。

自定義計數器

?HTML為我們提供ulolli來實現列表,但如果我們希望實現更為可性化的列表,那么該如何處理呢?content屬性的counter類型值就能幫到我們。

<!-- HTML 部分-->
.dl
 .dt{chapter1}
 .dd{text11}
 .dd{text12}
 .dt{chapter2}
 .dd{text21}
 
/* CSS部分 */
.dl {
  counter-reset: dt 0; /* 表示解析到.dl時,重置dt計數器為0 */
  
  & .dt {
    counter-reset: dd 0; /* 表示解析到.dt時,重置dd計數器為0 */
    
    &::before{
        counter-increment: dt 1; /* 表示解析到.dt時,dt計數器自增1 */
        content: counter(dt, lower-roman) " ";
    }
  }
  
  & .dd::before {
    counter-increment: dd 1; /* 表示解析到.dd時,dd計數器自增1 */
    content: counter(dd) " ";
  }
}

87877522-5ba0ab31a71d7_articlex.png

通過counter-reset來定義和重置計數器,通過counter-increment來增加計數器的值,然后通過counter來決定使用哪個計數器,并指定使用哪種樣式。
?如果用JavaScript來表示應該是這樣的

const globalCounters = {"__temp":{}}

function resetCounter(name, value){
  globalCounters[name] = value
}
function incrementCounter(name, step){
  const oVal = globalCounters[name]
  if (oVal){
    globalCounters[name] = oVal + step
  }
  else{
    globalCounters.__temp[name] = step
  }
}
function counter(name, style){
    return globalCounters[name] || globalCounters.__temp[name]
}

function applyCSS(mount){
    const clz = mount.className
    if (clz == "dl"){
        resetCounter("dt", 0)
        const children = mount.children
        for (let i = 0; i < children.length; ++i){
          applyCSS(children[i])
        }
    }
    else if (clz == "dt"){
        resetCounter("dd", 0)
        incrementCounter("dt", 1)
        const elAsBefore = document.createElement("span")
        elAsBefore.textContent = counter("dt", "lower-roman") + " "
        mount.insertBefore(mount.firstChild)
    }
    else if (clz == "dd"){
        incrementCounter("dd", 1)
        const elAsBefore = document.createElement("span")
        elAsBefore.textContent = counter("dd", "lower-roman") + " "
        mount.insertBefore(mount.firstChild)
    }
}

嵌套計數器

?對于多層嵌套計數器我們可以使用counters(<identifier>, <separator>, <list-style-type>?)

.ol
  .li
    .ol
      .li{a}
      .li{b}
  .li
    .ol
      .li{c}
.ol {
    counter-reset: ol;
    & .li::before {
        counter-increment: ol;
        content: counters(ol, ".");
    }
}

Content的限制

IE8+才支持Content屬性;

除了Opera9.5+中所有元素均支持外,其他瀏覽器僅能用于:before,:after內使用;

無法通過JS獲取Counter和Counters的運算結果。得到的就只能是"counter(mycouonter) \" \""。

自定義引號

?引號這個平時很少在意的符號,其實在不同的文化中使用的引號將不盡相同,如簡體中文地區使用的"",而日本則使用「」。那我們根據需求自定義引號呢?答案是肯定的。
?通過open-quote,close-quote,no-open-quote和no-close-quote即可實現,下面我們通過例子來理解。
?<q>會根據父元素的lang屬性自動創建::before和::after來實現插入quotation marks。

p[lang=en]>q{英語}
p[lang=no]>q{挪威語}
p[lang=zh]>q{漢語}
p[lang=en]>q.no-quote{英語2}
div[lang=no]>.quote{挪威語2}

CSS片段:

p[lang=en] > q{
  quotes: "<!--" "-->"; /* 定義引號 */
}
p[lang=en] > q.no-quote::before{
  content: no-open-quote;
  /*或者 content: none;*/
}
div[lang=no] > .quote {
  quotes: "<<-" "->>";
}
div[lang=no] > .quote::before {
  content: open-quote;
}
div[lang=no] > .quote::after {
  content: close-quote;
}

2605515230-5ba0ab31ac01d_articlex.png

示例

分割線

p.sep{or}
.sep {
  position: relative;
  text-align: center;
  
  &::before,
  &::after {
    content: "";
    box-sizing: border-box;
    height: 1px;
    width: 50%;
    border-left: 3em solid transparent;
    border-right: 3em solid transparent;
    position: absolute;
    top: 50%;
  }
  
  &::before {
    left: 0;
  }
  
  &::after {
    right: 0;
  }
}

只讀效果(通過遮罩原來的元素實現)

.input-group {
  position: relative;
  
  &.readonly::before {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
  }
}

計數器

.selections>input[type=checkbox]{option1}+input[type=checkbox]{option2}
.selection-count
.selections{
  counter-reset: selection-count;
  
  & input:checked {
    counter-increment: selection-count;
  }
}
.selection-count::before {
  content: counter(selection-count);
}

以上就是CSS偽元素和Content屬性的詳細分析(代碼示例)的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 久久九九国产视频| 久久香蕉视频网站| 久久免费视频2| 亚洲色图偷拍视频| 宅男噜噜噜66国产免费观看| 无码中文字幕色专区| 欧美一级视频在线播放| 婷婷六月天在线| 国产91色在线观看| 国产视频在线视频| 欧美精品第三页| 国产一区二区在线免费播放| av中文字幕网址| 九九九九九伊人| 日韩av在线中文| 精品无码一区二区三区在线| 欧美日韩一级在线| 蜜臀视频一区二区三区| 动漫av免费观看| 久久久久免费精品| 国产原创精品在线| 精品人妻一区二区三区四区在线| 亚洲最新免费视频| 在线观看三级网站| 亚洲第一成肉网| 日韩五码在线观看| 国产美女18xxxx免费视频| 黄大色黄女片18第一次| 日本在线一二三区| 成人免费看片视频在线观看| 免费在线观看日韩视频| 美女福利视频在线| 日韩高清在线一区二区| 日韩av在线播放不卡| 视色视频在线观看| 99精品免费在线观看| 成年在线观看视频| 午夜精品久久久久久久99热影院| 日韩亚洲欧美一区二区| 一级网站在线观看| 国产精品久久久久9999小说| 国产精品videossex国产高清| 日韩精品一区二区三区不卡| 亚洲综合欧美激情| 中文字幕网av| www.51色.com| 免费看黄在线看| 免费人成在线观看视频播放| 国产大尺度在线观看| 国产日韩一区二区在线观看| 成年人看的毛片| 亚洲精品无码久久久久久| 男女高潮又爽又黄又无遮挡| www.亚洲天堂网| 亚洲成色www.777999| 男人日女人下面视频| 国产性xxxx18免费观看视频| 亚洲天堂av线| 色呦呦网站入口| 久久撸在线视频| 男女高潮又爽又黄又无遮挡| 久久午夜夜伦鲁鲁一区二区| 国产无套粉嫩白浆内谢的出处| 亚洲欧美在线精品| a在线观看免费视频| 欧美日韩亚洲自拍| 国产精品嫩草影院8vv8 | 成人性做爰aaa片免费看不忠| 日本免费在线视频观看| 污网站在线免费| 18禁裸男晨勃露j毛免费观看| 四虎1515hh.com| 精品久久免费观看| 北条麻妃亚洲一区| 色姑娘综合天天| 天天操天天爽天天射| 久久久一二三四| 精品国产乱码久久久久久1区二区| 少妇av一区二区三区无码| 爆乳熟妇一区二区三区霸乳| 少妇高潮流白浆| 国产自偷自偷免费一区| av中文字幕av| 午夜剧场在线免费观看| 欧美两根一起进3p做受视频| 色综合手机在线| www.桃色.com| 国产精品宾馆在线精品酒店| 亚洲污视频在线观看| 996这里只有精品| 熟女少妇在线视频播放| 亚洲人精品午夜射精日韩| 丰满少妇大力进入| avav在线看| 熟妇人妻va精品中文字幕| 中文字幕丰满乱码| 亚洲妇熟xx妇色黄蜜桃| 日日噜噜夜夜狠狠久久丁香五月| 天天干天天av| 性欧美1819| 国产裸体舞一区二区三区| av免费看网址| 狠狠操狠狠干视频| 尤物av无码色av无码| 天堂网在线免费观看| 日本人体一区二区| 9久久婷婷国产综合精品性色| 国产欧美精品一二三| 国产精品入口芒果| 九九久久九九久久| 国产精品美女在线播放| 精品国产成人av在线免| 激情内射人妻1区2区3区 | 丝袜人妻一区二区三区| 在线观看三级网站| 成人性生交视频免费观看| 国产视频九色蝌蚪| 亚洲熟妇无码另类久久久| 亚洲第一天堂久久| 成年人黄色在线观看| 日本xxxxx18| 香蕉视频xxxx| 无码人妻丰满熟妇区毛片18| 国产精品视频分类| 男人的天堂视频在线| xx欧美撒尿嘘撒尿xx| 久久av综合网| 精品一二三四五区| 伊人网在线综合| 亚洲精品中文字幕无码蜜桃| 欧美少妇一区二区三区| 天天综合网久久| 国产a级片免费观看| 国产99久久九九精品无码| а 天堂 在线| 天天爽人人爽夜夜爽| 成人性免费视频| 97在线免费视频观看| 超碰在线公开97| 日韩不卡一二三| 成人av一级片| 久久久久免费看黄a片app| 亚洲网中文字幕| 成人免费观看在线| 亚洲一区二区福利视频| 亚洲天堂国产视频| 成人国产一区二区三区| 欧美一区二区三区综合| 99精品视频网站| 青草全福视在线| 亚洲一区在线不卡| a级黄色片免费| 国产97在线 | 亚洲| 手机免费看av网站| 亚洲一二三av| 91免费视频黄| www.精品在线| 人妻丰满熟妇av无码区app| 青青草精品视频在线| 天天想你在线观看完整版电影免费| 最新天堂在线视频| 狠狠干狠狠操视频| 男人天堂成人在线| 日本a视频在线观看| 国产资源在线免费观看| avove在线观看| 国内精品国产三级国产aⅴ久| 国产freexxxx性播放麻豆 | 欧美亚洲色图视频| 黄色三级视频片| 色免费在线视频| 女同激情久久av久久| 北条麻妃在线一区| 日韩成人手机在线| 国产高清www| 中文字幕av不卡在线| 三区视频在线观看| 色呦呦网站入口| 男人搞女人网站| 57pao国产成永久免费视频| 波多野结衣三级在线| 午夜久久久久久久久久久| 免费观看国产视频在线| 日韩视频在线免费播放| 在线免费黄色小视频| 男人添女荫道口喷水视频| 69sex久久精品国产麻豆| 九九视频精品在线观看| 日韩一二区视频| 日韩av在线播放不卡| 色哟哟免费网站| av污在线观看| 男女视频网站在线观看| 可以免费观看av毛片| 999精彩视频| 日本黄色的视频| 青青在线免费视频| 三级a在线观看| 成人在线激情网| 国产小视频免费|