Result
Webアプリやスマホアプリ等でよくあるダークモードをCSSだけで実現しよう、というもの
力業というわけでもなく、割と実践的でした。とはいえシンプルな方法なのである程度利用シーンは限られます
css
:root{/*基本のスタイル*/ --bg: #f8fafc; --panel-bg: #FFFFFF; --panel-border: #CCCCCC; --panel-title: #343f44; --panel-text: #54666d; --btn: #3eb0ef; } .toggleDark{/*ライトモード時のトグルボタン*/ display: block; color: #222; } .toggleLight{/*ダークモードからライトへ戻す際のボタン。非表示にしておく*/ display: none; color: white; } #toggleMode:checked ~ .toggleDark{/*チェックが入ったら非表示*/ display: none; } #toggleMode:checked ~ .toggleLight{/*チェックが入ったら表示*/ display: block; } #container{/*メインコンテナ*/ position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--bg); z-index: 1; padding: 50px 20px; } #toggleMode:checked ~ #container{/*トグルボタンが押されたら変数をオーバーライド*/ --bg: #020202; --panel-bg: #111413; --panel-border: #1f2322; --panel-title: #8e9294; --panel-text: #505456; --btn: #2962fe; background-color: var(--bg); } /*各所の基本設定。CSS変数の部分だけトグルボタンで切り替わる事*/ .panel .content{ width: 70%; float: left; padding: 20px; background-color: var(--panel-bg); height: 300px; border-radius: 0 10px 10px 0; border-top: 1px solid var(--panel-border); border-right: 1px solid var(--panel-border); border-bottom: 1px solid var(--panel-border); box-sizing: border-box; } .panel .content h2{ margin-top: 20px; margin-bottom: 0; color: var(--panel-title); } .panel .content p{ margin-top: 10px; font-weight: 300; color: var(--panel-text); } .panel .content button{ border: 0; border-radius: 3px; background-color: var(--btn); padding: 10px 20px; color: white; cursor: pointer; }
2つのCSS変数を用意し、checkboxで実装したトグルボタンにチェックが入ったら切り替える、という流れ
そのため、各マテリアルの色の設定箇所にはCSS変数で用意、:checkedになったら一括で切り替えられます
html
<input type="checkbox" id="toggleMode"> <label for="toggleMode" class="toggleDark">暗くする</label> <label for="toggleMode" class="toggleLight">明るくする</label> <div id="container"> <div class="panel"> <div class="image" style="background-image:url('hoge.jpg')"></div> <div class="content"> <h2>foobar</h2> <p>piyopiyo</p> <button>hogehoge</button> </div> </div> </div>
can i use
CSS変数のブラウザ対応状況です