このチュートリアルでは、prism.js構文を統合する方法を示しています。ライン番号やラインハイライトを含むnext.jsブログに強調表示されます。高度な機能を得るために、 remark-prism
プラグインといくつかのカスタムCSS/JavaScriptを活用します。
Next.jsブログを構築するには、多くの場合、フォーマットされたコードスニペットが必要です。このガイドは、Prism.jsとremark-prism
プラグインを使用して、構文の強調表示、ライン番号、および個々の行の強調表示を実現する方法を示しています。いくつかの側面は予想よりも複雑ですが、このウォークスルーは解決策を提供します。
前提条件:
このチュートリアルでは、Next.JSブログのスターターを使用していますが、原則は他のフレームワークに適用されます。スターターとprism.jsをインストールします:
npm I省略
基本的なprism.js統合:
markdownToHtml
ファイル(通常/lib
にある)でremark-prism
有効にします。
「berem」から{areme}をインポートします。 "areme-html"からHTMLをインポートします。 「発言権」からのYERMPRISMをインポートします。 デフォルトのasync関数markdowntohtml(markdown)をエクスポートする{ const result = await arem() .use(html、{sanitize:false}) .use(aremprism、{プラグイン:["line-numbers"]}) .Process(MarkDown); return result.toString(); }
バージョンに応じて、 remark-html
使用法を調整する必要がある場合があります。 Prism CSSをpages/_app.js
にインポート:
「prismjs/themes/prism-tomorrow.css」をインポートします。 「prismjs/plugins/line-numbers/prism-line-numbers.css」をインポートします。 インポート "../styles/prism-overrides.css";
カスタムスタイリング用のprism-overrides.css
を作成します。
行番号の追加:
line-numbers
プラグインは含まれていますが、対応するCSSを含める必要remark-prism
あります。 prism-overrides.css
でこのような調整が必要になる場合があります。
.line-numbers span.line-numbers-rows { マージントップ:-1px; }
ハイライトライン:
PRISM.JS Line-Highlightプラグインは、静的なサイト生成の制限のため、顕著remark-prism
と直接互換性がありません。回避策は、CSSとJavaScriptを使用します。このCSSをprism-overrides.css
に追加します:
:根 { - ハイライトバックグラウンド:RGB(0 0 /0); - Highlight-Width:0; } .line-numbers span.line-numbers-rows> span { 位置:相対; } .line-numbers span.line-numbers-rows> span :: after { コンテンツ: " "; 背景:var( - ハイライトバックグラウンド); 幅:var( - highlight-width); 位置:絶対; 上:0; }
マークダウンにdata-line
属性を追加します<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"></pre><div class="contentsignin">ログイン後にコピー</div></div>
タグ(例、 [data-line="3,8-10"]
)。 components/post-body.tsx
で、JavaScriptを使用します(例として、構造に適応します):
"ruce"から{useefect、useref}をimport; // ... const rootref = useref(null); effect(()=> { // ...(見つけるコード<pre class="brush:php;toolbar:false"> データライン属性を使用して、要素とハイライト行)... }、[]); // ...(データライン属性に基づいてスタイルを適用するハイライトコード関数)...
これには、 data-line
属性を解析し、取得します<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> 要素の幅、およびCSSカスタムプロパティを動的に設定して、指定された行を強調表示します。</pre><div class="contentsignin">ログイン後にコピー</div></div>
行番号なしで強調表示する行:
ライン番号を表示せずにラインを強調表示するには、ハイライトを保持しながら行番号を非表示にするために.hide-numbers
クラスとCSSルールを追加します。
クリップボードへのコピー機能:
ボタンを追加してコードスニペットをコピーします。 components/post-body.tsx
で、それぞれにボタンを追加します<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> <code>navigator.clipboard.writeText</code>を使用する<code>createCopyButton</code>関数を使用する要素。 CSSを使用してボタンをスタイルします。</pre><div class="contentsignin">ログイン後にコピー</div></div>
この包括的なガイドは、prism.jsをNext.jsブログに統合し、強化されたコードプレゼンテーションを可能にするための堅牢なソリューションを提供します。コードスニペットを特定のプロジェクト構造に適合させることを忘れないでください。
以上が静的サイトでプリズムで強調表示(およびその他!)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。