前天发布了WordPress友链和博友圈rss单页模板代码,苦于Blocksy默认没有文章目录和代码高亮功能,阅读过长及有代码的文章障碍重重。
传送门:https://feng.pub/0820235378.html
解决方案
文章目录采用WPJAM
插件的扩展功能文章目录
实现,代码高亮使用Highlight.js
实现。并将相关代码写入子主题样式,以适应当前主题。
WPJAM文章目录
使用方式传送门:https://blog.wpjam.com/m/wpjam-toc/
自定义了CSS及JavaScript代码。
CSS代码:
/* 文章目录 */
#toc {
position: fixed;
top: 200px;
left: 15px;
width: 170px;
padding: 0px 15px;
font-size: 12px;
line-height: 24px;
border-radius: 5px;
background-color: var(--theme-palette-color-8);
box-shadow: 0 0 5px gray;
transition: all 0.5s;
-webkit-transition: all 0.5s;
overflow: hidden;
z-index: 2;
}
.toc-hide {
display: block;
width: 40px !important;
height: 40px;
padding: 0px !important;
background-color: var(--theme-palette-color-1) !important;
border-radius: 50px !important;
}
.toc-hide .toc-title strong {
font-size: 0px;
}
.toc-hide .toc-title span {
top: 0px;
right: 0px;
color: var(--theme-palette-color-8);
background-color: var(--theme-palette-color-1);
}
.toc-title {
padding: 10px 0;
margin-bottom: 0px;
font-size: 16px;
}
.toc-title span {
position: absolute;
right: 5px;
top: 5px;
display: block;
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 12px;
border-radius: 100%;
background-color: var(--theme-palette-color-6);
cursor: pointer;
}
.toc-title span:hover {
box-shadow: 0 0 5px gray;
}
#toc ul {
padding: 5px 0 5px 10px;
}
#toc>ul {
width: 150px;
}
JavaScript代码:
// 文章目录
const toc = document.querySelector('#toc')
const tocController = document.querySelector('#toc .toc-controller')
if (tocController) {
// 默认为展开
document.querySelector('.toc-title strong').innerHTML = '目录'
tocController.innerHTML = '隐藏'
tocController.setAttribute('title', '隐藏文章目录')
setTimeout(() => {
if (document.querySelector('.toc-controller-show')) {
tocToggle()
}
}, 2000)
tocController.addEventListener('click', e => {
tocToggle()
})
}
function tocToggle() {
toc.classList.toggle('toc-hide')
tocController.classList.toggle('toc-controller-show')
if (tocController.classList.contains('toc-controller-show')) {
tocController.innerHTML = '隐藏'
tocController.setAttribute('title', '隐藏文章目录')
} else {
tocController.innerHTML = '目录'
tocController.setAttribute('title', '显示文章目录')
}
}
Highlight.js代码高亮
准备文件
- 下载highlight.js代码:https://highlightjs.org/download
- 下载显示行号插件:https://github.com/taufik-nurrohman/highlight.ln.js
- 下载复制按钮插件:https://github.com/semaz/highlightjs-copy-button.js
2、3不是必须的,作为了解即可。
详细教程可查阅文档:https://highlightjs.readthedocs.io/en/latest/
functions.php相关代码
add_action('wp_enqueue_scripts', function () {
wp_enqueue_style('blocksy-feng-highlight-css', get_stylesheet_directory_uri() . '/dist/hljs/styles/github.min.css', array());
wp_enqueue_script('blocksy-feng-highlight-js', get_stylesheet_directory_uri() . '/dist/hljs/highlight.min.js', array(), '1.1.0', true);
wp_enqueue_script('blocksy-feng-highlight-js-copy', get_stylesheet_directory_uri() . '/dist/hljs/highlightjs-copy-button.min.js', array(), '1.1.0', true);
wp_enqueue_script('blocksy-feng-highlight-js-ln', get_stylesheet_directory_uri() . '/dist/hljs/highlight.ln.min.js', array(), '1.1.0', true);
});
CSS相关代码:
/* highlightjs 代码高亮 */
.wp-block-code {
position: relative;
padding: 0;
}
.wp-block-code code {
font-size: 14px;
white-space: inherit;
}
.hljs {
position: unset !important;
}
JS相关代码:
hljs.highlightAll();
hljs.initHighlighting();
hljs.initCopyButtonOnLoad();
以上代码稍显粗糙,GitHub国内访问十分不稳定,经常访问不到,每次去GitHub抄代码都是十分痛苦的事情。
但是我这里看 代码好像都显示在左边了,不知道是Edge浏览器的问题还是bug
多谢,改CSS导致的,修正过来了
大佬自己动手丰衣足食,不像我想自己动手都没能力
别这样,技能都是习来的
代码高亮highlight.js相比而言,我还是喜欢Prism.js,应用更加方便一些,可以自己选择用哪些插件,比如行号,复制之类的。
这我玩不来,还不错
之前折腾过,然后失败了,现在只能说句不错。
长内容用目录比较适合
这模板真的越来越看看!手动点赞?不过大佬用粉色,确实有点少女心?
目前还挺喜欢这个配色的,像是习惯了
github不稳定,你或许需要一个梯子。
有梯子但很少用
有个bug个,safari手机端上,目录点击隐藏按钮没效果
兼容性问题
代码高亮highlight.js还是比较原始的,有一个插件crayon-syntax-highlighter的样式非常之多也很美观。我以前用了highlight很久,看腻了后现在回归纯素颜本真了。
确实挑了很久感觉highlight提供的样式都一般,虽然网上有好看的,确实太麻烦也懒得下载。
不错,我也用了 highlight 做代码高亮,但是感觉高亮效果没别人的那些那么丰富,只有少量语法高亮了
highlight样式比较多,官方给的比较有限。