0

在下面的代码中,看起来所有<br/>标签都被 CSS 计数器忽略了。这是什么原因?

<!DOCTYPE html>
<html>

<head>
  <style>
    body {
      counter-reset: ele;
    }
    *::after {
      counter-increment: ele;
      content: "element count " counter(ele);
    }
  </style>
</head>

<body>

  <h1> h1 </h1>
  <h2> h2 </h2>
  <h2> h2 </h2>
  <h2> h2 </h2>

  <p><b> b </b> p</p>

  <br/>
  <br/>
  <br/>
  <br/>
  <br/>
  <br/>

</body>

</html>

另外,元素78代表什么?

4

1 回答 1

5

问题的解释

看起来所有<br/>标签都被 CSS 计数器忽略了。原因是?

<br>标签和其他“空”元素一样,确实支持 counters,但不幸的是,它们没有::afterpseudo-element。就像实例<input>元素一样,你不能利用这个技巧通过 CSS 生成内容。由于递增计数器发生在::after代码段中的这个伪元素中,因此计数器不会为<br>元素递增,因为br::after根本不存在。

在上面的代码片段中,元素 7 和 8 代表什么?”

BODY 和 HTML 标签。由于您使用::after,计数器会增加,并且内容会插入到这些元素的末尾,在其他页面内容之后。

半修正:计算元素而不是伪元素

您可以稍微更改 CSS 以增加元素本身的计数器,并且只显示伪元素中的值。

<!DOCTYPE html>
<html>

<head>
  <style>
    body {
      counter-reset: ele;
    }
    * {
      counter-increment: ele;
    }
    *::after {
      content: "element count " counter(ele);
    }
  </style>
</head>

<body>

  <h1> h1 </h1>
  <h2> h2 </h2>
  <h2> h2 </h2>
  <h2> h2 </h2>

  <p><b> b </b> p</p>

  <br>
  <br>
  <br>
  <br>
  <br>
  <br>

</body>

</html>

上面的例子还不能很好地工作,因为它在上升一个级别时不会增加计数器。这是因为当元素打开时计数器已经增加,关闭 HTML 和 BODY 不再增加计数器。

解决方法:计算伪元素和空元素

更好地修复它的可能方法:::after毕竟增加计数器,但是添加一个额外的 CSS 来增加没有::after伪元素的元素的计数器:

<!DOCTYPE html>
<html>

<head>
  <style>
    body {
      counter-reset: ele;
    }
    
    /* Increment the counter in the '::after' of non-empty elements. */
    *::after,
    /* And in the element itself for empty element. 
       List taken from https://developer.mozilla.org/en-US/docs/Glossary/Empty_element */
    link,track,param,area,command,col,base,meta,hr,source,img,keygen,br,wbr,colgroup,input
    {
      counter-increment: ele;
    }
    
    *::after {
      content: "element count " counter(ele);
    }
  </style>
</head>

<body>

  <h1> h1 </h1>
  <h2> h2 </h2>
  <h2> h2 </h2>
  <h2> h2 </h2>

  <p><b> b </b> p</p>

  <br>
  <br>
  <br>
  <br>
  <br>
  <br>

</body>

</html>

也许它并不适合每种情况,但无论如何你的问题似乎更具学术性。无论如何,我希望这个解释至少可以帮助您理解为什么在您的代码段中这些<br>元素似乎根本没有计数器。

于 2016-01-05T09:21:05.393 回答