ããŒã¯ã¢ãŒãã¯ããŠã§ããµã€ããšã¢ããªã®ãã¶ã€ã³ã«ãããäž»èŠãªãã¬ã³ãã§ããç¶ããŠããŸãããã®ãããã¯ã«é¢ãããã°ãããèšäºãèŠã€ãã翻蚳ãå ±æããããšã«ããŸããããŠãŒã¶ãŒã®æèŠãããŒã¯ã¢ãŒãã®å®è£ ãšãµããŒããéçºè åãã®æšå¥šäºé ã«ã€ããŠã¯ããã®èšäºã§è©³ãã説æããŠããŸããããªãã¯ã©ã¡ãåŽã«ããŸããïŒ
ãã ã®èªå€§å®£äŒãŸãã¯å¿ èŠæ§ïŒããŒã¯ã¢ãŒãã®è©³çްãã芧ãã ããããŠãŒã¶ãŒã®å©çã®ããã«ããŒã¯ã¢ãŒãã®ãµããŒãã远å ããæ¹æ³ã玹ä»ããŸãã
åæžã
ãã®ãããã¯ã«ã€ããŠãç§ã¯èšå€§ãªèª¿æ»ã宿œããåé¡ã®æŽå²ãç ç©¶ããŸãããããŒã¯ã¢ãŒãã§ã®äœæ¥ã®ã¿ã«é¢å¿ãããå Žåã¯ãæåã®ã»ã¯ã·ã§ã³ãã¹ãããããŠãã ããã
äž»æµã«ãªãåã®ããŒã¯ã¢ãŒã

圌ãã¯æŽå²ãåšæçã§ãããšèšããŸããããŒã¯ã¢ãŒãã®ç¶æ³ã§ã¯ããã¹ãŠãå§ãŸã£ãå Žæã«æ»ããŸããããŒãœãã«ã³ã³ãã¥ãŒã¿ã®åæã«ã¯ãããŒã¯ã¢ãŒããå¯äžã®éžæè¢ã§ãããã¢ãã¯ãã®CRTã¢ãã¿ãŒã¯ãèå ã¹ã¯ãªãŒã³ã«é»åããŒã ãç §å°ããããšã§æ©èœããåæã®CRTã§äœ¿çšãããŠããèå äœã¯ç·è²ã§ãããããã¹ãã¯ç·è²ã§è¡šç€ºãããç»é¢ã®æ®ãã®éšåã¯é»è²ã§ãã£ãããããããã®ã¢ãã«ã¯ãã°ãã°ç·è²ã®ç»é¢ãšåŒã°ããŠããŸããã

ãã®åŸãã«ã©ãŒCRTãã£ã¹ãã¬ã€ã¯ãèµ€ãç·ãéã®èå äœã䜿çšããŠè€æ°ã®è²ã衚瀺ãå§ããŸããã圌ãã¯ã3ã€ã®èå äœãã¹ãŠãåæã«æŽ»æ§åããããšã«ãã£ãŠçœãäœæããŸãããããçŸä»£çãªãã¹ã¯ããããããªãã·ã³ã°ãšWYSIWYGãã¯ãããžãŒã®åºçŸã«ãããä»®æ³ããã¥ã¡ã³ããå®éã®çŽã®ããã«èŠããããšãã§ããããã«ãªããŸããã

ãã¶ã€ã³ã®ãã®æç¹ã§ããããŒã¯ãªã³ãã¯ã€ãããšãããã¬ã³ããçãŸãããããã¯ãŒã¯äžã®æåã®Webãµã€ãã«å®è£ ãããŸããããããã¯ããã¹ãããã¥ã¡ã³ãã®ãããªãã®ã§ããã
äžçåã®ãã©ãŠã¶ã§ããWorldWideWebïŒCSSããŸã çºæãããŠããªããšæ³åããŠãã ããïŒã¯ããã®æ¹æ³ã§WebããŒãžãã¬ã³ããªã³ã°ããŸããããããããäºå®ïŒ2çªç®ã®ã©ã€ã³ã¢ãŒããã©ãŠã¶ïŒç«¯æ«ããŒã¹ã®ãã©ãŠã¶ïŒã¯ãæéã§ç·è²ã§ããã仿¥ãWebããŒãžãšã¢ããªã±ãŒã·ã§ã³ã¯éåžžãæããèæ¯ã«æãããã¹ãã䜿çšããŠäœæãããŸããããã¯äžè¬çã«èªããããŠããããšã§ãããã®é è²ã¯ãChromeãªã©ã®ææ°ã®ãŠãŒã¶ãŒãšãŒãžã§ã³ãã®ã¹ã¿ã€ã«ã·ãŒãã«çµã¿èŸŒãŸããŠããŸãã..ã
ã¹ããŒããã©ã³ã®äœ¿çšïŒåºå žïŒ
CRTã¢ãã¿ãŒã®æä»£ã¯éãå»ããŸãããçŸåšãããã¯ã©ã€ãä»ãLCDãŸãã¯ãšãã«ã®ãŒå¹çã®é«ãAMOLEDãã£ã¹ãã¬ã€ã䜿çšããã¢ãã€ã«ããã€ã¹ã§ã倧éã®ã³ã³ãã³ããæ¶è²»ããã³äœæããŠããŸããããå°ãããããå®çšçãªã³ã³ãã¥ãŒã¿ãŒãã¿ãã¬ãããã¹ããŒããã©ã³ã¯ããŠãŒã¶ãŒã®è¡åã®æ°ãããã¿ãŒã³ããããããŸãããç§ãã¡ã®èªç±ãªæéã«ã¯ããœãŒã·ã£ã«ãããã¯ãŒã¯ã楜ãã¿ã®ããã®ããã°ã©ã ããŸãã¯ã³ã³ãã¥ãŒã¿ãŒã²ãŒã ã§å§¿ãæ¶ããŸããããã¯éåžžãå€ã®èæãç §æã§ã®ä»äºã®åŸããŸãã¯å€å¯ãåã®ãããã§ããèµ·ãããŸããæéã®äžã§ããã€ã¹ã䜿çšãã人ãå¢ããã»ã©ãããŒã¯ã¢ãŒãã®äººæ°ãé«ãŸããŸãã
ãªãããŒã¯ã¢ãŒããéžã¶ã®ã§ããïŒ
çŸççç±ããããŒã¯ã¢ãŒãã奜ããªçç±ã
å°ãããããšããæã人æ°ã®ããçãã¯ãç®ã«å¿å°ããããŸãã¯ãããŒã¯ã¢ãŒãã¯çŸãããã§ãã Appleã¯ãããŒã¯ã¢ãŒãã®éçºè åãããã¥ã¡ã³ãã§ããã»ãšãã©ã®ãŠãŒã¶ãŒã«ãšã£ãŠããŒã¯ãŸãã¯ã©ã€ãã®éžæã¯ãçŸç奜ã¿ã«åºã¥ããŠãããç §ææ¡ä»¶ãšã¯é¢ä¿ããªãå ŽåããããŸãããšå ¬ç¶ãšè¿°ã¹ãŠããŸãã人ã ãããŒã¯ã¢ãŒããæããçç±ãšãã®äœ¿ç𿹿³ã«ã€ã㊠ã¯ããã®èª¿æ»ã§è©³çްãã芧ãã ãããSystem 7 CloseViewïŒãœãŒã¹ïŒé害ãæã€äººã ã®ããã®ã¢ã¯ã»ã·ããªãã£ããŒã«ãšããŠã®ããŒã¯ã¢ãŒã
ããŒã¯ã¢ãŒãã䜿çšããå¿ èŠããã人ãããŸããããšãã°ãèŠèŠé害ã®ãããŠãŒã¶ãŒã¯ãã¢ã¯ã»ã·ããªãã£ããŒã«ãšããŠããŒã¯ã¢ãŒãã䜿çšããŸããç§ãèŠã€ããã¢ã¯ã»ã·ããªãã£ããŒã«ãšããŠã®ããŒã¯ã¢ãŒãã®æåã®äœ¿çšã¯ãã·ã¹ãã 7ã®CloseViewæ©èœã§ãããã«ã©ãŒã¹ããŒã ãçœå°ã«é»ããé»å°ã«çœã«å€æŽããæ©èœãåããŠããŸããã System 7ã¯ã«ã©ãŒã€ã³ã¿ãŒãã§ã€ã¹ããµããŒãããŠããŸããããããã©ã«ãã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯çœé»ã§ããã
ãã®å転ããŒã¹ã®æ¹æ³ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã®è²ã®æ°ãå¢ãããåŸããã®åŒ±ç¹ã瀺ããŠããŸãããµãªããSzpiroãç ç©¶è ã®ããŒã ãè¡ã£ã調æ»ãèŠèŠé害è ãã³ã³ãã¥ãŒã¿ããã€ã¹ãã©ã®ããã«æ±ããã«ã€ããŠã®ãŠãŒã¶ãŒããã®çµæããã¹ãŠã®åçè ãå転è²ã奜ãŸãªãã£ãããå€ãã®åçè ã¯æãèæ¯ã«æããããã¹ãã奜ãã ããšã倿ããŸããã Appleã¯ãSmart Invertã䜿çšããŠãã®ãŠãŒã¶ãŒèšå®ã«å¯Ÿå¿ããŠããŸããããã¯ãç»åãã¡ãã£ã¢ãããã³æãè²ã®ã¹ã¿ã€ã«ã䜿çšããäžéšã®ã¢ããªã±ãŒã·ã§ã³ãé€ããŠããã£ã¹ãã¬ã€ã®è²ã倿ŽããŸãã
äœèŠåã®ç¹æ®ãªåœ¢æ ã¯ãããžã¿ã«çŒçç·åŒµãšããŠãç¥ãããã³ã³ãã¥ãŒã¿ãŒèŠåçå矀ã§ãããããã®çšèªã¯ã³ã³ãã¥ãŒã¿ãŒïŒãã¹ã¯ããããã©ããããããã¿ãã¬ããïŒããã®ä»ã®é»åæ©åšïŒã¹ããŒããã©ã³ãé»åæžç±ïŒã®é »ç¹ãªäœ¿çšã«é¢é£ããããŸããŸãªèŠèŠã®åé¡ãç§åŠè ãã¡ã¯ãç¹ã«å€éã«é幎ãé»åæ©åšã䜿çšãããšãç¡ç é害ãäžç çãç¡ç äžè¶³çå矀ã®ãªã¹ã¯ãé«ãŸããšæšæž¬ããŠããŸããä»ã®ç ç©¶ã«ãããšãéè²å ã®åœ±é¿ã¯ãµãŒã«ãã£ã¢ã³ãªãºã ã®èª¿ç¯ã«é¢äžããŠããŸããããŠç¡ç ãµã€ã¯ã«ããããŠäžèŠåãªå ç°å¢ã¯ç¡ç äžè¶³ã«ã€ãªããå¯èœæ§ããããããã¯äººã®æ°åãšã¿ã¹ã¯ãå®è¡ããå¹çã«åœ±é¿ãäžããŸãããã£ã¹ãã¬ã€ã®è²æž©åºŠã調æŽããŠïŒiOSãã€ãã·ãããAndroidãã€ãã©ã€ããªã©ã®æ©èœïŒãéè²å ã®éãæžããããããŒã¯ããŒããŸãã¯ã¢ãŒãã§äžè¬çã«æããå ãäžèŠåãªå ãé²ãããšã§ãæªåœ±é¿ãå¶éã§ããŸãã
AMOLEDãã£ã¹ãã¬ã€ã®ããŒã¯ã¢ãŒãã§ã®ãšãã«ã®ãŒç¯çŽ
ããŒã¯ã¢ãŒãã¯ãAMOLEDãã£ã¹ãã¬ã€ã®é»åãå€§å¹ ã«ç¯çŽããããšãç¥ãããŠããŸããYouTubeãªã©ã®äººæ°ã®ããGoogleã¢ããªã«é¢ãã調æ»ã§ã¯ããšãã«ã®ãŒãæå€§60ïŒ ç¯çŽã§ããããšã蚌æãããŠããŸãã以äžã®ãããªã¯ããããã®ç ç©¶ãšåã¢ããªã±ãŒã·ã§ã³ã®ãšãã«ã®ãŒç¯çŽã®è©³çްãæäŸããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ããŒã¯ã¢ãŒããã¢ã¯ãã£ãã«ããæ¹æ³
ããŒã¯ã¢ãŒããå€ãã®ãŠãŒã¶ãŒã«ãšã£ãŠéåžžã«éèŠã§ããçç±ã説æããã®ã§ããããã«ã¹ã¿ãã€ãºããæ¹æ³ãèŠãŠã¿ãŸãããã
ããŒã¯
ã¢ãŒããŸãã¯ããŒã¯ããŒãããµããŒãããAndroidQãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããŒã¯ããŒãèšå®ã«ã¯ãéåžžãèšå®ã§ããããã¢ã¯ãã£ãåãããªãã·ã§ã³ããããŸããmacOS Xã§ã¯ãããã¯[ã·ã¹ãã èšå®]ã®[äžè¬]ã»ã¯ã·ã§ã³ã«ããã[å€èг]ïŒã¹ã¯ãªãŒã³ã·ã§ããïŒãšåŒã°ããŸããWindows10ã§ã¯ã[è²ã®éžæ]ïŒã¹ã¯ãªãŒã³ã·ã§ããïŒãšåŒã°ãã[è²]ã®äžã«ãããŸããAndroid Qã®å Žåãã¢ãŒããæãããŒããšããŠè¡šç€ºïŒã¹ã¯ãªãŒã³ã·ã§ããïŒã«åãæ¿ããããšãã§ããŸããiOS13ã®å Žåã[è¡šç€ºãšæãã]ã»ã¯ã·ã§ã³ïŒã¹ã¯ãªãŒã³ã·ã§ããïŒã§ã€ã³ã¿ãŒãã§ã€ã¹ã®è²ã倿Žã§ããŸãã
- prefers-color-scheme
ç¶ããåã«ããå°ãçè«ãã¡ãã£ã¢ã¯ãšãªã䜿çšãããšãäœæè ã¯ãããã¥ã¡ã³ãã®ã¬ã³ããªã³ã°ãšã¯é¢ä¿ãªãããŠãŒã¶ãŒãšãŒãžã§ã³ããŸãã¯ããã€ã¹ã®å€ãšããããã£ããã¹ãããã³ã¯ãšãªã§ããŸãããããã¯CSSã¡ãã£ã¢ã«ãŒã«ã§äœ¿çšãããããã¥ã¡ã³ãã«æ¡ä»¶ä»ãã§ã¹ã¿ã€ã«ãé©çšããHTMLãJavaScriptãªã©ã®ä»ã®ã³ã³ããã¹ããèšèªã§äœ¿çšãããŸããã¬ãã«5ã®ã¡ãã£ã¢ã¯ãšãªã¯ããããããŠãŒã¶ãŒåªå ã¡ãã£ã¢ããããã£ãå°å ¥ããŸããããã¯ããµã€ãããŠãŒã¶ãŒã®ã³ã³ãã³ãè¡šç€ºæ¹æ³ãæ€åºããããã®ã·ã°ãã«ã§ãã䜿çšããã¢ãã¡ãŒã·ã§ã³ã®éãæå°éã«æããããã«ãŠãŒã¶ãŒãOSã«èŠæ±ãããã©ããã倿ããã«ã¯ãprefers-reduced-
motionCSSã¡ãã£ã¢ããããã£ã»ããã䜿çšã§ããŸããç§ã¯ãã§ã«æã£ãŠããŸãå ã«prefers-reduced-motionã«ã€ããŠæžãããPreferred-color-scheme
CSSã¡ãã£ã¢ããããã£ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã äžã®ãŠãŒã¶ãŒã䜿çšããããŒãïŒæãããŸãã¯æãïŒã決å®ããããã«äœ¿çšãããŸããæ¬¡ã®å€ã§åäœããŸãã
- no-preferenceïŒãŠãŒã¶ãŒãã·ã¹ãã ã«èšå®ãéç¥ããŠããªãããšã瀺ããŸãããã®ããŒã¯ãŒãã¯ãè«çã³ã³ããã¹ãã§ã¯falseãšè©äŸ¡ãããŸãã
- lightïŒãŠãŒã¶ãŒãæããããŒãïŒæããèæ¯ã«æãããã¹ãïŒã®ããŒãžã奜ãããšãã·ã¹ãã ã«éç¥ããããšã瀺ããŸãã
- darkïŒãŠãŒã¶ãŒãæãããŒãïŒæãèæ¯ã«æããããã¹ãïŒã®ããŒãžã奜ãããšãã·ã¹ãã ã«éç¥ããããšã瀺ããŸãã
ããŒã¯ã¢ãŒãã®ãµããŒã
ããŒã¯ã¢ãŒãããã©ãŠã¶ã§ãµããŒããããŠãããã©ããã確èªããŸã
ããŒã¯ã¢ãŒãã¯ã¡ãã£ã¢ã¯ãšãªãä»ããŠäŒéããããããprefers-color-schemeã¡ãã£ã¢ã¯ãšãªãé©åãã©ããã確èªããããšã§ãçŸåšã®ãã©ãŠã¶ãããŒã¯ã¢ãŒãããµããŒãããŠãããã©ãããç°¡åã«ç¢ºèªã§ããŸããå€ãèšå®ããã®ã§ã¯ãªããã¡ãã£ã¢ã¯ãšãªã§äžèŽãããã®ããã§ãã¯ããã ãã§ããããšã«æ³šæããŠãã ããã
if (window.matchMedia('(prefers-color-scheme)').media !== 'not all') {
console.log(' Dark mode is supported');
}
å·çæç¹ã§ã¯ãprefers-color-schemeã¯ãããŒãžã§ã³76ã®ChromeãšEdgeãããŒãžã§ã³67ã®FirefoxãmacOSã®ããŒãžã§ã³12.1ã®SafariãiOSã®ããŒãžã§ã³13ã§ããã¹ã¯ããããšã¢ãã€ã«ïŒå©çšå¯èœãªå ŽåïŒã®äž¡æ¹ã§ãµããŒããããŠããŸããä»ã®ãã¹ãŠã®ãã©ãŠã¶ã«ã€ããŠã¯ãèšäºããµããŒãããŒãã«ã䜿çšã§ããŸããããåç §ããŠãã ãããå€ããã©ãŠã¶ã«ããŒã¯ã¢ãŒãã®ãµããŒãã远å
ããã«ã¹ã¿ã ã®<dark-mode-toggle>èŠçŽ ã䜿çšã§ããŸããããã«ã€ããŠã¯ããã«æžããŸãã
å®éã®ããŒã¯ã¢ãŒã
ããŒã¯ã¢ãŒãã®ãµããŒããå®éã«ã©ã®ããã«èŠããããèŠãŠã¿ãŸããããæ ç»ããã€ã©ã³ããŒãã®ããã«ãçµå±ã¯æããæãããã®ã©ã¡ãããããããŸããïŒãªãç§ã¯ããã«çŠç¹ãåãããŠããã®ã§ããïŒãã®äºå®ã¯ããŒãã£ã³ã°æŠç¥ã«åœ±é¿ãäžããããã§ããçŸåšäœ¿çšãããŠããªãã¢ãŒãã®éèŠãªã¬ã³ããªã³ã°æ®µéã§ããŠãŒã¶ãŒã«CSSã®ããŠã³ããŒãã匷å¶ããªãã§ãã ããããããã£ãŠãèªã¿èŸŒã¿é床ãæé©åããããã«ãéèŠã§ã¯ãªãCSSã®èªã¿èŸŒã¿ãé ãããããã«ãäŸã®CSSã3ã€ã®éšåã«åå²ããŸããã
- style.cssã«ã¯ããµã€ãå šäœã§äœ¿çšãããäžè¬çãªã«ãŒã«ãå«ãŸããŠããŸã
- dark.cssã«ã¯ãããŒã¯ã¢ãŒãã«å¿ èŠãªã«ãŒã«ãå«ãŸããŠããŸã
- light.cssã«ã¯ãã©ã€ãã¢ãŒãã«ã®ã¿å¿ èŠãªã«ãŒã«ãå«ãŸããŠããŸãã
ããŒãã£ã³ã°æŠç¥
æåŸã®2ã€ãlight.cssãšdark.cssã¯ã<linkmedia>ãªã¯ãšã¹ããä»ããŠéžæçã«ããŒããããŸãã
æåã¯ããã¹ãŠã®ãã©ãŠã¶ãprefers-color-scheme CSSã¡ãã£ã¢ããããã£ïŒäžèšã®äŸã«ãããŸãïŒããµããŒãããŠããããã§ã¯ãããŸãããããã¯ãã€ã³ã©ã€ã³ã¹ã¯ãªããã®èŠçŽ ãä»ããŠããã©ã«ãã®light.cssãéžæããããšã§è§£æ±ºãããŸãïŒã©ã€ãã¯ä»»æã®éžæã§ããããã©ã«ãïŒãã¹ã¿ã€ã«ãèšå®ãããŠããªãã³ã³ãã³ãã衚瀺ãããªãããã«ããããã«ãlight.cssãèªã¿èŸŒãŸãããŸã§ããŒãžã³ã³ãã³ããé衚瀺ã«ããŸãã
<script>
// If `prefers-color-scheme` is not supported, fall back to light mode.
// In this case, light.css will be downloaded with `highest` priority.
if (window.matchMedia('(prefers-color-scheme)').media === 'not all') {
document.documentElement.style.display = 'none';
document.head.insertAdjacentHTML(
'beforeend',
'<link rel="stylesheet" href="/light.css" onload="document.documentElement.style.display = ``">'
);
}
</script>
<!--
Conditionally either load the light or the dark stylesheet. The matching file
will be downloaded with `highest`, the non-matching file with `lowest`
priority. If the browser doesn't support `prefers-color-scheme`, the media
query is unknown and the files are downloaded with `lowest` priority (but
above I already force `highest` priority for my default light experience).
-->
<link rel="stylesheet" href="/dark.css" media="(prefers-color-scheme: dark)">
<link rel="stylesheet" href="/light.css" media="(prefers-color-scheme: no-preference), (prefers-color-scheme: light)">
<!-- The main stylesheet -->
<link rel="stylesheet" href="/style.css">
ã¹ã¿ã€ã«ã·ãŒãã¢ãŒããã¯ãã£
ç§ã¯CSS倿°ã䜿çšããŠããŸããããã«ãããstyle.cssãæ±çšã«ããããšãã§ããŸãããã¹ãŠã®ã©ã€ãã¢ãŒããŸãã¯ããŒã¯ã¢ãŒãã®èšå®ã¯ãdark.cssãšlight.cssã®2ã€ã®ä»ã®ãã¡ã€ã«ã§è¡ãããŸãã以äžã¯ãäžè¬çãªèãæ¹ã説æããã®ã«ååãªäŸã§ãã -â -â colorãš-â -â background-colorã®2ã€ã®å€æ°ã宣èšããŸãããããã¯ãdark-on-lightãšlight-on-darkã®åºæ¬ããŒããäœæããŸãã
/* light.css: dark-on-light */
:root {
--color: rgb(5, 5, 5);
--background-color: rgb(250, 250, 250);
}
/* dark.css: light-on-dark */
:root {
--color: rgb(250, 250, 250);
--background-color: rgb(5, 5, 5);
}
次ã«ãstyle.cssã§ããããã®å€æ°ãæ¬æã§äœ¿çšããŸã{...}ããããã¯CSSç䌌ã¯ã©ã¹ã§ å®çŸ©ãããŠããããïŒroot -HTMLã§<html>èŠçŽ ã衚ããç¹ç°æ§ãé«ãããšãé€ããŠhtmlã»ã¬ã¯ã¿ãŒãšåãã»ã¬ã¯ã¿ãŒïŒå€æ°ã¯ã«ã¹ã±ãŒããããã°ããŒãã«CSS倿°ã®å®çŸ©ãå¯èœã«ãªããŸãã
/* style.css */
:root {
color-scheme: light dark;
}
body {
color: var(--color);
background-color: var(--background-color);
}
äžèšã®äŸã§ã¯ãã¹ããŒã¹ã§åºåãããæããæãå€ãæã€color-schemeããããã£ã«ããããæ°ã¥ããã§ãããã ãã®ããããã£ã¯ãã¢ããªã±ãŒã·ã§ã³ããµããŒãããã«ã©ãŒããŒãããã©ãŠã¶ã«éç¥ãããŠãŒã¶ãŒãšãŒãžã§ã³ãã¹ã¿ã€ã«ã·ãŒãã®ç¹å¥ãªããªãšãŒã·ã§ã³ãã¢ã¯ãã£ãåã§ããããã«ããŸããããã¯ãããšãã°ããã©ãŠã¶ãæãèæ¯ãšæããããã¹ãã®ãã©ãŒã ãã£ãŒã«ãã衚瀺ã§ããããã«ããããã¹ã¯ããŒã«ããŒãã«ã¹ã¿ãã€ãºããããããŒãããŒã¹ã®ãã€ã©ã€ãè²ãæå¹ã«ãããããå Žåã«äŸ¿å©ã§ããcolor-schemeããããã£ã®è©³çްã¯ãCSSè²èª¿æŽã¢ãžã¥ãŒã«ã¬ãã«1ã§æå®ãããŠããŸãã åŠã³ã®è©³çްé è²ã
ä»ã®ãã¹ãŠã¯ãç§ã®ãµã€ãã«ããæ®ãã®ããŒã¯ã¢ããã®CSSã¹ã¿ã€ãªã³ã°ã§ããã¹ã¿ã€ã«ã®ã»ãã³ãã£ãã¯ç·šæã¯ãããŒã¯ã¢ãŒãã§äœæ¥ãããšãã«éåžžã«åœ¹ç«ã¡ãŸããããšãã°ã-â -â highlight-yellowã®ä»£ããã«ã倿°ã«-â -â accent-colorãšããååãä»ããããšãæ€èšããŠãã ãããããã¯ããé»è²ããããŒã¯ã¢ãŒãã§ã¯å®éã«ã¯é»è²ã§ã¯ãªãå Žåãããããã§ãã以äžã¯ãç§ã䜿çšããŠããä»ã®ããã€ãã®å€æ°ã®äŸã§ãã
/* dark.css */
:root {
--color: rgb(250, 250, 250);
--background-color: rgb(5, 5, 5);
--link-color: rgb(0, 188, 212);
--main-headline-color: rgb(233, 30, 99);
--accent-background-color: rgb(0, 188, 212);
--accent-color: rgb(5, 5, 5);
}
/* light.css */
:root {
--color: rgb(5, 5, 5);
--background-color: rgb(250, 250, 250);
--link-color: rgb(0, 0, 238);
--main-headline-color: rgb(0, 0, 192);
--accent-background-color: rgb(0, 0, 238);
--accent-color: rgb(250, 250, 250);
}
詳现ãªåæ
次ã®ããã¯ã¹ã°ãªããã§ã¯ãå®éã«äžèšã®ãã¹ãŠã䜿çšããäŸãèŠãããšãã§ããŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èšå®ã§ããŒã¯ã¢ãŒããåãæ¿ããŠãããŒãžãã©ã®ããã«åå¿ãããã確èªããŠãã ããã
ããŠã³ããŒãé床ãžã®åœ±é¿
ãã®äŸãååã«è©ŠããŠã¿ããšãã¡ãã£ã¢ã¯ãšãªãä»ããŠdark.cssãšlight.cssãããŒãããçç±ãããããŸããããŒã¯ã¢ãŒããåãæ¿ããŠããŒãžãåèªã¿èŸŒã¿ããŠã¿ãŠãã ãããçŸåšäžäžèŽã®ç¹å®ã®ã¹ã¿ã€ã«ã·ãŒãã¯ãŸã èªã¿èŸŒãŸããŠããŸãããåªå 床ãæãäœãããããµã€ããçŸåšå¿ èŠãšããŠãããªãœãŒã¹ãšç«¶åããŸããããã©ãŠã¶ãŒãäžäžèŽã®ã¡ãã£ã¢ã¯ãšãªãå«ãã¹ã¿ã€ã«ã·ãŒããããŒã
ããçç±ã調ã¹ãŠãã ããã
æãããŠã§ããµã€ãã¯æãåªå 床ã®äœã
æãã¹ã¿ã€ã«ãããŒãããŸãïŒæããŠã§ããµã€ãã¯æãäœãåªå åºŠã®æããã¹ã¿ã€ã«ãããŒãããŸãïŒ
ãã©ãŠã¶ãŒã®ã¹ãã³ãæããããã©ã«ãã®ãµã€ãã§ãprefers-color-schemeããµããŒããããŠããªãå Žåãåªå 床ãæãäœãæãã¹ã¿ã€ã«ãèªã¿èŸŒãŸããŸãã
ããŒã¯ã¢ãŒãã®å€æŽã«å¯Ÿå¿ããæ¹æ³
ä»ã®ã¡ãã£ã¢ã¯ãšãªã®å€æŽãšåæ§ã«ãJavaScriptãä»ããŠããŒã¯ã¢ãŒãã®å€æŽããµãã¹ã¯ã©ã€ãã§ããŸããããã䜿çšããŠãããšãã°ãããŒãžã¢ã€ã³ã³ãåçã«å€æŽããããChromeã®URLããŒã®è²ã決å®ãã<meta name = "theme-color">ã倿Žãããã§ããŸããäžèšã®äŸã¯ãå®éã«èª¬æãããŠããå 容ã瀺ããŠããŸããããŒããšã¢ã€ã³ã³ã®è²ã®å€æŽã確èªããã«ã¯ãå¥ã®ã¿ãã§ãã¢ãéããŸãã
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
darkModeMediaQuery.addListener((e) => {
const darkModeOn = e.matches;
console.log(`Dark mode is ${darkModeOn ? ' on' : 'ïž off'}.`);
});
ããŒã¯ã¢ãŒãã®ãã¹ããã©ã¯ãã£ã¹
çŽç²ãªçœãé¿ããå°ããªçްéšã«æ°ã¥ãããããããŸããïŒç§ã¯çŽç²ãªçœã䜿çšããŠããŸããã代ããã«ãåšå²ã®æãã³ã³ãã³ããå ãã®ãé²ãããã«ãrgbïŒ250ã250ã250ïŒã®ãããªå°ãæãçœãéžæããŸããã
åçç»åã®è²ãšæãã®å€æŽ
以äžã®2ã€ã®ã¹ã¯ãªãŒã³ã·ã§ãããæ¯èŒãããšãã¡ã€ã³ããŒããæãããæãããæããããæãã«å€ãã£ãã ãã§ãªããç»åã®å€èгãå°ãç°ãªã£ãŠããããšãããããŸããç§ã®èª¿æ»ã«ãããšãã»ãšãã©ã®ãŠãŒã¶ãŒã¯ãããŒã¯ã¢ãŒããã¢ã¯ãã£ããªå Žåãå°ãæãã飜åããŠããªãç»åã奜ã¿ãŸããç§ã¯ãããåçè²ãšåŒãã§ããŸãã


ç»åã®è²CSSãã£ã«ã¿ãŒã䜿çšããŠç»åã®è²ã倿Žã§ããŸããurlã«.svgãå«ãŸããŠããªããã¹ãŠã®ç»åã«é©åããCSSã»ã¬ã¯ã¿ãŒã䜿çšããŠããŸããã¢ã€ãã¢ã¯ããã¯ãã«ã°ã©ãã£ãã¯ïŒã¢ã€ã³ã³ïŒã«å¥ã®åŠçãäžããããšãã§ãããšããããšã§ããããã«ã€ããŠã¯ã次ã®ã»ã¯ã·ã§ã³ã§è©³ãã説æããŸããåŸã§ãã£ã«ã¿ãŒããã°ãã倿Žã§ããããã«ãCSS倿°ãå床䜿çšããŠããããšã«æ³šç®ããŠãã ããã調æ»
ãããŠãŒã¶ãŒèšå®ã®è©³çްãã芧ãã ããã åæç»ã®ã¿æãã¢ãŒãã§èŠæ±ããããããšããããªãã¡ãdark.cssãã¢ã¯ãã£ãã該åœããã«ãŒã«ãååšããªãã§light.cssã¯ã
/* dark.css */
--image-filter: grayscale(50%);
img:not([src*=".svg"]) {
filter: var(--image-filter);
}
JavaScript
ã䜿çšããããŒã¯ã¢ãŒãã®è²ã®å€æŽã®åŒ·åºŠã®èª¿æŽç§ãã¡ã¯ç°ãªããããŒã¯ã¢ãŒããã©ã®ããã«èŠãããã«ã€ããŠã¯åèªãç¬èªã®èããæã£ãŠããŸããäžèšã®è²ã®å€æŽæ¹æ³ã«åºå·ããããšã§ãJavaScriptã«ãã£ãŠå€æŽãããã°ã¬ãŒã¹ã±ãŒã«ã®åŒ·åºŠããŠãŒã¶ãŒã®å¥œã¿ã«ç°¡åã«èšå®ã§ããå€ã0ïŒ ã«èšå®ããããšã§ãè²ã®å€æŽãå®å šã«ãªãã«ããããšãã§ããŸããdocument.documentElementã¯ãããã¥ã¡ã³ãã®ã«ãŒãèŠçŽ ãžã®ãªã³ã¯ãæäŸããããšã«æ³šæããŠãã ãããã€ãŸããCSSç䌌ã¯ã©ã¹ïŒrootã䜿çšããŠåç §ã§ããã®ãšåãèŠçŽ ã§ãã
const filter = 'grayscale(70%)';
document.documentElement.style.setProperty('--image-filter', value);
ãã¯ãã«ãšã¢ã€ã³ã³ãå転ãã
ãã¯ãã«ã°ã©ãã£ãã¯ã¹ïŒç§ã®å Žåãã¢ã€ã³ã³ãšããŠäœ¿çšããã<img>èŠçŽ ãä»ããŠåç §ããŸãïŒã®å Žåãå¥ã®è²å€æŽæ¹æ³ã䜿çšããŸããäžæ¹ã§ç ç©¶ãããŠãã人ã ã¯åçå転奜ãã§ã¯ãªãããšã瀺ããããã¯ã»ãšãã©ã®ã¢ã€ã³ã³ã®ããã«éåžžã«é©ããŠããŸããåã³CSS倿°ã䜿çšããŠãéåžžã®ç¶æ ãšïŒãããŒç¶æ ã®å転ã®çšåºŠã決å®ããŸãã
ã¢ã€ã³ã³ã¯æãã¢ãŒãã§å転ããŠããïŒ
ã©ã€ãã¢ãŒãã§ã®ã¢ã€ã³ã³ïŒ
ãç¥ããã©ã®ããã«åã³ç§ã ãã®ã¢ã€ã³ã³å転dark.cssãªãlight.cssããããŠã©ã®ããã«ïŒãã㌠ãŠãŒã¶ãŒãéžæããã¢ãŒãã«å¿ããŠã2ã€ã®ã±ãŒã¹ã§å転ã®åŒ·åºŠãç°ãªããã¢ã€ã³ã³ããããã«æããŸãã¯ãããã«æããèŠããŸãã
/* dark.css */
--icon-filter: invert(100%);
--icon-filter_hover: invert(40%);
img[src*=".svg"] {
filter: var(--icon-filter);
}
/* light.css */
--icon-filter_hover: invert(60%);
/* style.css */
img[src*=".svg"]:hover {
filter: var(--icon-filter_hover);
}
ã€ã³ã©ã€ã³SVGã«currentColorã䜿çšãã
ã€ã³ã©ã€ã³SVGã€ã¡ãŒãžã«éãã£ã«ã¿ãŒã 䜿çšãã代ããã«ãèŠçŽ ã®ã«ã©ãŒå€ã§ããcurrentColorããŒã¯ãŒãã远å ã§ããŸãã
ããã«ãããããã©ã«ãã§ã«ã©ãŒå€ãåãåããªãããããã£ã®ã«ã©ãŒå€ãèšå®ã§ããŸããå®éãcurrentColorãSVGå¡ãã€ã¶ããŸãã¯ã¹ãããŒã¯å±æ§ ã®å€ãšããŠäœ¿çšãããŠããå Žåãç¶æ¿ãããcolorããããã£ãããã®å€ãååŸããŸããããã¯<svg> <use href = "âŠ"> </ svg>ã§ãæ©èœãããããåå¥ã®ãªãœãŒã¹ã䜿çšã§ããcurrentColorã¯åŒãç¶ãã³ã³ããã¹ãã«é©çšãããŸããããã¯ã€ã³ã©ã€ã³ãŸãã¯<usehref = "...">ã§ã®ã¿æ©èœããããšã«æ³šæããŠãã ããSVGããã ããsrcã€ã¡ãŒãžãŸãã¯CSSãä»ããŠåç §ãããSVGã¯å¯Ÿè±¡å€ã§ãã詳现ã¯ãã¡ãã
<!-- Some inline SVG -->
<svg xmlns="http://www.w3.org/2000/svg"
stroke="currentColor"
>
[âŠ]
</svg>
ã¢ãŒãéã®ã¹ã ãŒãºãªç§»è¡
è²ãšèæ¯ã¯ã¢ãã¡ãŒã·ã§ã³åå¯èœãªCSSããããã£ã§ãããããæãè²ããæããè²ãžã®åãæ¿ãããŸãã¯ãã®éã®åãæ¿ããã¹ã ãŒãºã«è¡ãããšãã§ããŸããã¢ãã¡ãŒã·ã§ã³ã¯ã2ã€ã®ããããã£ã«å¯ŸããŠ2ã€ã®é·ç§»ã宣èšããã®ãšåããããç°¡åã§ããäŸãšããŠã¯ã以äžã®äžè¬çãªèãã瀺ããŠããŸãã
body {
--duration: 0.5s;
--timing: ease;
color: var(--color);
background-color: var(--background-color);
transition:
color var(--duration) var(--timing),
background-color var(--duration) var(--timing);
}
ããŒã¯ã¢ãŒãã®èžè¡çãªãã¶ã€ã³
äžè¬ã«ãèªã¿èŸŒã¿ããã©ãŒãã³ã¹ã®çç±ãããèŠçŽ ã®ã¡ãã£ã¢å±æ§ã§prefers-color-schemeã®ã¿ã䜿çšããããšããå§ãããŸãïŒã¹ã¿ã€ã«ã·ãŒãã§ã¯ã€ã³ã©ã€ã³ã§ã¯ãããŸããïŒããå®éã«ã¯HTMLã§prefers-color-schemeãã€ã³ã©ã€ã³ã§äœ¿çšãããå ŽåããããŸã-ã³ãŒããè£ é£Ÿã¯ãŸãã«ãã®ãããªç¶æ³ã§ããã¢ãŒãã£ã¹ãã£ãã¯ãã¶ã€ã³-ããŒãžã®å šäœçãªããžã¥ã¢ã«ãã¶ã€ã³ïŒãµã€ãããŠãŒã¶ãŒã«ã©ã®ããã«åœ±é¿ããããã©ã®ãããªææ ãåŒã³èµ·ãããã
ããŒã¯ã¢ãŒãã§ã¯ãèšèšè ã¯éžæããç»åãšãç»åã®è²ã倿Žãããã©ãããæ±ºå®ããå¿ èŠããããŸããé©åã§ãã<picture>èŠçŽ ã䜿çšããããšã«ããã<source>ã«è¡šç€ºãããç»åãã¡ãã£ã¢å±æ§ã«äŸåãããããšãã§ããŸãã以äžã®äŸã§ã¯ãããŒã¯ã¢ãŒãã®è¥¿åçãšã©ã€ãã¢ãŒãã®æ±åçã瀺ããŠããŸããèšå®ãæå®ãããŠããªãå Žåã¯ããšã«ããæ±åçã®ããã©ã«ãã§ãããã¡ãããç»åã¯ç§ã®äŸã瀺ããŠããã ãã§ããããã€ã¹ã®ããŒã¯ã¢ãŒãããªã³ã«ããŠãéãã確èªããŸãã
<picture>
<source srcset="western.webp" media="(prefers-color-scheme: dark)">
<source srcset="eastern.webp" media="(prefers-color-scheme: light), (prefers-color-scheme: no-preference)">
<img src="eastern.webp">
</picture>
ããŒã¯ã¢ãŒããç¡å¹ã«ãã
äžèšã®ããã«ãã»ãšãã©ã®ãŠãŒã¶ãŒã¯èªåã®å¥œã¿ãçŸç奜ã¿ã«åºã¥ããŠããŒã¯ã¢ãŒããéžæããŸããäžéšã®ãŠãŒã¶ãŒã¯ãOS UIãæããªããWebããŒãžã以åãšåãããã«è¡šç€ºãããããšã奜ã¿ãŸããã¢ã¯ã·ã§ã³ãã©ã³ïŒæåã«ãã©ãŠã¶ãprefers-color-schemeãä»ããŠéä¿¡ããä¿¡å·ãåŸ ã¡ã次ã«ãŠãŒã¶ãŒãå¿ èŠã«å¿ããŠã·ã¹ãã ã¬ãã«ã®èšå®ãäžæžãã§ããããã«ããŸãã
ã«ã¹ã¿ã èŠçŽ <dark-mode-toggle>
ãã¡ããããã®ãããªã³ãŒããèªåã§äœæããããšãã§ããŸããããã®ç®çã®ããã«ç¹å¥ã«äœæããæ¢è£œã®èŠçŽ ïŒWebã³ã³ããŒãã³ãïŒã䜿çšããããšãã§ããŸããããã¯<dark-mode-toggle>ãšåŒã°ããå®å šã«ã«ã¹ã¿ãã€ãºã§ãããã°ã«ïŒããŒã¯ã¢ãŒãïŒãªã³/ãªãïŒãŸãã¯ããŒãã¹ã€ããã£ãŒïŒããŒãïŒã©ã€ã/ããŒã¯ïŒãããŒãžã«è¿œå ããŸãã以äžã®ãã¢ã¯ãåäœäžã®èŠçŽ ã瀺ããŠããŸãïŒãããç§ã¯äžèšã®ä»ã® ãã¹ãŠã®äŸ ã§æ éã«äœ¿çšããŸããïŒã
<dark-mode-toggle
legend="Theme Switcher"
appearance="switch"
dark="Dark"
light="Light"
remember="Remember this"
></dark-mode-toggle>
ã©ã€ãã¢ãŒãã®
<dark-mode-toggle>ïŒããŒã¯ã¢ãŒãã®<dark-mode-toggle>ïŒ
以äžã®ãã¢ã®å³äžé ã«ããããŒã¯ã¢ãŒãã³ã³ãããŒã«ãã¯ãªãã¯ãŸãã¯ã¿ããããŠã¿ãŠãã ããã3çªç®ãš4çªç®ã®ã³ã³ãããŒã«ã®ãã§ãã¯ããã¯ã¹ããªã³ã«ãããšãããŒãžããªããŒãããŠããéžæããã¢ãŒããã©ã®ããã«èšæ¶ããããã確èªã§ããŸããããã«ããã蚪åè ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããŒã¯ã¢ãŒãã«ä¿ã¡ãªããããµã€ããã©ã€ãã¢ãŒãã§æ¥œããããšãã§ããŸãã
çµè«
ããŒã¯ã¢ãŒãã§ã®äœæ¥ãšç¶æã¯æ¥œããã§ãïŒãã¶ã€ã³ã®æ°ããå¯èœæ§ãéãããŠããŸããããŒã¯ã¢ãŒããéžæãããšããŠãŒã¶ãŒããã幞ãã«ããããšãã§ããŸããã¯ããèœãšã穎ããããå³å¯ãªãã¹ããå¿ èŠã§ãããããŒã¯ã¢ãŒãã¯ãŠãŒã¶ãŒã®ããšãæ°ã«ãããŠããããšã瀺ãçµ¶å¥œã®æ©äŒã§ãããã®èšäºã§èª¬æãããã¹ããã©ã¯ãã£ã¹ãšãã«ã¹ã¿ã ã®<dark-mode-toggle>èŠçŽ ã®ãããªã©ã€ãããã¯ã¯ããã°ãããããŒã¯ã¢ãŒããäœæããã®ã«åœ¹ç«ã¡ãŸãã
䟿å©ãªãªã³ã¯
åªå -ã«ã©ãŒã¹ããŒã ã¡ãã£ã¢ã¯ãšãªïŒ
- Chromeãã©ãããã©ãŒã ã®ã¹ããŒã¿ã¹ããŒãž
- ã¯ãã ãã°
- ã¡ãã£ã¢ã¯ãšãªã¬ãã«5仿§
ã«ã©ãŒã¹ããŒã ã¡ã¿ã¿ã°ïŒ
- Chromeãã©ãããã©ãŒã ã®ã¹ããŒã¿ã¹ããŒãž
- ã¯ãã ãã°
- CSSè²èª¿æŽã¢ãžã¥ãŒã«ã¬ãã«1仿§
- ã¡ã¿ã¿ã°ãšCSSããããã£ã®CSSWGGitHubã®åé¡
- HTML WHATWG GitHub Issue for the meta tag
dark mode:
- Material Design â Dark Theme
- Dark Mode in Web Inspector
- Dark Mode Support in WebKit
- Apple Human Interface Guidelines â Dark Mode
: