发布于 

Next主题样式配置2-代码块显示程序语言名字

一直想在代码块上面显示这个代码块使用的程序语言的名字,但是没有找到好的方法,这两天在搜索的时候发现了一个高手的博客里面介绍了这个方法,就借鉴了过来。

因为自己的水平有限,后端基本啥也不会,所以原理就不多说了(其实看不懂),这里把步骤、代码以及一些小的修改记录如下。

首先在 next/scripts 目录下面新建一个javascript文件命名为
codeblock.js 文件,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var attributes = [
'autocomplete="off"',
'autocorrect="off"',
'autocapitalize="off"',
'spellcheck="false"',
'contenteditable="true"'
]

var attributesStr = attributes.join(' ')

hexo.extend.filter.register('after_post_render', function (data) {
while (/<figure class="highlight ([a-zA-Z]+)">.*?<\/figure>/.test(data.content)) {
data.content = data.content.replace(/<figure class="highlight ([a-zA-Z]+)">.*?<\/figure>/, function () {
var language = RegExp.$1 || 'plain'
var lastMatch = RegExp.lastMatch
lastMatch = lastMatch.replace(/<figure class="highlight /, '<figure class="iseeu highlight /')
return '<div class="highlight-wrap"' + attributesStr + 'data-rel="' + language.toUpperCase() + '">' + lastMatch + '</div>'
})
}
return data
})

然后找到 next 主题下面的 highlight.styl 文件,具体位置在
next/source/css/_common/components/highlight/highlight.styl

在文件的最下面添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
.highlight-wrap[data-rel] {
position: relative;
overflow: hidden;
border-radius: 5px;
box-shadow: 0 10px 30px 0px rgba(0,0,0,0.4);
margin: 35px 0;
::-webkit-scrollbar {
height: 10px;
}

::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 10px;
}

::-webkit-scrollbar-thumb {
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
}
&::before {
color: white;
content: attr(data-rel);
height: 38px;
line-height: 38px;
background: #21252b;
color: #fff;
font-size: 16px;
position: absolute;
top: 0;
left: 0;
width: 100%;
font-family: 'Source Sans Pro', sans-serif;
font-weight: bold;
padding: 0px 80px;
text-indent: 15px;
float: left;
}
&::after {
content: " ";
position: absolute;
-webkit-border-radius: 50%;
border-radius: 50%;
background: #fc625d;
width: 12px;
height: 12px;
top: 0;
left: 20px;
margin-top: 13px;
-webkit-box-shadow: 20px 0px #fdbc40, 40px 0px #35cd4b;
box-shadow: 20px 0px #fdbc40, 40px 0px #35cd4b;
z-index: 3;
}
}

保存收工,这样基本就完成了。重新启动hexo博客你的代码块的上方应该就会出现代码中的语言名称。

一个小问题的解决,我这边出现了,如果大家也出现可以参考一下,在完成js文件配置以后我发现我的代码块上方有一部分代码被盖住了,下面呢出现了一部分白条,感觉整个代码块上移了一样。

通过开发者工具查看以后,调整了代码块的 margin 搞定了。修改的内容也在
highlight.styl 文件中,代码如下:

1
2
3
4
5
6
7
8
9
$code-block {
overflow: auto;
margin: 34px 0px 0px 0px; // 把margin-top调整为34px就可以了
padding: 0;
font-size $code-font-size;
color: $highlight-foreground;
background: $highlight-background;
line-height: $line-height-code-block;
}

今天在写其他博文的时候发现代码有个bug,无法正确显示 JSON
文件,现在还未找到解决方法。

参考博文


本站由 @aoenian 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。