FF14のスクリーンショットにロゴを貼り付けるアプリ「ロゴぺた」
— ゲレ@エオルゼアでもくもく会 (@gelehrte_crest) 2020年3月27日
FF14風の文字をいれる「文字入れジェネレータ」ですが、昨日 #FF14創作座談会 にてアイデアをいただいて「ダークモード」を実装してみました(=゚ω゚)ノ
目にやさしくなったかな?https://t.co/r1t8xYqSvd#FF14 #ロゴぺた pic.twitter.com/SFAkoYcKh6
ざっくり言ってしまうとTwitterで書いた通りなのですが、ダークモードを実装しました。
その経緯と、実装方法です。
Bootstrap+jQueryでのダークモードの実装方法にも触れますが、最初に使い方などを説明しますので、ただダークモードを使いたい方は使い方だけでも読んでいってください。
ダークモードって何?
簡単に言うと、暗めのデザインのアプリモードです。
iPhone11などではダークモードでアプリを開くと消費電力が減るなどの効果があります。
また、暗い画面の方が目に優しいと感じる人もいるようです。
使い方について
まずは作っているアプリについて説明を。
場合によってはそちらのソースコードを見てもらう方がわかりやすいかもしれません。
「ロゴぺた」と「文字入れジェネレータ」についての説明
FF14のスクリーンショットにロゴや文字を貼り付けるアプリとして実装しました。
下記にリンクを貼ります。
gelehrtecrest.github.io
gelehrtecrest.github.io
BootStrap+JavaScript(jQuery)+CSSでのダークモード実装について
参考にしたサイト
こちらのサイトを参考にしました。
www.webcreatorbox.com
github.com
実装
CSS
BootStrapデザインをダークモードのデザインにするためにCSSに以下を追加しました。
/* ダークモード */ .dark-theme { background: #000; color: #ddd; transition: .5s; } .dark-theme .jumbotron { background: #333; transition: .5s; } .dark-theme .nav-tabs li.active a{ background-color: #000; color: #333; transition: .5s; }
簡単に説明すると
- bodyにclass=dark-theme を入れる想定
- class=jumbotron は明るすぎるので修正
- class=nav-tabs も少し修正
- ゆっくり色を変えるために0.5秒かけて暗くするために transition: .5s; を追加
HTML
ダークモード状態を保存しておくために、Cookieを使っています。
js-cookieを使いました。
CDNで読み込むために以下の一文を追記。
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
またチェックボックスでダークモード切替をするので以下の一文を追加
<div class="form-control"><input id="btn-mode" type="checkbox"> ダークモード</div>
JavaScript
これは丸々ソースコードを貼ります。
いろんな情報を混ぜて実装したのでJavaScriptとjQueryが混ざってしまったので、いずれ直したい・・・・ですね。
$(window).on("load", function(){ const btn = document.querySelector("#btn-mode"); // チェックした時の挙動 btn.addEventListener("change", () => { mode_theme(btn) }); // Cookieから読み込んだ時の挙動 const mode = Cookies.get('mode'); if(mode == "dark"){ mode_theme_dark(btn); } else { mode_theme_light(btn); } }); function mode_theme(btn) { if (btn.checked == true) { mode_theme_dark(btn); } else { mode_theme_light(btn); } } function mode_theme_dark(btn){ // ダークモード document.body.classList.remove("light-theme"); document.body.classList.add("dark-theme"); Cookies.set('mode', 'dark'); $('#btn-mode').prop('checked', true); } function mode_theme_light(btn){ // ライトモード document.body.classList.remove("dark-theme"); document.body.classList.add("light-theme"); Cookies.set('mode', 'light'); $('#btn-mode').prop('checked', false); };
ソースコードを読んでいただければ分かると思いますがやっていることは、
- id=btn-mode にチェックしているかどうか確認する。
- チェックされたらダークモードを挿入する挙動をする。
- ダークモードとしてbody要素にclass=dark-theme を追加する。
- ダークモードを解除したらbody要素からclass=dark-theme を削除する。
- サイトを開いたときにCookieを確認し、ダークモードだった場合body要素への追加を行う。
という感じです。
くわしくはGitHubへ
ソースコードはGitHubで公開してあるので、こちらを見てもらった方が早いかもしれません。
github.com
終わりに
比較的あっさりとダークモードを実装できました。
少しでもアプリを使うときのストレスが下がれば嬉しいです。