13.

HTML code要素の使い方|preとの組み合わせ・kbd/samp/varとの違い

編集
この記事の要点
  • code 要素プログラムコードの断片を表すインライン要素
  • デフォルトでは等幅フォント (monospace) で表示 (ブラウザの UA スタイル)
  • 複数行のコードブロックは <pre><code>...</code></pre> の組み合わせが定番
  • < > &HTML エンティティに変換 (< など) しないと表示できない
  • 関連: kbd (キー入力) / samp (プログラム出力) / var (変数) — 用途で使い分け

code 要素とは

<code> 要素は HTML でプログラムコードの断片を表すインライン要素です。「コードである」というセマンティクスを与えるだけで、見た目だけが目的なら <span> でも済みますが、意味付け (semantics) をしておくとスクリーンリーダーや検索エンジン、シンタックスハイライト ライブラリが正しく解釈してくれます。

基本構文

配列の長さは arr.length で取得できます。

関数 strlen() は文字数を返します。

HTML タグ <p> は段落を表します。

ブラウザのデフォルトスタイルで等幅フォントのインライン表示になります。

複数行のコード — pre と組み合わせる

code 要素単体はインラインで空白や改行が圧縮されるため、複数行のコードを書くときは <pre> でラップするのが定番です。

<pre><code class="language-js">function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Alice"));
</code></pre>

class="language-xxx"highlight.jsPrism.js といったシンタックスハイライト ライブラリの慣習で、HTML5 仕様でも推奨の書き方です。

HTML 特殊文字のエスケープ

code 要素の中でも HTML パーサーは動作するため、< > & はそのまま書くとタグや実体として解釈されてしまいます。HTML エンティティに変換が必要です。

文字エンティティ
<<
>>
&&amp;
"&quot;
'&#39;

CSS でのスタイリング

code {
    font-family: "JetBrains Mono", Consolas, Menlo, monospace;
    font-size: 0.95em;
    padding: 0.15em 0.4em;
    background: #f4f4f5;
    color: #d63384;
    border-radius: 4px;
}

pre code {
    /* pre 内では背景や余白をリセット */
    background: transparent;
    padding: 0;
    color: inherit;
    font-size: 1em;
}

pre {
    background: #1e293b;
    color: #e2e8f0;
    padding: 1em;
    border-radius: 6px;
    overflow-x: auto;
    line-height: 1.5;
}

似た要素との使い分け

要素意味
<code>プログラムコードarr.length
<kbd>ユーザーのキー入力Ctrl + C
<samp>プログラムの出力Permission denied
<var>変数名 / 数式の変数x
<pre>改行・空白を保持する整形済みテキスト複数行コード

組み合わせ例

<p>関数 <code>greet(<var>name</var>)</code> を呼び出すと <samp>Hello, Alice!</samp> と表示されます。</p>

<p>キャンセルするには <kbd>Ctrl</kbd>+<kbd>C</kbd> を押します。</p>

アクセシビリティ

  • code 要素はセマンティクスを伝えるため、見た目だけ目的でも span より優れる
  • スクリーンリーダーによっては「コード」と読み上げてくれる
  • 長いコード片は aria-labelfigure + figcaption でラベル付けすると親切
  • 横スクロールが必要なコードブロックは overflow-x: auto + キーボードフォーカス可能にする

Markdown との関係

Markdown のバッククォート記法 `code` は HTML に変換されるときそのまま <code> 要素になります。フェンスドコードブロック ```js ... ```<pre><code class="language-js"> に展開されるのが一般的です。

インライン: `arr.length`

```javascript
function greet(name) {
    return `Hello, ${name}!`;
}
```

SEO とセマンティクス

  • 検索エンジンは <code> 要素のテキストをコード片として認識する
  • 技術記事では関数名・API 名を <code> で囲むと検索ヒット率が向上しやすい
  • 記事内のキーワード密度を意図的に増やしたい関数名・クラス名は <code> で明示
  • schema.org の SoftwareSourceCode と組み合わせると構造化データとしても扱える

よくある実装ミス

ミス対処
< をそのまま書いて HTML 崩壊< にエスケープ
<pre> 無しで改行が消える<pre><code> の入れ子に
長すぎる行で横はみ出し親の preoverflow-x: auto
等幅にならないCSS でフォント未指定。UA スタイル依存は危険
コピーしづらいクリップボードコピーボタンを JS で追加

ハイライト ライブラリの主な選択肢

ライブラリ特徴
highlight.js自動言語検出。シンプルで導入が早い
Prism.js軽量・プラグイン豊富。React/Vue との相性が良い
ShikiVS Code と同じテーマ。サーバー側で事前ハイライト推奨
CodeMirror / Monaco編集可能なエディタ向け (ハイライト単体目的ではオーバースペック)

FAQ

Q: <code><tt> の違い
A: <tt> は HTML5 で廃止。等幅表示は CSS の font-family: monospace で行い、意味は <code> など適切な要素を使います。

Q: 改行を保持したい
A: <code> 単体ではダメ。<pre><code>...</code></pre> でラップするか、CSS で white-space: pre を当てます。

Q: シンタックスハイライト ライブラリは何を使うべき?
A: SSR 環境では highlight.js / Prism.js / Shiki が定番。Shiki は VS Code 同等のテーマ品質。

Q: コピーボタンを付けたい
A: navigator.clipboard.writeText() で実装できます。pre 要素内に絶対配置でボタンを置くのが定番 UI。

Q: 言語クラスは必須?
A: 必須ではありませんが、シンタックスハイライトスクリーンリーダーへのヒントになります。class="language-XXX" は HTML5 仕様で推奨。

関連

  • pre 要素 — 整形済みテキストブロック
  • kbd 要素 — キーボード入力
  • samp 要素 — プログラムの出力
  • var 要素 — 変数名・数式の変数
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. h1~h6要素
  2. p要素
  3. blockquote要素
  4. q要素
  5. cite要素
  6. ins要素
  7. del要素
  8. HTML em 要素(強調)の使い方と strong との違い
  9. br要素
  10. abbr要素
  11. dfn要素
  12. pre要素で整形済みテキストを表示する
  13. code要素
  14. samp要素
  15. kbd要素
  16. var要素
  17. bdo要素
  18. sup要素で上付き文字を表示する
  19. sub要素
  20. mark要素
  21. data要素
  22. time要素
  23. wbr要素
  24. bdi要素

最近更新/作成されたページ