博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用css的伪类给html代码块添加代码种类
阅读量:7097 次
发布时间:2019-06-28

本文共 1378 字,大约阅读时间需要 4 分钟。

前言

之前就在vue文档中看到这样的效果,在代码块的右上角会显示代码种类(javaascript, css等),如下图所示

刚好最近自己在做一个练手的项目要使用到markdown, 所以就稍微研究了下这个功能的实现。

实现

css部分

css3中新增加了伪类before,after。其中content可以通过调用attr() 方法获取到某个伪类所属dom元素的属性值。

举个例子

  
Document
复制代码

我们可以得到如下效果

我们通过attr函数得到了html标签的属性class,因此我们可以把语言种类保存到 dom中的属性data-language中。

js

我使用的是remarkable库,可以将一段markdown转换成一段html。

举个例子

"```let a = 1;let b = 3;```"复制代码

这样的一段markdown文本,使用remarkable 实例中的render后会返回如下字符串

let a = 1;let b = 3;
复制代码

那么怎样添加data-language 属性呢,因为现在只是一段字符串,我们可以使用正则表达式来对字符串进行替换。

const reg = /([\w\W]*?<\/code>)/g;const result = hljsMarkdown.replace(reg, (match, p1, p2, p3) => {  return [p1, p2, `" data-language="${p2}"`, p3].join('');});复制代码

hljsMarkdown 是使用remarkable 转译得到的html字符串就是上面一段的markdown字符串,通过replace方法可以在class后面添加data-language 自定义属性。使用replace方法后可以得到result

将你得到的这段字符串插入到你需要展示markdown的容器dom中,即可。

结果

css

.markdown-body code::after {  position: absolute;  top: 0;  right: 10px;  font-size: 1rem;  font-weight: bold;  content: attr(data-language);}复制代码

js

let hljsMarkdown = md.render(content);const reg = /([\w\W]*?<\/code>)/g;const result = hljsMarkdown.replace(reg, (match, p1, p2, p3) => {  return [p1, p2, `" data-language="${p2}"`, p3].join('');}); // result 带有data-language 属性的dom字符串。复制代码

最终效果

对比

看了下vue官网实现方法,是通过把内容写死直接在伪类中渲染,在vue文档中的场景中,只需要写js,css,html这是一个很好的方法。相比来说,vue官网的做法更简单,我的做法会稍微复杂但是会更加灵活。 最终的做法还是需要根据具体的场景决定。

转载地址:http://bueql.baihongyu.com/

你可能感兴趣的文章
【原创】erlang 模块之 os
查看>>
redhat nginx 安装
查看>>
阿里云的maven代理,比较快
查看>>
浅谈finally使用坑。
查看>>
Python协程深入理解
查看>>
[置顶] Jquery之ShowLoading遮罩组件
查看>>
ACE 格式化输出到console
查看>>
Skype For Business Server 2015 离线消息
查看>>
js 获取checkbox选中项目
查看>>
VC6使用技巧
查看>>
pdf文档如何转换成txt文档
查看>>
DELL32位诊断工具PEDIAGS使用
查看>>
产品经理的麻烦地图
查看>>
如何通过刷百度指数来提高网站的权重
查看>>
轻量级HTTP服务器Nginx(常用配置实例)
查看>>
FAT32文件系统
查看>>
Mysql存储过程分析
查看>>
文件系统权限 -- 学习笔记
查看>>
windows2008域上装oracle10gR2
查看>>
mac终端命令大全介绍(稍加整理)
查看>>