ウェブ制作

サイト制作のちょっとしたティップスまとめ

当サイトのリンクには広告が含まれています。

【多言語サイト】CSSの:lang()で言語別にスタイルを切り替える方法

CSSの:lang()擬似クラスの使い方。HTMLのlang属性に応じて自動で言語別にCSSを切り替える方法を解説。専用CSSファイルの追加や、PHP等で読み込み条件の分岐を増やさずに済みます。

ウェブ制作

公開日:2026/06/19

多言語サイトを構築する際、言語ごとにフォントや文字間、行間などを微調整したい場面があります。

そんなときに便利なのが、CSSの:lang()擬似クラスです。

:lang()とは

:lang()は、HTML要素の言語情報をもとに、特定の言語にだけスタイルを適用できるCSSの擬似クラスです。

たとえば、英語のテキストだけに英字向けのフォントを指定したい場合は、次のように書きます。

:lang(en) {
	font-family: "Times New Roman", serif;
	line-height: 1.6;
}
<p lang="en">English.</p>

この場合、lang="en"が指定された要素に対して、Times New Romanとline-height: 1.6が適用されます。

この仕組みを活用し、HTMLファイル冒頭のlang(言語)設定から、ページ全体のCSSを一括で調整することができます。

ページ全体の言語に応じてCSSを切り替える

例えば、英語ページの場合、HTMLの言語コードは以下のように設定しますが…。

<html dir="ltr" lang="en">

このlang="en"を利用し、英語ページ全体のフォントや行間を調整できます。

body {
  font-family: "Noto Serif JP", sans-serif;
  line-height: 2;
}

html:lang(en) body {
  font-family: "Times New Roman", serif;
  line-height: 1.6;
}

この場合、<html lang="en">のページでは、bodyに英語向けのフォントと行間が上書きされます。

CSSのネストを使ってまとめて書く

さらに、CSSのネストを使えば、html:lang(en)配下の全要素や、classidに対する指定をまとめて書くこともできます。

html:lang(en) {
  & body {
    font-family: "Times New Roman", serif;
    line-height: 1.6;
  }

  & h1 {
    ~
  }

  .class {
    ~
  }

  #id {
    ~
  }
}

関連記事はこちら

CSSのネストは当面の間、&記号(入れセレクター)を付けた方が安心か

CSSのネスト(入れ子)は、当面の間は「&記号」を付けた方が安心か

CSSのネスト(入れ子)で記述したスタイルが、iPhoneだと全く効かない事態に遭遇。結論から言うと、iOSのバージョンによっては「& 入れ子セレクター」の記述が未だに必要であり、それが無視出来ないシェア率で残っていました。詳しく解説します。

互換性のため、プレーンな要素には&記号を忘れずに

HTML lang属性で使う主な言語コード

多言語サイトでよく使う、lang属性の一例です。

日本語ja
英語en
中国語(簡体字)zh-Hans
中国語(繁体字)zh-Hant
韓国語ko
タイ語th

html:lang(en)と同様、他の言語も同じようにCSSで設定が可能です。

:lang(en) {
	font-family: "Times New Roman", serif;
	line-height: 1.6;
}

:lang(ko) {
	font-family: "Noto Serif KR", serif;
	line-height: 2;
}

この他にも様々な言語コードがあります。

参考

HTML[言語コード]主な言語コードの一覧 – TAG index
https://www.tagindex.com/html/basic/langcode.html

ちなみに現場でよくある間違いですが、日本語はjpではなくja、韓国語はkrではなくkoです。

また、:lang(en)は、lang="en"だけでなく、lang="en-US"lang="en-GB"のような地域指定にも一致します。

そのため、英語全般に適用したい場合は:lang(en)、特定の地域まで分けたい場合は:lang(en-US)のように使い分けると良いです。zhコードの中国語も同様です。:lang(zh)指定で、簡体字、繁体字どちらにも適用できます。

まとめ

以上、「CSSの:lang()で言語別にスタイルを切り替える方法」でした。

言語ごとのデザイン差分が大きい場合は専用CSSを分ける方法も有効ですが、軽微な調整であれば:lang()を活用するとシンプルに管理できます。

:lang()を使えば、HTMLのlang属性をもとにスタイルを自動で切り替えられるため、専用CSSファイルの追加や、PHP等で読み込み条件の分岐を増やさずに済みます。また、ページ全体だけでなく、文章中の一部だけ英語・中国語といったケースにも対応しやすいのがメリットです。

ご参考までに。

上に戻る