鍍金池/ 問答/C  網(wǎng)絡(luò)安全  HTML/ counter-increment自增多次 無效

counter-increment自增多次 無效

學(xué)習(xí)計(jì)數(shù)器遇到的問題,兩天搜索找不到相關(guān)資料。

問題 1:

HTML:


<div>
    <p>text</p>
    <p>text</p>
    <p>text</p>
</div>

CSS:

div{counter-reset:pl;}
p::before{content:counter(pl);counter-increment:pl;}
p::after{content:counter(pl);}

結(jié)果:

1text1
2text2
3text3

因?yàn)榻坛躺险f不論何處,每次出現(xiàn)counter-increment計(jì)數(shù)器皆自增,于是修改CSS為:

div{counter-reset:pl;}
p::before{content:counter(pl);counter-increment:pl;}
p::after{content:counter(pl);counter-increment:pl;}

兩個counter-increment是不是計(jì)數(shù)器自增2次?于是寄希望能出現(xiàn)結(jié)果

2text2
3text3
4text4

可是。。。卻出現(xiàn)這個東西。。?!?/p>

1text2
3text4
5text6

這是什么意思???


問題2:

還是基于上題,這次我把counter-increment單獨(dú)放置

div{counter-reset:pl;}
p::before{content:counter(pl);counter-increment:pl;}
p::after{content:counter(pl);}
p{counter-increment:pl;}

結(jié)果:

2text2
4text4
6text6

這個結(jié)論雖然不是我設(shè)想的,但也貌似懂了,兩個counter-increment的語義是:計(jì)數(shù)器自增步長=2。于是從0初始,2,4,6...

原諒我整天胡思亂想,于是又加一個counter-increment會出現(xiàn)什么?

div{counter-reset:pl;}
p::before{content:counter(pl);counter-increment:pl;}
p::after{content:counter(pl);}
p{counter-increment:pl;}
p{counter-increment:pl;}

是不是步長=3,于是出現(xiàn) 3,6,9...
可我又被耍了
結(jié)果無任何變化,不論我加入多少個counter-increment,可結(jié)果固定在2,4,6..不變了

2text2
4text4
6text6

這兩天問了不少問題,有時候在想,有沒有比較靠譜、深入的教程,多些例子、課后題的教程,畢竟w3c太簡略了,MDN每節(jié)也只一個課后題。每次遇到點(diǎn)問題都來這問,挺麻煩大家的,不好意思。

回答
編輯回答
笑浮塵

問題1:

我不太理解你的問題,before 一次 after 一次不是正好

12
34
56

如果你想要每次 +2,應(yīng)該是:

p::before {
  counter-increment:pl 2;
  content: counter(pl);
}
p::after {
  content: counter(pl);
}

問題2:

CSS 里重復(fù)多次的結(jié)果,會把所有樣式合并到一起,所以重復(fù)兩次和只寫一次效果是一樣的。

2017年12月17日 17:34
編輯回答
旖襯

CSS描述的是你想要的結(jié)果(聲明式),而不是你想要計(jì)算機(jī)怎么做(過程式)。所以:

  1. 不論實(shí)際代碼的順序,CSS總是先處理p,再處理p::before,再處理p::after;
  2. 不論實(shí)際代碼的順序,CSS總是先處理counter-increment,再處理content;
  3. 聲明多次同一個樣式,只會處理最終生效的,丟棄其他的。

所以CSS處理問題1的順序是

(p::before)counter-increment:pl;
(p::before)content:counter(pl);
(p::after)counter-increment:pl;
(p::after)content:counter(pl);

處理問題2.1的順序是

(p)counter-increment:pl;
(p::before)counter-increment:pl;
(p::before)content:counter(pl);
(p::after)content:counter(pl);

處理問題2.2的順序是

計(jì)算p的最終生效樣式:第二個p有counter-increment,丟棄第一個p的counter-increment
(最終生效的p)counter-increment:pl;
(p::before)counter-increment:pl;
(p::before)content:counter(pl);
(p::after)content:counter(pl);
2017年9月9日 10:02