CSS 伪元素::marker详解


Posted in HTML / CSS onJune 26, 2021

本文将介绍 CSS 中一个比较有意思的伪元素 ::marker,利用它,我们可以让我们的文字序号变得更加的有意思!

什么是 ::marker

CSS 伪元素 ::marker 是从 CSS Pseudo-Elements Level 3 开始新增,CSS Pseudo-Elements Level 4 中完善的一个比较新的伪元素,从 Chrome 86+ 开始得到浏览器的支持。

利用它,我们可以给元素添加一个伪元素,用于生成一个项目符号或者数字。

正常而言,我们有如下结构:

<ul>
  <li>Contagious</li>
  <li>Stages</li>
  <li>Pages</li>
  <li>Courageous</li>
  <li>Shaymus</li>
  <li>Faceless</li>
</ul>

默认不添加任何特殊的样式,它的样式大概是这样:

CSS 伪元素::marker详解

利用 ::marker 我们可以对序号前面的小圆点进行改造:

li {
  padding-left: 12px;
  cursor: pointer;
  color: #ff6000;
}
li::marker {
  content: '>';
}

就可以将小圆点改造成任意我们想要的:

CSS 伪元素::marker详解

::marker 伪元素的一些限制

首先,能够响应 ::marker 的元素只能是一个 list item,譬如 ul 内部的 liol 内部的 li 都是 list item。

当然,也不是说我们如果想在其他元素上使用就没有办法,除了 list item,我们可以对任意设置了 display: list-item 的元素使用 ::marker 伪元素。

其次,对于伪元素内的样式,不是任何样式属性都能使用,目前我们只能使用这些:

  • all font properties -- 所以字体属性相关
  • color -- 颜色值
  • the content property -- content 内容,类似于 ::before 伪元素 的 content,用于填充序号内容
  • text-combine-upright (en-US), unicode-bidi and direction properties -- 文档书写方向相关

::marker 的一些应用探索

譬如我们经常见到标题前面的一些装饰:

CSS 伪元素::marker详解

或者,我们还可以使用 emoji 表情:

CSS 伪元素::marker详解

都非常适合使用 ::marker 来展示,注意用在非 list-item 元素上需要使用 display: list-item

<h1>Lorem ipsum dolor sit amet</h1>
<h1>Lorem ipsum dolor sit amet</h1>
h1 {
  display: list-item;
  padding-left: 8px;
}
h1::marker {
  content: '?';
}
h1:nth-child(2)::marker {
  content: '?';
}

CodePen Demo -- ::marker example

::marker 是可以动态变化的

有意思的是,::marker 还是可以动态变化的,利用这点,可以简单制作一些有意思的 hover 效果。

譬如这种,没被选中不开心,选中开心的效果:

li {
  color: #000;
  transition: .2s all;
}
li:hover {
  color: #ff6000;
}
li::marker {
  content: '?';
}
li:hover::marker {
  content: '?';
}

CSS 伪元素::marker详解

CodePen Demo -- ::marker example

搭配 counter 一起使用

可以观察到的是,::marker 伪元素与 ::before::after 伪元素是非常类似的,它们都有一个 content 属性。

content 里,其实是可以作用一些简单的字符串加法操作的。利用这个,我们可以配合 CSS 计数器 counter-resetcounter-increment 实现给 ::marker 元素添加序号的操作。

counter-increment 还不算很了解的可以移步这里:MDN -- counter-increment

假设我们有如下 HTML:

<h3>Lorem ipsum dolor sit amet.</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
<h3>Itaque sequi eaque earum laboriosam.</h3>
<p>Ratione culpa reprehenderit beatae quaerat voluptatibus, debitis iusto?</p>
<h3>Laudantium sapiente commodi quidem excepturi!</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>

我们利用 ::marker 和 CSS 计数器 counter-increment 实现一个自动计数且 h3 前面带一个 emoji 表情的有序列表:

body {
  counter-reset: h3;
}

h3 {
  counter-increment: h3;
  display: list-item;
}

h3::marker {
  display: list-item;
  content: "✔" counter(h3) " ";
  color: lightsalmon;
  font-weight: bold;
}

效果如下,实现了一个自动给 ::marker 元素添加序号的效果:

CSS 伪元素::marker详解

CodePen Demo -- ::marker example

最后

本文介绍了什么是 ::marker 以及它的一些实用场景,可以看出虽然 ::before::after 也能实现类似的功能,但 CSS 还是提供了更具有语义化的标签 ::marker,也表明了大家需要对自己的前端代码(HTML/CSS)的语义化更加注重。

好了,本文到此结束,希望对你有帮助 ?

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

到此这篇关于CSS ::marker 让文字序号更有意思的文章就介绍到这了,更多相关CSS ::marker内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
纯css3实现效果超级炫的checkbox复选框和radio单选框
Sep 01 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
Sep 05 HTML / CSS
css3实现3D文本悬停改变效果的示例代码
Jan 16 HTML / CSS
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
Jun 01 HTML / CSS
CSS3 真的会替代 SCSS 吗
Mar 09 HTML / CSS
用html5实现语音搜索框的方法
Mar 18 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
Apr 10 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
Sep 11 HTML / CSS
HTML5本地存储之Web Storage详解
Jul 04 HTML / CSS
html5唤起app的方法
Nov 30 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
Sep 17 HTML / CSS
CSS 实现角标效果的完整代码
Jun 28 HTML / CSS
深入理解margin塌陷和margin合并的解决方案
CSS实现章节添加自增序号的方法
CSS变量实现主题切换的方法
Jun 23 #HTML / CSS
CSS3实现列表无限滚动/轮播效果
HTML5页面音频自动播放的实现方式
Jun 21 #HTML / CSS
html中显示特殊符号(附带特殊字符对应表)
CSS中Single Div 绘图技巧的实现
You might like
php5.2.0内存管理改进
2007/01/22 PHP
织梦模板标记简介
2007/03/11 PHP
php入门教程 精简版
2009/12/13 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
vuex入门最详细整理
2020/03/04 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
企业新年寄语
2014/04/04 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
师德师风自我评价范文
2014/09/11 职场文书
家庭困难证明
2014/10/12 职场文书
产品质量保证书范本
2015/02/27 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书