问题的由来
第一次关注这个标题编号的问题应该回溯到本科毕业论文的时候了,当时还单独涉猎过这个主题,word 有个很好的特性级联标题,一次设置好之后,后续只要设置标题样式就能按照设置的标题编号方式自动编号,我们要做的只是将对应的标题设置成对应基本的标题样式就好了,这个方法让我爱不释手,多年来一直沿用。完全解决了中途插入一章,一节等等导致的章节编号都需要人肉调整的问题,当然还有图片的编号命名什么的,都是类似的。
直到后面开始用markdown 由于各个编辑器的切换,一直没有一个好用的替代方案,所以几年前我写了一个小工具用命令行来做这事rawbin-/markdown-clear,这个工具解决了在github写博客的问题,同时在解决博客的问题的基础上解决了在各个平台发文的问题,因为编号是用脚本写上去的,所以用markdown here在各个平台发文也就顺理成章的转成html就行了,也解决了这个阶段的问题。
前两天把拖欠几个月的全面认知的总结写了,突然不想用这个脚本来编号了,产生一个想法:能不能不人肉编号,自动编上?然后就有了下面的内容。
先搞起来解决问题
以下操作案例都是在macos中产出,其他平台可能有些许差别,换汤不换药。
在typora中写markdown自动编号打开typora【偏好设置】找到【外观】=>【主题】=>【打开主题文件夹】将如下代码加入到打开目录的ba.ur.css 中
#writer { counter-ret: h1}h1 { counter-ret: h2}h2 { counter-ret: h3}h3 { counter-ret: h4}h4 { counter-ret: h5}h5 { counter-ret: h6}#writer h1:before { counter-increment: h1; content: counter(h1) ". "}#writer h2:before { counter-increment: h2; content: counter(h1) "." counter(h2) ". "}#writer h3:before { counter-increment: h3; content: counter(h1) "." counter(h2) "." counter(h3) ". "}#writer h4:before { counter-increment: h4; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) ". "}#writer h5:before { counter-increment: h5; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "}#writer h6:before{ counter-increment: h6; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "}
讲道理
在github pages 写markdown博客自动编号
我用的是jekyllbootstrap.com的模板,比较简单
打开任意一篇rawbin-.github.io中的文章,然后【右键】=>【检查】
可以拿到两个内容
将如下内容改到源代码的asts/themes/bootstrap3/css/style.css中
.content { counter-ret: h1}h1 { counter-ret: h2}h2 { counter-ret: h3}h3 { counter-ret: h4}h4 { counter-ret: h5}h5 { counter-ret: h6}.content h1:before { counter-increment: h1; content: counter(h1) ". "}.content h2:before { counter-increment: h2; content: counter(h1) "." counter(h2) ". "}.content h3:before { counter-increment: h3; content: counter(h1) "." counter(h2) "." counter(h3) ". "}.content h4:before { counter-increment: h4; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) ". "}.content h5:before { counter-increment: h5; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "}.content h6:before{ counter-increment: h6; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "}
在其他网页编辑中自动编码
比如各个博客平台,各个自媒体平台等,像我们常用的写文档的语雀都可以的。
这里面涉及到一款浏览器插件markdown here,可以在页面富文本编辑器中将markdown 自动转换为网页,这也是我前面说到的这几年在各个平台发文的套路,写好编号好标题markdown往编辑器里面一贴,然后一点 ,搞定。
简单尝试
markdown here 有一个配置页面,可以配置和调整css,并能预览效果简单看了下是用js把类转成了style属性,并且不支持伪类修改源码.markdown-here-wrapper { counter-ret: h1}.markdown-here-wrapper h1 { counter-ret: h2}.markdown-here-wrapper h2 { counter-ret: h3}.markdown-here-wrapper h3 { counter-ret: h4}.markdown-here-wrapper h4 { counter-ret: h5}.markdown-here-wrapper h5 { counter-ret: h6}.markdown-here-wrapper h1:before { counter-increment: h1; content: counter(h1) ". "}.markdown-here-wrapper h2:before { counter-increment: h2; content: counter(h1) "." counter(h2) ". "}.markdown-here-wrapper h3:before { counter-increment: h3; content: counter(h1) "." counter(h2) "." counter(h3) ". "}.markdown-here-wrapper h4:before { counter-increment: h4; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) ". "}.markdown-here-wrapper h5:before { counter-increment: h5; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "}.markdown-here-wrapper h6:before{ counter-increment: h6; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "}然后修改一下注入配置,允许加载这个样式文件,并引入这个样式问题剩下的有错改错就好了
最终产出和应用
克隆rawbin-/markdown-here打开chrome 设置三个点=>【更多工具】=>【扩展程序】打开【开发者模式】选择【加载已解压的扩展程序】=>选择克隆代码下的src目录即可安装并加载插件将插件固定在插件栏方便使用auto-number-title.scss内容如下.markdown-here-wrapper { 苏轼词两首 counter-ret: h1; h1 { counter-ret: h2; &:before { counter-increment: h1; content: counter(h1) ". "; } } h2 { counter-ret: h3; &:before { counter-incr观自在ement: h2; content: counter(h1) "." counter(h2) ". " } } h3 { counter-ret: h4; &:before { counter-increment: h3; content: counter(h1) "." counter(h2) "." counter(h3) ". " } } h4 { counter-ret: h5; &:before { counter-increment: h4; content: counter(h1) "." counter幂函数求导公式(h2) "." counter(h3) "." counter(h4) ". " } } h5 { counter-ret: h6; &:before { counter-increment: h5; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". " } } h6:before{ counter-increment: h6; content: counter(h1) "." counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ".长江大学文理学院" counter(h6) ". " }}
再来简单讲一下道理
css 自动编号
不是一个新特性,或者说是一个老特性了,出现在css 2.1中,搜索site:w3.org css automatic numbering 可以找到,当然截止今天后来的版本(css 3, css 2.2)都有这个特性,从caniu上可以看到,ie8及以上兼容,很棒吧
简单说明
counter-ret 重置counter-increment ++counter() 取值配合before和after来做还有更多的玩法,参见 css the defiiniitiive guide 4th ,这里有翻译gdut-yy/css-the-definitive-guide-4th-zhchrome插件或扩展开发
这个 我也没实际搞过,原来看了看书
可参考的资料
官方文档sxei/chrome-plugin-demo 或者搜索chrome插件 全攻略《chrome扩展及应用开发》,这个就是我原来看的那本老书还是有些问题没解决
上面的操作方式必须要h1到h6依次排开,不然会很好看如果标题本身就编号了的,就有点糟糕了这俩问题在我github的博客里面都能看到,解决办法可以是运行下“顺便探索下css其他可变的内容
css变量或者说自定义属性
这个ie不兼容,其他浏览器高版本兼容
:root{ --var-test:xxx}.body{ --var-test:ooo; prop-test:var(--var-test)}
attr()
这个caniu也有些说不清楚,主体兼容也是从ie8开始的,需要自己总结强大的地方是可以读取属性值,赋给另外的属性,也就是可以来个属性联动看起来纯css的解决方案就到此告一段落了
如果能有脚本参与,就自由了attr() 配合伪类来做展示,是一个js和css通信的一个比较好的方式到此这篇关于纯css实现markdown自动编号的示例代码的文章就介绍到这了,更多相关css markdown自动编号内容请搜索ww勾股定理逆定理w.887551.com以前的文章或继续浏览下面的相关文章,希望大家以后多多支持www.887551.com!
本文发布于:2023-04-03 20:13:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ea301016d0fbd449c7fbcd8a81b126b5.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:纯CSS实现markdown自动编号的示例代码.doc
本文 PDF 下载地址:纯CSS实现markdown自动编号的示例代码.pdf
留言与评论(共有 0 条评论) |