百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Highlight.js - 前端的代码语法高亮库

myzbx 2025-01-12 16:51 22 浏览

千辛万苦写了篇技术分享,贴了一堆代码,兴高采烈地发到了自己的博客网站上。结果却发现代码全是白底黑字,字体还难看得很,你瞬间就没了兴致。能不能让网页也能像 IDE 那样,做带语法高亮的炫酷显示呢?来看一看 Highlight.js 吧,看这个语法高亮库如何点亮你的代码。

简介

Highlight.js,是在 Github 上由 highlight.js 组织开源的前端代码语法高亮库,代码仓库在 https://github.com/highlightjs/highlight.js,目前版本为 10.1.0。其不依赖于任何框架,自带对于大量编程语言和标记语言的语法高亮规则,和主流的高亮色彩方案,且可以自由扩展。其支持自动语言检测,使用极为方便,是在网页上进行语法高亮的不二之选。

安装

Highlight.js 的 CSS 文件的选择决定高亮配色方案,默认为 Default,另外还有如 Monokai Sublime、Ocean、Solarized Dark、Tomorrow 等经典的主流配色方案。

而 JS 文件的选择决定可以支持的语言。主要的 highlight.min.js 包含了一些主流的语言,包括 C++、XML、Markdown、Java 等。如果需要一些其他的语言,则要另外引用该语言对应JS文件。

Highlight.js 在浏览器中可以简单的引用 CDN 来使用:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/styles/default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/highlight.min.js"></script>

示例

Highlight.js 使用十分简单,在引用了 CSS 和 JS 后,执行

hljs.initHighlightingOnLoad();

Highlight.js就会自动查找网页中以标签 pre 和 code 所包裹的代码

<pre><code>...</code></pre>

并自动检测代码语言,进行高亮渲染。我们也可以为 code 标签添加语言名称的 class,来显式地标明代码语言。我们可以看一个使用示例,注意实际代码中尖括号等 HTML 转义字符需要进行转义处理:

<html>
<head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/styles/monokai-sublime.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.0/highlight.min.js"></script>
</head>
<body>
  <pre><code class="cpp">#include <iostream>

int main(int argc, char *argv[]) {

    /* An annoying "Hello World" example */
    for (auto i = 0; i < 0xFFFF; i++)
        cout << "Hello, World!" << endl;

    char c = '\n';
    unordered_map <string, vector<string> > m;
    m["key"] = "\\\\"; // this is an error

    return -2e3 + 12l;
}
  </code></pre>
  <script>
    hljs.initHighlightingOnLoad();
  </script>
</body>
</html>

该网页对于 C++ 语言片段使用了 Monokai Sublime 主题进行了语法高亮渲染:

可以看到,包括关键字、注释和字面值等都有了不同颜色的渲染,输出十分美观。以下则是使 Dracula 主题对 Javascript 代码渲染的例子:

我们也可以不使用 pre 和 code 标签来包裹代码,改为使用自定义的容器,使用时需要注意换行和等宽字体的问题。

document.querySelectorAll('div.code').forEach((block) => {
  hljs.highlightBlock(block);
});

在渲染大量代码时,为避免浏览器卡死,可以使用 Web Worker 来在后台进行渲染:

// index.html
addEventListener('load', () => {
  const code = document.querySelector('#code');
  const worker = new Worker('worker.js');    // 新建Worker
  worker.onmessage = (event) => { code.innerHTML = event.data; }    // 接受渲染后的HTML
  worker.postMessage(code.textContent);    // 传递代码
});
// worker.js
onmessage = (event) => {
  importScripts('<path>/highlight.min.js');
  const result = self.hljs.highlightAuto(event.data);    // 高亮渲染
  postMessage(result.value);    // 返回HTML
};

总结

Highlight.js 使得在前端页面进行语法高亮变得十分方便,为在网页显示的代码增添了颜色和生机。

Highlight.js 文档详尽,设计简洁,为编写新的语言支持和配色方案提供了很大支持,定制化能力和可扩展性极强。Highlight.js 的代码包含了对于各种语言的语法解析,和不同配色方案的设计,对于对编程语言和语法高亮领域感兴趣的开发者是一座珍贵的宝库。

相关推荐

IT之家学院:如何修改Win10 Edge浏览器下载路径?

IT之家讯目前Win10Edge浏览器的默认下载路径不可修改,只能是系统“下载”文件夹,虽然用户可以通过移动该文件夹位置来间接达到修改目的,但Edge浏览器本身却无法修改。不过我们可以通过修改注册表...

Win 10自带Edge浏览器史上最强,好内核配了滥界面

微软在Win10上为我们带来了全新的Edge浏览器,而跌落神坛的IE正式被微软抛弃!随着Win10周年版更新的到来,Edge浏览器也带来了很多全新的特性,功能也更加完善!这让微软信心大增,微软甚...

Win10全新浏览器Microsoft Edge图标:致敬IE

IT之家讯今天早些时候,微软宣布了斯巴达(Spartan)浏览器项目的官方命名,微软在Windows10上集成的新浏览器的内核名为Edge,所以大家一定猜到了,它被命名为MicrosoftEdge...

Edge 84稳定版发布:优化集锦 默认禁用TLS 1.0/1.1

时隔6周时间,Edge浏览器的最新稳定版v84.0.522.40正式发布。新版本为IE模式改善了站点列表下载时间,在“以管理员身份运行”运行时允许用户登录浏览器等等。下载地址:https...

真相:Win10微软Edge和IE11浏览器图标相似的原因

IT之家讯5月7日消息,微软在Build2015大会上公布了Win10斯巴达浏览器的正式名称“MicrosoftEdge”以及正式图标,蓝色的“e”。这款新浏览器的图标让各位Windows老用户...

微软 Win11,20 多年来首个没有 IE 浏览器的 Windows 版本

IT之家6月26日消息在Windows10的生命周期中,你可能已经安装了IE浏览器、微软Edge的经典版本,以及新的Chromium驱动的Edge浏览器。这三个浏览器完...

微软宣布2022年6月15日停止支持IE浏览器:已推出25年

5月20日消息,在推出25年之后,微软最终决定于明年停止对IE浏览器的支持。多年来,这款网络浏览器基本上没有太多消费者使用,为此微软定于2022年6月15日完全停止对其支持,转...

我采访了一位 Pornhub 工程师,聊了这些纯纯的话题

成人网站在推动Web发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用WebSocket推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在Web技术创...

如何在 Microsoft Edge 中使用IE浏览器

随着微软Windows10,Windows11的推出,IE浏览器逐渐被抛弃,可是国内一些银行和政府网站还必须使用IE才能访问,下面我来解决这个问题。首先在MicrosoftEdge中启用IE模式...

IE浏览器无法加载网站时将自动跳转到Edge中打开

来源:cnBeta.COM目前微软已经将开发重心放在基于Chromium的新版Edge浏览器上,而传统的InternetExplorer则逐渐被淘汰。也就是说,如果你当前使用的是IE...

告诉你手机信号栏中E、H、T都是什么意思!

手机信号经常会出现E啊,H啊,T啊……之类的字母,每次出现的时候小编都会自动关机,觉得手机坏掉了……ORZ……那么这些字母具体表示些什么意思呢?如果是G,那么代表的是GPRS,指2.5G网络,此时网速...

比Chrome更适合国人用 Chromium版Edge横空出世

编辑微软终于正式发布Chromium内核的Edge浏览器了。这意味着微软放弃了自研浏览器内核,Windows自带浏览器也成为了Chrome的马甲。关于微软为什么要这么做,笔者曾经撰文分析,大家可以点...

Microsoft 新浏览器 Edge 将不再支持 ActiveX、VBScript 技术

Microsoft继宣布将推出将取代IE的全新浏览器Edge后,日前又再宣布Edge不会支持沿用以久的ActiveX、VBScript与BrowerHelperObjects(...

隐藏功能超炫酷 新版Edge浏览器还能这么玩

基于Chromium的新版Edge浏览器已经开放测试,但由于是测试期,可供用户选择的功能还比较少。不过有一部分功能已经内置到浏览器中,只是尚未开放而已。这就像汽车里的刷EPU一样,没事自己玩一玩,也是...

微软推出的新版Edge浏览器,让我抛弃用了5年的谷歌

随着新版Edge浏览器的发布,这个微软的亲儿子以崭新的面貌和大家见面啦。这次更新可谓是好评如潮,相比浏览器届的老大哥——谷歌浏览器,它少了些臃肿,但又多了一些独特的功能。今天,我就为大家介绍8...