2021/02/09
NuxtJS+TailwindCSSでダークモードを導入しました
概要
いつの間にかダークモードが標準装備が当たり前になってきました。(主にモバイルアプリなどで)
就寝前などの夜間には目に優しくユーザーに疲れさせない
という理由がメインの理由ですが、以下のような理由で導入が進んでいるような気がします。
なんとなく黒ベースがかっこよくておしゃれ
対応していないアプリは時代遅れ感を感じる
弊社で開発中のNuxtJSベースのWebアプリにも導入しようと思い、調査して実装を行いました。
前提
- NuxtJS
- Tailwind CSS
の2つのフレームワークを利用しています。
実装内容
@nuxt/color-modeとtailwindcss-dark-modeを使ってNuxtJSのサイトにダークモードの対応を行いました
パッケージのインストール
% yarn add @nuxtjs/color-mode
% yarn add tailwindcss-dark-mode
nuxt.config.jsの編集
buildModules: [
'@nuxtjs/color-mode', // この行を追加
],
tailwind.config.jsの編集
module.exports = {
purge: {
content: [
'./components/**/*.{vue,js}',
'./layouts/**/*.vue',
'./pages/**/*.vue',
'./plugins/**/*.{js,ts}',
'./nuxt.config.{js,ts}',
],
options: {
safelist: [/^bg-/, /^hover:bg-/, /^text-/, /^hover:text-/, 'dark-mode'], // 'production buildでcssの定義が消されないように、dark-modeを追加'
},
},
theme: {
darkSelector: '.dark-mode', // この行を追加
},
// variantsにdark系のものを追加
variants: {
backgroundColor: [
'hover',
'dark',
'dark-hover',
'dark-group-hover',
'dark-even',
'dark-odd',
],
borderColor: [
'focus',
'dark',
'dark-disabled',
'dark-focus',
'dark-focus-within',
],
textColor: [
'hover',
'dark',
'dark-hover',
'dark-active',
'dark-placeholder',
],
},
plugins: [
require('tailwindcss-dark-mode')(), // この行を追加
],
}
各ページでの実装
- 以下のように
dark:bg-
でダークモードの時の背景色の色を指定dark-hover:bg-
でダークモードの時のhoverした時の背景色の色を指定dark:border-
でダークモードの時のボーダーの色を指定dark:text-gray-200
でダークモードの時のテキストの色を指定
<div class="bg-white dark:bg-gray-800">
<button
class="rounded-md px-4 py-2 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-700 hover:bg-gray-50 dark-hover:bg-gray-600 text-gray-700 dark:text-gray-200"
>
click me
</button>
</div>
便利でした。
参考リンク
関連する記事
Nuxt2からNuxt3への移行とNextJSとNuxt3の比較について
弊社ホームページとブログサイトをNuxt2からNuxt3ベースに移行しました。
Next.js + TailwindCSSのプロジェクト立ち上げ時のメモ
Next.js + Tailwind CSSのプロジェクト作成時の操作ログです。
Nuxt.jsからNext.jsへのリニューアルを経て思うこと
Nuxt.jsからNext.jsへフルリニューアルしたことで見えてきた個人的なメリットとデメリットを整理します
Tailwindcssで定義されている色からAndroid版の定義を自動生成する
Tailwindcssで定義されている便利な色たちをAndroidでも利用したいので、jsonで定義されている色をAndroidの変数に変換するスクリプトを作りました