首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

前端技巧:網頁代碼高亮顯示 — 打造像 CSDN、博客一樣的代碼片塊

     編輯:程式設計疑難解答

需求場景

在個人網站、技術博客或文檔頁面中嵌入程式碼,希望擁有:語法高亮、行號、複製按鈕、主題切換、語言自動檢測等專業 IDE 風格效果。

主流解決方案對比

方案特點適用場景
Prism.js輕量 (2KB gzip)、模組化、插件豐富、無依賴靜態站點、文檔、博客首選
Highlight.js自動檢測語言、190+ 語言、主題多、CDN 友好動態內容、Markdown 渲染管道
Shiki用 TextMate 語法、完美還原 VS Code 高亮、支援雙主題追求極致顯示效果、構建時編譯
CodeMirror / Monaco Editor編輯器級、支援編輯、補全、Lint在線 IDE、代碼編輯器嵌入

快速上手:Prism.js 範例

<!-- 1. 引入 CSS (選擇主題) -->
<link href="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />

<!-- 2. HTML 結構 -->
<pre class="line-numbers"><code class="language-javascript">// 你的代碼
function hello() {
  console.log('Hello, World!');
}
</code></pre>

<!-- 3. 引入核心 JS + 常用插件 -->
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-core.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/toolbar/prism-toolbar.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>

進階:Markdown 渲染管道整合

若使用 marked 或 markdown-it 渲染 Markdown,配合高亮庫:

// marked + Prism.js
const marked = require('marked');
const Prism = require('prismjs');
const loadLanguages = require('prismjs/components/');
loadLanguages(['javascript', 'python', 'java', 'cpp']);

marked.setOptions({
  highlight: (code, lang) => {
    if (Prism.languages[lang]) {
      return Prism.highlight(code, Prism.languages[lang], lang);
    }
    return code; // 無對應語言直接返回
  }
});

常見問題與優化

  • 按需加載語言:使用 prism-autoloader 或 Shiki 的 getHighlighter 按需編譯,減小體積。
  • 行號與複製:Prism 插件 line-numbers + copy-to-clipboard 一鍵搞定。
  • 深色/淺色模式:CSS 變量切換主題,或用 Shiki 雙主題輸出。
  • XSS 防護:渲染前對代碼進行 HTML 轉義(Prism/Highlight.js 內建)。
推薦:個人博客用 Prism.js + Autoloader 最省心;文檔站/靜態生成器 (VitePress, Next.js) 直接用 Shiki 構建時編譯,零運行時開銷、效果最像 VS Code。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved