CSS-counter 计数器详细教程+使用场景示例

news2025/7/19 3:48:31

counter

  • 一. counter计数器
    • 二. 属性和方法
      • 1. 计数器命名/重置
      • 2. 计数器-值递增规则
      • 3. 计数器显示 counter() / counters() 函数
    • 三 代码示例
      • 1. 重新开始计数
      • 2. counters嵌套使用
      • 3. 借助CSS计数器呈现CSS var变量值

一. counter计数器

在这里插入图片描述

计数器是一种特殊的数字跟踪器,通常用于为CSS列表项自动编号,早期无序列表ul和有序列表ol元素定义时,会自动添加counter()计数器,列表也会自动递增序号,属性都会取默认值

CSS计数器只能跟content属性在一起的时候才有作用,而content属性专门用在before/after伪元素上。
于是,就有了,“计数器↔伪元素↔content属性”的铁三角关系。

二. 属性和方法

1. 计数器命名/重置

counter-reset (可以同时声明多个计数器)

counter-reset: name (initialValue||0);

2. 计数器-值递增规则

counter-increment 递增变量(计数的变化值)

counter-increment: name (changeValue||1)


CSS的计数器的计数是有一套规则的,称为“ 普照规则”:普照源(counter-reset)唯一,每普照(counter-increment)1次,普照源增加1次计数值。

A. 普通普照

<style>
    .counter { counter-reset: reset 0; counter-increment: reset; }
    .counter:before { content: counter(reset); }
</style>

<p class="counter"></p>

counter-increment普照了p标签,counter-reset值增加1,于是计数从设置的初始值0变成了1,reset就是这里的计数器,伪元素content值counter(reset)就是1

B. 普照自身 (counter-increment直接设置在伪元素上),结果同上

<style>
    .counter { counter-reset: reset 0; }
    .counter:before { content: counter(reset); counter-increment: reset; }
</style>

<p class="counter"></p>

如果父元素和子元素都被counter-increment普照1遍,结果应该是计数器普照两次,结果为2

父元素没有普照,重置默认值0,父元素有2个孩子。孩子自身都接受普照。两个孩子的计数值是?

.counter { 
  counter-reset: reset 0; 
  font-size: 24px; 
}
.counter:before,
.counter:after { 
  content: counter(reset); 
  counter-increment: reset; 
}
<p class="counter"> vs </p>

在这里插入图片描述

计数器的数值变化遵循HTML渲染顺序,遇到一个increment计数器就变化,什么时候counter输出就输出此时的计数值。

3. 计数器显示 counter() / counters() 函数

content: counter(name, style) // 1,2,3

content: counters(name, string, style); // 显示嵌套计数,如1.1,1.2,1.3……

string :字符串,子序号的连接符https://codepen.io/airen/pen/YzVBVrG
style: 支持关键字 list-style-type,递增和递减不一定都是数字, 可以是英文字母或其他

三 代码示例

1. 重新开始计数

在同一层级中,可以通过重复声明相同名字的计数器来打断(或者说是覆盖)之前的计数,重新开始。

<div class="level1">
    <div class="level1-item">foo</div>
    <div class="level1-item">bar</div>
    <div class="level1-item break">baz</div>
    <div class="level1-item">qux</div>
</div>
<style>
	.level1 {
	    counter-reset: level1;
	}
	.break {
	    counter-reset: level1;
	}
	.level1-item:before {
	    content: counter(level1, upper-roman) '.';
	    counter-increment: level1 1;
	}
</style>

在这里插入图片描述

2. counters嵌套使用

“普照源是唯一的 => 一个容器里的普照源(reset)是唯一的”
想实现嵌套,必须让每一个列表容器拥有一个“普照源”,通过子辈对父辈的counter-reset重置、配合counters()方法才能实现计数嵌套效果。

html:

<div class="reset">
    <div class="counter">text1
        <div class="reset">
            <div class="counter">text1-1</div>
            <div class="counter">text1-2
                <div class="reset">
                    <div class="counter">text1-2-1</div>
                    <div class="counter">text1-2-2</div>
                    <div class="counter">text1-2-3</div>
                </div>
            </div>
            <div class="counter">text1-3</div>
        </div>
    </div>
    <div class="counter">text2</div>
    <div class="counter">text3
        <div class="reset">
            <div class="counter">text3-1</div>
        </div>
    </div>
</div>

css:

<style>
.reset { 
  padding-left: 20px; 
  counter-reset: line; 
}
.counter:before { 
  content: counters(line, '-') '. '; 
  counter-increment: line; 
}
</style>

在这里插入图片描述

如果不保证一个容器里的普照源唯一,打乱html顺序:

<div class="reset">
    <div class="counter">text1</div>
    <div class="reset">
      <div class="counter">text1-1</div>
      <div class="counter">text1-2
            <div class="reset">
              <div class="counter">text1-2-1</div>
              <div class="counter">text1-2-2</div>
              <div class="counter">text1-2-3</div>
            </div>
      </div>
      <div class="counter">text1-3</div>
    </div>
    <div class="counter">text2</div>
    <div class="counter">text3</div>
</div>

这里的reset与上面的counter是兄弟关系,而不是父子关系。一个容器的reset的唯一的,一旦子元素出现reset,会改变整个容器的嵌套关系
在这里插入图片描述

3. 借助CSS计数器呈现CSS var变量值

::marker是CSS中新出的一种伪元素,用来匹配列表项中的“标记盒子”(设置为display:list-item的块级元素,除主块级盒子外有一个附加盒子),并可以设置标记盒子里面的内容以及与字符显示相关的UI。
例如大家比较熟悉的<li>元素,就可以直接使用::marker伪元素改变项目符号颜色、字号字体、甚至内容

<style>
    li { 
      display: list-item;
    }
    li::marker { 
      content: "(" counter(list-item) ")"; 
    }
</style>

<ul>
  <li>text</li>
  <li>text</li>
  <li>text</li>
</ul>

有时候可能需要CSS变量作为字符在页面中呈现,CSS变量直接作为content属性值是没有任何效果的

/* 无效 */
.bar::before {
    content: var(--percent);
}

虽然content属性本身不支持变量,但是counter-reset属性后面的计数器初始值是支持的,可以通过counter和content配合使用达到效果:

.bar::before {
    counter-reset: progress var(--percent);
    content: counter(progress);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

systemd的unit配置文件详解

Systemd 是 Linux 的系统和服务的管理器&#xff0c;兼容 SysV 和 LSB初始化脚本&#xff0c;Systemd有以下特性&#xff1a; 积极的并行化能力使用套接字和 D-Bus 激活来启动服务提供按需启动守护进程&#xff0c;使用 Linux cgroups 跟踪进程支持系统状态的快照和恢复维护挂…

艾美捷Cas9核酸酶应用说明及实例展示

Product Description:Recombinant Streptococcus pyogenes Cas9 (wt) protein expressed in an E. coli . Form:Liquid Preparation Method:E. coli expression system Purity:≥ 95% by SDS-PAGE Activity:20 nM CRISPR/Cas9-C-NLS nuclease incubated for 1 hour at 37℃…

【新知实验室 TRTCIM】实时互动课堂最佳实践

【新知实验室 TRTC&IM】实时互动课堂最佳实践一、新知实验室-TRTC腾讯云音视频产品体验官计划活动简介二、产品简介TRTCIM三、最佳实践3.1 官方快速上手TRTC(快速跑通)3.1.1 注册腾讯云账号3.1.2 使用实时音视频(需先开通)3.1.3 创建应用3.1.4 查看项目(查看密钥和快速上手…

java基础—String

我们都知道 创建一个字符串最简单的方式是 String meaasge "java资讯";当然还可以用构造来创建 &#xff08;不推荐&#xff0c;开发中不要用&#xff09; String str2new String("java资讯");这两种创建最主要的区别在于&#xff0c;一个在公共池中&…

gitlab CI/CD 自动化部署vue项目到阿里云服务器步骤

目录1&#xff0c;gitlab托管vue项目2&#xff0c;本地项目连接到远程仓库3&#xff0c;设置gitlab-runner4&#xff0c;编写yml文件5&#xff0c;部署到阿里云服务器&#xff08;本地设置&#xff09;5.1 安装相关依赖5.2 vue项目中添加deploy.js文件5.3 注册deploy命令5.4 验…

文本生成图像工作简述2--常用数据集分析与汇总

文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。用户可以输入他们喜欢的任何文字提示——比如&#xff0c;“一只可爱的柯基犬住在一个用寿司做的房子里”——然后&#xff0c;人工智能就像施了魔法一样&#xff0c;会产生相应的图像。 文本生成图像&#xff08;te…

实验2:Arduino的nRF24L01双向收发实验

实验结果: 00节点向01发送:00ReqMesFor01 01节点向00发送:CodeNewNiceBoy 并且在串口打印出相应信息 硬件电路: 01 软件 00节点代码: /*00 */#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(9, 10);// CE, CSNconst char te…

dolphinscheduler 2.0.5 性能手动测试

目录&#x1f42c;官方配置文件说明&#x1f42c;测试并发量&#x1f420;线程数量设置100&#x1f420;线程数量设置200&#x1f420;线程数量设置500&#x1f42c;测试结论&#x1f42c;官方配置文件说明 官方说明 master.exec.threads&#xff1a; master工作线程数量,用于…

智能晾衣架(二)--功能实现

本文素材来源于红河学院 工学院 作者&#xff1a;赵德森 张艺锦 潘志慧 曹紫康 指导老师&#xff1a;江洁 张龙超 1. 自动升降功能 我们设计时采用了热释电传感器&#xff08;人体红外传感器&#xff09;&#xff0c;在热释电传感器感应到有人靠近时&#xff0c;晾衣架通…

C++:内存管理:C++内存管理详解(二):带你攻破内存管理

前言&#xff1a; 任何程序运行起来都需要分配内存空间存放该进程的资源信息&#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等信息所存放的区域都有所不同&#xff0c;不同的区域又有不同的特性。 欺骗C进程 每一个C语言的程序被执行起来的时候系统为了方便开…

字符串的简单介绍和字符串的大小比较

以前就写过一篇关于String的文章&#xff0c;今天再来写一篇&#xff0c;更加深入了解一下String类 &#x1f550;1.String类的定义 &#x1f551;2.String类的创建 &#x1f552;3.字符串的大小比较 1.之前在C语言中我们已经学到了字符类型&#xff0c;但是C语言没有Strin…

Oracle-Rman duplicate文件坏块问题处理ORA-19849 19612

前言: 最近&#xff0c;在使用rman duplicate进行备库环境搭建时&#xff0c;遇到了ORA-19849 19612坏块报错&#xff0c;最终分析是发现由于网络的配置导致。 问题: 在 ORACLE 12.2.0.1.180417 通过RMAN duplicate进行备库初始化&#xff0c;在复制文件的过程中&#xff0c;…

FTP服务器移植到Linux开发板

FTP服务器移植到Linux开发板 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录FTP服务器移植到Linux开发板前言一、vsftpd源码下载二、vsftpd移植及配置1.vsftpd移植2.vsftpd配置2.1 配置vsftpd.conf2.2 添加新用户2…

LVS+Keepalived群集

目录 一.keeepalived工具介绍 1.1 专为LVS和HA设计的一款健康检查工具 1.2 Keepalived实现原理剖析 1.3 VRRP工作过程 1.4 Keepalived&#xff0c;VRRP及其工作原理 1.5 Keepalived体系主要模块及其作用 二、LVSKeepalived 高可用群集的搭建步骤 1、配置负载调度器&…

项目管理(PMO的作用)

项目管理办公室 (PMO) 是对与项目相关的治理过程进行标准化&#xff0c;并促进资源、方法论、工具和技 术共享的一个组织结构。PMO 的职责范围可大可小&#xff0c;从提供项目管理支持服务&#xff0c;到直接管理一个 或多个项目。 PMO的三种类型&#xff1a; PMO的作用&#…

ppt背景图片怎么设置?6步教你快速搞定!

在制作 ppt的过程中&#xff0c;需要将一些内容进行设置&#xff0c;来保证整体美观&#xff0c;也就是将背景图片设置好。背景图片设置的好&#xff0c;可以很好地体现页面上的内容&#xff0c;提高页面上的内容展示效果。所以大家在制作 ppt时&#xff0c;需要将一些背景图片…

进程和线程详解

目录 前言&#xff1a; 操作系统定位 并发 并行 并发 进程 描述 PCB 管理 内存管理 进程间通信 线程 小结&#xff1a; 前言&#xff1a; 当一个程序运行起来时&#xff0c;操作系统要为之分配一些资源&#xff0c;这样的运行起来的程序称之为一个进程。为了有效解…

huffman编译码

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 利用哈夫曼编码进行信息通信可以较大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对…

Python期末复习题:文件

Python期末复习题&#xff1a;文件 文章目录Python期末复习题&#xff1a;文件一、二手房数据统计二、学生成绩统计一、二手房数据统计 附件文件house.csv 中存储一些二手房数据&#xff0c;中文编码为GBK&#xff0c;对文件中的数据进行统计分析。 文件中数据格式如下所示&…

理解Attention机制的query key value

背景 在Attention机制引入前&#xff0c;自然语言处理里的深度学习模型有以下缺点&#xff1a; 长序列的推理存在信息损失/梯度消失&#xff1a;输入序列越长&#xff0c;模型越难保存初始输入信息。运算量大并且不能并行&#xff1a;RNN的每一步推理都是基于上一个步的结果。…