avatar

目录
hexo文章代码块美化

背景

在美化hexo next主题的时候代码块的样式依旧很突兀,遂萌发了美化代码块的想法。说干咋就干。

效果

自己看下面的结果吧!

实现方法

建立代码块js

在next/scripts/目录下新建两个js文件分别命名为events.js以及codeblock.js

代码如下:

events.js代码

Javascript
1
2
3
4
5
6
7
// mac Panel效果代码块相关
var exec = require('child_process').exec;

// new 后自动打开编辑器
hexo.on('new', function(data){
exec('open -a MacDown ' + data.path);
});

codeblock.js代码

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// mac Panel效果代码块相关
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
})

设置样式文件

到source/css/_common/components/highlight/目录下建立一个macPenal.styl文件

macPenal.styl文件内容如下

css
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
54
55
56
// mac Panel效果代码块相关
.highlight-wrap[data-rel] {
position: relative;
overflow: hidden;
border-radius: 5px;
//box-shadow: 0 10px 30px 0px rgba(0, 0, 0, 0.4);
box-shadow:18px 18px 15px 0px rgba(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;
background: #108414de;
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;
}
}

再到highlight.styl文件中引入新建的macPenal.styl

css
1
2
3
  @require "theme"
@require "diff"
+ @require "macPanel"

到此,不出意外,代码块样式应该已经出来了。
如果样式出来了,但代码未显示出来,那说明代码是被遮盖了,调一下样式就能出来了。

样式调试

经过上述一系列操作,macPenal效果成功出现但样式有些不对(不好看)。
修改/nextlayout/_third-party/copy-code.swig
内容为

css
1
2
3
4
5
6
7
8
9
.highlight-wrap .copy-btn {
transition: opacity .3s ease-in-out;
opacity: 0;
padding: 2px 6px;
position: absolute;
right: 5px;
- top: 8px;
+ top: -31px;
}

修改next/source/css/_common/component/highlight下的highlight.styl内容为

css
1
2
3
4
5
6
7
8
9
10
$code-block {
overflow: auto;
+ margin: 36px 0px 0px;
- margin: 36px 0px;
padding: 0;
font-size $code-font-size;
color: $highlight-foreground;
background: $highlight-background;
line-height: $line-height-code-block;
}

最后到主题的config.yml文件下修改highlight_theme为normal

highlight_theme: normal

本主题为:hexo next 6.4.2 mist 已换为Matery

文章作者: 小长弓
文章链接: http://www.52chang.wang/post/1648bd84.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 长弓不是弓长
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论