vue结合highlightjs实现代码高亮+行号
实现代码高亮+行号设置1、下载 highlightjs:npm install highlight.js`2、在main.ts中写import hljs from 'highlight.jsimport 'highlight.js/styles/stom-one-dark.css// 自定义指令app.directive('highlight', function (el) {const bloc
·
实现代码高亮+行号设置
1、下载 highlightjs:
npm install highlight.js`
2、在main.ts中写
import hljs from 'highlight.js
import 'highlight.js/styles/stom-one-dark.css
// 自定义指令
app.directive('highlight', function (el) {
const blocks = el.querySelectorAll('pre code');
blocks.forEach((block) => {
hljs.highlightBlock(block);
// 从这开始是设置行号
block.innerHTML = `<ol><li>${block.innerHTML.replace(
/\n/g,
`</li><li class="line">`
)}</li></ol>`;
});
});
app.use(hljs.vuePlugin)
解释:
- 如果不想要行号,只要高亮,那么把innerHTML的代码删掉即可
- import …css 的代码,是高亮的样式
官网有很多:https://highlightjs.org
3、调用
<pre v-highlight>
<code class="language-html hljs">{{code}}</code>
</pre>
const code = ref(`
<p class="ave-base-text ave-base-mb-16">
a) The Respondent must not enter or remain or take part in any gaming on
any casino premises; If the Respondent enters or attempts to enter the
casino, casino staff may use reasonable force to remove the Respondent
or prevent the Respondent from entering.
</p>
`);
解释:
- v-highlight 是自定义指令,v- 后面的与在main.ts中写的 directive 中的 highlight 要保持一致
- 想要高亮的代码 必须包含在code标签中
- class类名是高亮显示的代码类型,不同类型有不同的高亮显示配色 同样参照官网即可
- class 中的 hljs 是关于行号的类名,自定义的,可以取任何名字
4、关于行号
因为行号在main.js生成的时候 是用ol>li 写成的,所以需要对样式进行改造
pre {
position: relative;
min-width: 600px;
margin: 0;
}
.hljs {
display: block;
width: 100%;
margin: 0;
padding: 1px;
color: #abb2bf;
font-weight: 200;
font-size: 0.75rem;
font-family: Menlo, Monaco, Consolas, Courier, monospace;
line-height: 1.5;
white-space: pre-wrap;
border: 0;
}
.hljs ol {
margin: 0 0 0 35px;
padding: 0;
list-style-type: decimal;
}
.hljs ol li {
// padding: 5px;
// padding-left: 10px;
color: #abb2bf;
white-space: pre;
// list-style: decimal-leading-zero;
list-style-position: outside;
border-left: 1px solid #c5c5c5;
}
5、最终形成的样式如下:
更多推荐
已为社区贡献3条内容
所有评论(0)