Web・インターネットの用語一覧へ
このページの目次
Web・インターネット初級図解あり

classList.toggleとは?

読み方:classlist.toggle

最終更新:2026/08/18

3秒でわかる

要素の class を「あれば外す、なければ付ける」と一行で反転させる DOMAPI。メニュー開閉やダークモード切替を、状態を自分で持たずに書ける。

30秒図解

classList.toggle(open)はクリックごとにnavのopen classを付け外し、戻り値でaria-expandedをtrueかfalseへ更新する
classList.toggleはクラスの有無を反転し、付与後ならtrue、削除後ならfalseを返します。その値をaria-expandedの更新にも使えます。

もう少し詳しく

どういうものか

DOM 要素が持つ classList の中のメソッドで、指定した class 名が付いていれば外し、付いていなければ足します。今の状態を自分で調べる必要がなく、押すたびに反転する動きが一行で書けます。

戻り値は実行後にその class が付いているかどうかの真偽値です。開いた状態かどうかをそのまま受け取れるので、aria-expanded の更新などに使い回せます。第 2 引数に真偽値を渡すと反転をやめ、真なら必ず付ける、偽なら必ず外す動きに変わります。

なぜ必要か

見た目の切り替えを CSS 側に寄せられるからです。JavaScript から style.display を直に書き換えると、色や余白やアニメーションの指定がスクリプトの中に散らばります。class を一つ付け外しするだけにしておけば、どう見えるかは CSS ファイルの中で完結し、変更もそこだけで済みます。

if で分岐して addremove を呼び分ける書き方に比べ、状態の取り違えが起きにくいのも利点です。現在値を読んでから書くコードは、条件を書き間違えると二度押しで元に戻らなくなります。

具体例

const btn = document.querySelector("#menu-btn"); const nav = document.querySelector("#nav"); // 押すたびに開閉が反転する btn.addEventListener("click", () => { const isOpen = nav.<a href="/glossary/classlist" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">classList</a>.toggle("open"); btn.setAttribute("aria-expanded", String(isOpen)); }); // 第 2 引数を渡すと反転しない。真なら必ず付き、偽なら必ず外れる const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; document.documentElement.classList.toggle("dark", prefersDark); // 付け外し以外のメソッド nav.classList.add("open", "animated"); nav.classList.remove("animated"); console.log(nav.classList.contains("open"));

CSS 側は class が付いたときの見た目だけを書きます。

#nav { transform: translateX(-100%); transition: transform .2s; } #nav.open { transform: translateX(0); }

つまずきやすいところ

  • 複数の class をまとめて反転させようとして toggle("open", "animated") と書く。第 2 引数は強制指定なので、"animated" は真として扱われ、常に付いたままになります。複数あるなら一つずつ呼びます

  • 第 2 引数に数値や文字列を渡す。空文字や 0 は偽になるため、意図と逆の結果になります。真偽値へ直してから渡します

  • class 名の先頭にドットを付けて toggle(".open") と書く。セレクタではなく class 名そのものを渡します

  • React や Vue の中で直接呼ぶ。仮想 DOM が把握していない変更なので、再描画で消えたり戻ったりします。フレームワーク側では状態を持って className に反映させます
  • 似た用語との違い

    書き方動き
    classList.toggle(name)今の状態を見て反転する
    classList.toggle(name, cond)状態を見ずに cond で上書きする
    classList.add / remove常に付ける、常に外す
    className = "..."class 属性を丸ごと置き換える。他の class が消える

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地classList.toggleWeb

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    この用語を扱うコース

    コース

    JavaScript入門:コードを動かす

    23レッスン
    コース

    モダンJavaScript:データ処理とコード設計

    36レッスン
    コース

    JavaScript道場 ハレノヒ珈琲を動かす10問

    10レッスン
    JavaScriptコースの全編を見る