国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド CSSチュートリアル HTML Web コンポーネントのダーク モードの切り替え

HTML Web コンポーネントのダーク モードの切り替え

Oct 23, 2024 am 06:14 AM

デジタルガーデンをデザインするとき、かわいいダークモードトグルが欲しいと思っていました。 SVG を描畫したら、React のダーク モード切り替えとすべて同じ機能を持つ Web コンポーネントの構(gòu)築を開始しました。これには、サイトのアクセシビリティ監(jiān)査中に學(xué)んだすべてのことが含まれます。

テーマの変更に加えて、トグルではユーザーの好みの配色の選択を考慮し、リロード後もユーザーの好みを維持する必要があります。アクセシビリティを確保するには、トグルのスクリーン リーダーのアナウンスが意味をなすものでなければなりません (例: 「ダーク モード トグル オン」)。テキスト付きのチェックボックスの代わりに SVG を表示したいので、フォーカスとホバーのスタイル、およびホバー時に表示されるラベルを追加する必要があります。

Web コンポーネントの切り替え

まず、HTML 要素を作成する Toggle クラスが必要です。カスタム要素 API を使用して、 を定義します。このクラスを使用します。

クラスのコンストラクターを使用して、 の innerHTML を設(shè)定します。 に; を使用します。 SVG を子として使用します。ラベルには title 屬性があり、ユーザーがその上にカーソルを置くと、トグルに「ダーク モード トグル」ラベルが表示されるか、 が表示されます。チェックボックスは

Dark Mode Toggle in HTML Web Components

HTML を配置したら、connectedCallback 関數(shù)をクラスに追加します。カスタム要素 API のこの部分は、コンポーネント內(nèi)で使用する関數(shù)を定義し、コンポーネントが DOM に挿入されるときにコードを?qū)g行します。

// /components/toggle.js

class Toggle extends HTMLElement {
  constructor() {
    super();
    this.innerHTML = `
      <label title="dark mode toggle">
        <input type="checkbox" id="theme-toggle" class="theme-switch" />
        <svg id="daisy">{SVG code removed for brevity}</svg>
      </label>
    `
    this.setAttribute("class", "toggle-component");
  }

  connectedCallback() {
    function switchTheme(e) {
      if (e.target.checked) {
        setTheme('dark');
        return;
      }

      setTheme('light');   
    };

    function setTheme(themeName) {
      localStorage.setItem('theme', themeName);
      document.documentElement.setAttribute('data-theme', themeName);
    };

    function setCheckBox(toggleSwitch, theme) {
      toggleSwitch.checked = theme === 'dark' ? true : false;
    }

    function keepTheme() {
      const toggleSwitch = document.querySelector('#theme-toggle');
      toggleSwitch.addEventListener('change', switchTheme, false);
      const theme = localStorage.getItem('theme');
      if (theme) {
        setTheme(theme);
        setCheckBox(toggleSwitch, theme);
        return;
      };

      const prefersLightTheme = window.matchMedia('(prefers-color-scheme: light)');
      if (prefersLightTheme.matches) {
        setTheme('light');
        return;
      };

      setTheme('dark');
      setCheckBox(toggleSwitch, 'dark');
    };

    document.addEventListener("DOMContentLoaded", keepTheme);    
  }
}

customElements.define("toggle-component", Toggle);

なぜなら、ページが読み込まれる前に DOM に挿入されると、すぐに実行される唯一のコードがイベント リスナーを追加します。イベント リスナーは、ページが読み込まれるとすぐに keepTheme を呼び出します。まず、keepTheme は にイベント リスナーを追加します。ユーザーが操作するときに switchTheme を呼び出します。 switchTheme は、チェックボックスがチェックされている場合は 'dark' を setTheme に渡し、チェックボックスがチェックされていない場合は 'light' を渡します。 setTheme に渡された文字列は CSS テーマとして設(shè)定され、リロード後も保持される localStorage に保存されます。

keepTheme の殘りの部分は、読み込み時に適切なテーマを選択することに専念しています。まず、localStorage をチェックして、ユーザーの設(shè)定がすでに設(shè)定されているかどうかを確認(rèn)します。次に、prefers-color-scheme が「light」に設(shè)定されているかどうかを確認(rèn)します。最後に、デフォルトではダークモードになります。ダーク モードとライト モードの両方で、setTheme を呼び出します。ダークモードの場合は、setCheckbox も呼び出します。チェックボックスはチェックされていない狀態(tài)でマウントされます。スクリーン リーダーが「ダーク モード」とチェックボックスがチェックされているかどうかを読み上げます。 「ダーク モードの切り替えがチェックされました」または「ダーク モードの切り替えがオンです」などのアナウンスを取得するには、ロード時にテーマを「ダーク」に設(shè)定するときにプログラムでチェックボックスをオンにする必要があります。

Dark Mode Toggle in HTML Web Components

Dark Mode Toggle in HTML Web Components

スタイルの切り替え

SVG コードを Web コンポーネントに直接配置し、プログラムで塗りつぶしの色を変更できるように、かなりシンプルなデザインを描畫することにしました。こうすることで、デイジーの背景色は常にテーマと一致します。次に、不透明度: 0; を使用します。チェックボックスを非表示にし、畫像の中央に配置します。最後に、ホバー スタイルとフォーカス スタイルを追加します。

Dark Mode Toggle in HTML Web Components

// /components/toggle.js

class Toggle extends HTMLElement {
  constructor() {
    super();
    this.innerHTML = `
      <label title="dark mode toggle">
        <input type="checkbox" id="theme-toggle" class="theme-switch" />
        <svg id="daisy">{SVG code removed for brevity}</svg>
      </label>
    `
    this.setAttribute("class", "toggle-component");
  }

  connectedCallback() {
    function switchTheme(e) {
      if (e.target.checked) {
        setTheme('dark');
        return;
      }

      setTheme('light');   
    };

    function setTheme(themeName) {
      localStorage.setItem('theme', themeName);
      document.documentElement.setAttribute('data-theme', themeName);
    };

    function setCheckBox(toggleSwitch, theme) {
      toggleSwitch.checked = theme === 'dark' ? true : false;
    }

    function keepTheme() {
      const toggleSwitch = document.querySelector('#theme-toggle');
      toggleSwitch.addEventListener('change', switchTheme, false);
      const theme = localStorage.getItem('theme');
      if (theme) {
        setTheme(theme);
        setCheckBox(toggleSwitch, theme);
        return;
      };

      const prefersLightTheme = window.matchMedia('(prefers-color-scheme: light)');
      if (prefersLightTheme.matches) {
        setTheme('light');
        return;
      };

      setTheme('dark');
      setCheckBox(toggleSwitch, 'dark');
    };

    document.addEventListener("DOMContentLoaded", keepTheme);    
  }
}

customElements.define("toggle-component", Toggle);

Toggle Web コンポーネントの使用

必要なのは、スタイルシートとコンポーネント スクリプトを にインポートすることだけです。 HTML ページの。次に、 を呼び出すことができます。ページ內(nèi)のどこでも。

/* /styles/styles.css */

[data-theme="light"] {
  --toggle-background: #242D54;
}

[data-theme="dark"] {
  --toggle-background: #282e53;
}

#daisy path {
  fill: var(--toggle-background);
}

.theme-switch {
  position: relative;
  bottom: 30px;
  left: 55px;
  width: 1em;
  height: 1em;
  opacity: 0;
}

.theme-switch:focus + #daisy path,
.theme-switch:hover + #daisy path {
  fill: white;
}

.theme-switch:focus + #daisy {
  outline: 3px solid white;
  outline-offset: 5px;
}

Dark Mode Toggle in HTML Web Components

Dark Mode Toggle in HTML Web Components

結(jié)論

ダーク モードの切り替えを Web コンポーネントでも React と同じように機能させるのは楽しかったです。これは私のデジタル ガーデンでライブで見ることができ、完全なコードは GitHub リポジトリで見ることができます。

以上がHTML Web コンポーネントのダーク モードの切り替えの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

一部のページにのみCSSを含めるにはどうすればよいですか? 一部のページにのみCSSを含めるにはどうすればよいですか? Jun 11, 2025 am 12:01 AM

特定のページにCSSを選択的に含める方法は3つあります。1。インラインCSS。頻繁にアクセスされない、または一意のスタイルが必要なページに適しています。 2。柔軟性が必要な狀況に適したJavaScript條件を使用して、外部CSSファイルをロードします。 3。サーバー側(cè)に封じ込められ、サーバー側(cè)の言語を使用したシナリオに適しています。このアプローチは、ウェブサイトのパフォーマンスと保守性を最適化できますが、モジュール性とパフォーマンスのバランスが必要です。

Flexbox vsグリッド:CSSレイアウトの重要な違いを理解する Flexbox vsグリッド:CSSレイアウトの重要な違いを理解する Jun 10, 2025 am 12:03 AM

flexBoxisidealforone-dimensionAllayouts、whilegridsuitStwo-dimension、complexLayouts.useflexboxforAliingemsinasinginasindgridgridgridgridgridgridgridgrololoveroversandcolumnsintigns。

HTMLポップオーバーを使用して自動閉鎖通知を作成します HTMLポップオーバーを使用して自動閉鎖通知を作成します Jun 10, 2025 am 09:45 AM

HTMLポップオーバー屬性は、要素をボタンまたはJavaScriptで開閉できるトップレイヤー要素に変換します。ポップオーバーは多くの方法で卻下することができますが、それらを自動するオプションはありません。 Preethiにはあなたができるテクニックがあります

「レンダリングブロッキングCSS」とは何ですか? 「レンダリングブロッキングCSS」とは何ですか? Jun 24, 2025 am 12:42 AM

ブラウザは、特にインポートされたスタイルシート、ヘッダーのインラインCSS、および最適化されていないメディアクエリスタイルを使用して、ブラウザがインラインおよび外部CSSをデフォルトで主要なリソースとして表示するため、ページレンダリングをブロックします。 1.重要なCSSを抽出し、HTMLに埋め込みます。 2。JavaScriptを介して非クリティカルなCSSの読み込みを遅らせる。 3.メディア屬性を使用して、印刷スタイルなどのロードを最適化します。 4.リクエストを減らすためにCSSを圧縮およびマージします。ツールを使用してキーCSSを抽出し、REL = "Preload"非同期負(fù)荷を組み合わせ、過度の分割と複雑なスクリプト制御を避けるためにメディア遅延荷重を合理的に使用することをお勧めします。

Figmaでロットを使用する方法 Figmaでロットを使用する方法 Jun 14, 2025 am 10:17 AM

次のチュートリアルでは、FigmaでLottieアニメーションを作成する方法を紹介します。 2つのカラフルなデザインを使用して、Figmaでアニメーション化する方法を説明し、FigmaからLottie Animationsに移行する方法を示します。必要なのは無料の図だけです

境界の破壊:(s)CSSでタングラムパズルを構(gòu)築します 境界の破壊:(s)CSSでタングラムパズルを構(gòu)築します Jun 13, 2025 am 11:33 AM

少なくとも低レベルのロジックとパズルの動作に関しては、SASSがJavaScriptを置き換えることができることが判明しました。マップ、ミックス、機能、そしてたくさんの數(shù)學(xué)だけで、私たちはタングラムのパズルを生き生きとさせることができました。

外部対內(nèi)部CSS:最良のアプローチは何ですか? 外部対內(nèi)部CSS:最良のアプローチは何ですか? Jun 20, 2025 am 12:45 AM

TheBestAppRoachforCSDependsonTheProject'sSpecificNeeds.forLargerProjects、externalCssissisbetterduetoMaintainasiladability; forsmallerProjectsOrsingLe-PageApplications、internalcsSmightBemoresuitable.it

私のCSSは小文字でなければなりませんか? 私のCSSは小文字でなければなりませんか? Jun 19, 2025 am 12:29 AM

いいえ、CSSDOESNOTHAVETOBEINLOWERCASE。

See all articles