CSS伪元素(content与counter)

counter基本用法

在CSS里头,counter是个很有意思的功能,最常见得就是如果我们使用list清单,样式选择decimal十进制,当清单变多的时候数字也会跟着增加,底层貌似就是使用counter来做的,也因为counter所产生的数值并不存在于网页的元素内,所以如果我们要在清单元素之外使用,就必须透过::before或::after的content来实现。

counter最的基本用法一定要有一个父元素和子元素(类似list的原理,使用ul包着li),所以长相会类似下面这段html:

<div>
    <span>钢铁人</span>
    <span>美国队长</span>
    <span>雷神索尔</span>
</div>

在CSS里头,先针对div父元素使用counter-reset:num;进行计数器归零的设置,里面num是计数器累加数值的变数,接着可以在span::before里面看到counter-increment:num;这一段,这段的作用是把num累加上去,预设数值为加1,接着就透过content显示出来。

计数器预设的显示语法为:counter(计数器名称,list-style-type)

div{
  counter-reset:num;
}
span{
  display:block;
}
span::before{
  counter-increment:num; 
  content:counter(num) '. ';
}
专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

透过指定一开始counter-reset的起始数值,还有counter-increment累加的间隔数值,就可以做出从某个数值开始或只显示偶数、奇数的效果。

div{
  counter-reset:num 3;
}
span{
  display:block;
}
span::before{
  counter-increment:num 2; 
  content:counter(num) '. ';
}

如果要更换数字的样式,也可以透过计数器的第二个设定值list-style-type来更改,下面的例子就是将样式更改为georgian。

div{
  counter-reset:num;
}
span{
  display:block;
}
span::before{
  counter-increment:num; 
  content:counter(num, georgian) '. ';
}

counter进阶用法

除了指定单一个变数外,counter也可以同时指定多个变数,例如下面这段HTML,有三个类别在里面,我分别用span、i和b来分类。

<div>
  <span>钢铁人</span>
  <span>美国队长</span>
  <span>雷神索尔</span>
  <i>宙斯盾局</i>
  <i>神鬼局</i>
  <i>神经局</i>
  <b>九头蛇</b>
  <b>九头牛</b>
  <b>九头猪</b>
</div>

CSS一开始counter-reset可以指定多个变数,透过一个空白字元分隔,如果空白字元后面接着数字则是起始值,没有数字预设为0,当这样设定之后,就可以看到不同类别的数字代号就不同。

如果遇到了巢状结构,需要一层层的展开(例如:1 > 1.1 > 1.1.1),采用上述的作法可能就会复杂许多,好在counter还提供了另外一个counters的功能,目的就是来解决巢状结构的麻烦事,在开始前可以先看看透过ul和li组合的清单长相:

专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)
<ul>
  <li>第一层
    <ul>
      <li>第二层
        <ul>
          <li>第三层</li>
          <li>第三层</li>
          <li>第三层</li>
        </ul>
      </li>
      <li>第二层</li>
      <li>第二层</li>
    </ul>
  </li>
  <li>第一层</li>
  <ul>
    <li>第二层</li>
    <li>第二层</li>
  </ul>
</ul>

传统的清单如果将list-style设为decimal,同样可以具备数字接续的功能,但相对来说要做一些特殊变化就办不到了。

li{
  list-style:decimal;
}

透过content和counters的搭配,我们就可以告别预设值的困扰,甚至可以在不使用清单ul和li的状况下,实现和清单一模一样的效果,举例来说,我们纯粹透过div模拟一个清单的长相(状态仍然必须是有父元素和子元素的概念),里面的样式b就等于是ul,样式a就等于是li:

<div class="a">第一层
  <div class="b">
    <div class="a">第二层
      <div class="b">
        <div class="a">第三层</div>
        <div class="a">第三层</div>
        <div class="a">第三层</div>
      </div>
    </div>
    <div class="a">第二层</div>
    <div class="a">第二层</div>
  </div>
</div>
<div class="a">第一层
  <div class="b">
    <div class="a">第二层</div>
    <div class="a">第二层</div>
  </div>
</div>

由于b的外层没有东西,所以一开始要把body和b都进行counter reset的动作,接着透过counters的使用,让计数器的数值可以一个接着一个放进去,如此一来就可以做到原本清单不容易实现的效果了。

counters使用语法:counters(计数器名称,分隔字,list-style-type)

body, .b{
  counter-reset:c;
}
.a::before{
  content:counters(c, ".") ":";
  counter-increment:c; 
}
div{
  margin-left:10px;
}

了解原理之后,透过 ::before 和 ::after 的交互应用,就可以做出颇具特色的列表效果。

body, .b{
  counter-reset:c;
}
.a{
  box-sizing:border-box;
  position:relative;
  line-height:40px;
}

.a .a{
  padding-left:30px;
}

.a::after{
  content:'';
  box-sizing:border-box;
  display:inline-block;
  position:absolute;
  z-index:-1;
  top:0;
  left:0;
  width:100%;
  height:40px;
  margin-left:30px;
  box-shadow:inset 0 2px #666;
  background:#eee;
}
.a::before{
  content:counter(c, upper-roman);
  counter-increment:c;
  display:inline-block;
  width:30px;
  height:40px;
  background:#666;
  color:#fff;
  text-align:center;
  margin-right:5px;
}
专门建立的学习Q-q-u-n: 731771211,分享学习方法和需要注意的小细节,不停更新最新的教程和学习技巧
(从零基础开始到前端项目实战教程,学习工具,全栈开发学习路线以及规划)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSScounter计数器是一种非常有用的技巧,用于在网页中实现自动计数和编号的功能。通过使用计数器,我们可以方便地对网页元素进行编号,比如列表、章节标题等。 首先,我们需要定义一个计数器。可以使用counter-reset属性来定义计数器并初始化它的值。例如,如果我们想要创建一个从1开始的计数器,可以这样写: ``` body { counter-reset: counterName 1; } ``` 这里的counterName是我们给计数器起的名字,可以自定义。1表示计数器的初始值。 接下来,我们可以在需要计数的元素中使用counter-increment属性来递增计数器的值。例如,如果我们想要在每个列表项前显示它的编号,可以这样写: ``` ul li:before { counter-increment: counterName; content: counter(counterName) ". "; } ``` 这里的counter-increment用于递增计数器的值,content用于显示计数器的值。我们使用了counter()函数来获取计数器的值,并在后面加上了一些文字(比如点号和空格)来实现编号的显示效果。 我们还可以根据需要在不同的元素中使用不同的计数器。只需要给不同的计数器起不同的名字,并在对应的元素中使用相应的计数器名字即可。 总的来说,CSScounter计数器是一种非常灵活和强大的技巧,可以用于各种需要进行自动计数和编号的场景。通过定义计数器、递增计数器和使用counter()函数来获取计数器的值,我们可以轻松地实现网页元素的编号效果。 ### 回答2: 计数器(counter)是CSS中的一个功能强大的特性,可以用于在HTML文档中创建计数器,然后在样式规则中使用这些计数器来生成序号或标记。以下是使用计数器(counter)的一些技巧: 1. 创建一个计数器: 使用 `counter-reset` 属性可以创建一个计数器,并可以为其设定一个初始值。例如,可以创建一个以1为初始值的计数器: ```css .container { counter-reset: my-counter 1; } ``` 2. 更新计数器的值: 使用 `counter-increment` 属性可以更新计数器的值。可以在选择器中的任何位置使用这个属性。例如,每当 `li` 元素出现时,可以将计数器的值增加1: ```css li { counter-increment: my-counter; } ``` 3. 在内容中引用计数器的值: 使用 `content` 属性可以在样式规则中引用计数器的值,并将其插入到生成的内容中。可以使用计数器的名称作为 `content` 的值。例如,将计数器的值作为新的内容插入到列表项前面: ```css li::before { content: counter(my-counter) ". "; } ``` 4. 在不同的元素中使用多个计数器: 可以在同一个文档中使用多个不同的计数器,并为它们设定不同的初始值。这样可以为不同的元素生成不同的序号或标记。例如,可以为不同的标题元素创建不同的计数器: ```css h1 { counter-reset: h1-counter 1; } h2 { counter-reset: h2-counter 1; } ``` 5. 控制计数器的显示方式: 使用 `counter()` 函数可以对计数器的显示方式进行自定义。可以指定计数器的名称,以及任何显示格式。例如,可以将计数器的值格式化为罗马数字: ```css .container::after { content: counter(my-counter, upper-roman); } ``` 总结而言,计数器(counter)是CSS中一项非常实用的黑魔法技巧。通过创建、更新和引用计数器的值,可以在样式规则中生成序号或标记,并且可以通过自定义显示格式来控制计数器的外观。 ### 回答3: CSS中的计数器(counter)是一种非常强大的工具,可以用来计数、标记和显示元素的编号或序号。它可以通过一些技巧来实现各种有趣的效果。 首先,使用counter-reset属性来定义计数器并将其重置为指定的起始值。例如,可以使用"counter-reset: section 0;"来将名为"section"的计数器重置为0。 然后,可以通过counter-increment属性来递增计数器的值。例如,使用"counter-increment: section;"来递增名为"section"的计数器的值。 接下来,在需要显示计数器的地方,可以使用content属性来显示计数器的值。例如,使用"content: counter(section);"来在伪元素的内容中显示名为"section"的计数器的值。 可以进一步利用计数器,实现复杂的效果。例如,可以使用:before伪元素content属性来在每个元素前面显示计数器的值,从而实现自动标号的效果。例如,使用"content: counter(section) '. ';"来在每个元素前面显示名为"section"的计数器的值,并跟随一个点号。 此外,还可以使用counter()函数获取和修改计数器的当前值。例如,可以使用"counter(section)"来获取名为"section"的计数器的当前值,并将其用作其他属性的值。 总的来说,计数器是CSS中非常强大且灵活的工具,可以用来实现各种复杂的效果。熟练掌握计数器的使用技巧,可以让我们的CSS代码更加精细和有趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值