tag:crieit.net,2005:https://crieit.net/tags/iOS13/feed 「iOS13」の記事 - Crieit Crieitでタグ「iOS13」に投稿された最近の記事 2019-09-24T04:52:06+09:00 https://crieit.net/tags/iOS13/feed tag:crieit.net,2005:PublicArticle/15419 2019-09-24T04:49:33+09:00 2019-09-24T04:52:06+09:00 https://crieit.net/posts/3196986630826e80e694cf840dd8f493 意外と簡単!自分のサイトをダークモード対応してみた【技術編】 <p><a href="https://crieit.now.sh/upload_images/ab7fe98314e669b78bed589d5154e4b05d89099d3d9f8.PNG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/ab7fe98314e669b78bed589d5154e4b05d89099d3d9f8.PNG?mw=700" alt="IMG_8789.PNG" /></a></p> <p>スプランプ(<a target="_blank" rel="nofollow noopener" href="https://splamp.info">splamp.info</a>)というサイトの管理人をしているウラルです。</p> <p>来ましたよ、ダークモードの時代が。2019年はダークモード元年です。</p> <h1 id="ダークモードの時代が来た"><a href="#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E6%99%82%E4%BB%A3%E3%81%8C%E6%9D%A5%E3%81%9F">ダークモードの時代が来た</a></h1> <p>何を言っているかお分かりでしょうか。<br /> 実は、2019年はWindows・iOS・Androidという三大OSがダークモード対応をするという、大きな時代の節目なのです。</p> <h2 id="OSの更新日とダークモード設定方法"><a href="#OS%E3%81%AE%E6%9B%B4%E6%96%B0%E6%97%A5%E3%81%A8%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95">OSの更新日とダークモード設定方法</a></h2> <p><strong>2019年5月22日</strong><br /> Windows 10 May 2019 Update配信開始。「個人用設定 > 色」から「既定のアプリモード」を「黒」にする。</p> <p><strong>2019年9月4日</strong><br /> Android10配信開始。「設定 > ディスプレイ」から「ダークテーマ」をオンにする。</p> <p><strong>2019年9月20日</strong><br /> iOS13配信開始。「設定 > 画面表示と明るさ」から「外観モード」を「ダーク」にする。</p> <h1 id="Webが対応しないでどうする"><a href="#Web%E3%81%8C%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%AA%E3%81%84%E3%81%A7%E3%81%A9%E3%81%86%E3%81%99%E3%82%8B">Webが対応しないでどうする</a></h1> <p>個人的な所感ですが、開発者の中でダークモード対応は興味としては薄いように感じます。</p> <p>しかし、Webこそダークモードの流れに乗るべきなのです。なぜなら、ほとんどのWebサイトの背景は真っ白じゃないですか!目が眩むし、夜眠れなくなりそうです。</p> <p>私は、以前からWebサイトでダークモードの対応をしたかったのですが、OSレベルでのダークモード対応が普及していなかったため、ずっと待っていました。サイト内にダークモードボタンを設置しても、ブラウザが真っ白では意味がありませんからね。</p> <p>三大OSが対応した今、もう何も遮るものはありません。</p> <h1 id="CSSだけで実装できる"><a href="#CSS%E3%81%A0%E3%81%91%E3%81%A7%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%8D%E3%82%8B">CSSだけで実装できる</a></h1> <p>ダークモード対応は、難しい技術が必要なのでしょうか。いいえ、CSSだけでいいんです。</p> <p>CSSのメディアクエリの1つである、<code>prefers-color-scheme</code>を使います。</p> <blockquote> <p><code>prefers-color-scheme</code> は CSS のメディア特性で、ユーザーがシステムに要求したカラーテーマが明色か暗色かを検出するために使用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/CSS/@media/prefers-color-scheme">prefers-color-scheme - CSS: カスケーディングスタイルシート | MDN</a></p> </blockquote> <p>構文によると、ダークモードがオンになると<code>prefers-color-scheme</code>が<code>dark</code>になり、オフだと<code>light</code>、そもそも機能を持ち合わせていない場合は<code>no-preference</code>という値になります。</p> <p>実際に利用する場合はどう使うのでしょうか。<br /> おすすめは、CSS変数との併用です。既存の構造を崩さずに、ダークモード用の色彩設定を追加することができます。</p> <p><em>例</em></p> <pre><code class="css">:root { --header-bg: white; --body-bg: white; --body-color: black; } @media (prefers-color-scheme: dark) { :root { --header-bg: hsl(212, 38%, 12%); --wrapper-bg: hsl(212, 40%, 17%); --body-color: #e4e4e4; } } header { background: var(--header-bg); } body { background: var(--body-bg); color: var(--body-color); } </code></pre> <p>CSS変数を参照させることで、ダークモードに切り替わると一斉に色が変わります。</p> <p><img src="https://splamp.info/shed/assets/IMG_8788.GIF" alt="gif" /></p> <p>imgタグの画像の切り替えは若干面倒ですが、私はライト用とダーク用の2つを連続で並べて、CSSで<code>display: none</code>と<code>display: inline</code>を入れ替えるようにしました。</p> <h1 id="大変だけど"><a href="#%E5%A4%A7%E5%A4%89%E3%81%A0%E3%81%91%E3%81%A9">大変だけど</a></h1> <p>これまで白ベースで作ってきたサイトにとっては、ダークモードの対応は破壊的な修正にあたります。角丸で四隅が白い画像だとか、色でごまかしていた要素の境目などを、見直さなければいけません。</p> <p>しかし、それはデメリットばかりではありません。それは、負の遺産になりかけていたCSSを直すチャンスかもしれません。(少なくともうちのサイトは構造から改善しました)</p> <p>三大OSがダークモードに対応した今、時代の流れはダークモード対応です。<br /> 実装自体は簡単ではあるものの、色使いの検討や構造の見直しに割と時間がかかるので、早め早めに手を付けたいものです。<br /> アクセシビリティとか言って、やがて対応に迫られてくるのは間違いありません。</p> <p>次回は【デザイン編】として、ダークモードデザインについて記事にしようと思います。</p> ウラル