Colors: Allow setting the color scheme explicitly

In addition to the color scheme changing based on the system setting, enable
setting the color scheme explicitly by adding a color-scheme="light | dark" attribute
on the <html> element.

Doing this was a bit tricky. I originally implemented the grayscale ramp by
reversing it when prefers-color-scheme: dark. This was convenient, but meant that
setting the color scheme explicitly didn't work.

Along the way I discovered the light-dark() CSS function. Deploy that as the preferred
style if the browser supports it. Otherwise, fall back on the prefers-color-scheme
media queries. This function only works if color-scheme: light dark is set on the
:root element.
This commit is contained in:
Eryn Wells 2024-07-27 22:59:56 -07:00
parent cb8ad426d5
commit 8a00cc6de9
8 changed files with 53 additions and 29 deletions

View file

@ -2,11 +2,10 @@
# COMPONENT: SITE HEADER
*************************/
.site-header {
--color-nav-separator: var(--gray6);
font-family: var(--font-family-monospace);
margin-block: var(--space-m) var(--space-xl);
@media (prefers-color-scheme: dark) {
.site-header {
--color-nav-separator: var(--gray6);
}
}
@media (prefers-color-scheme: dark) {
@ -15,14 +14,21 @@
}
}
.site-header {
--color-nav-separator: light-dark(var(--gray6), var(--gray4));
font-family: var(--font-family-monospace);
margin-block: var(--space-m) var(--space-xl);
}
.site-header__content {
border-bottom: 2px dashed var(--gray6);
border-bottom: 2px dashed var(--color-nav-separator);
gap: var(--space-l);
grid-column: main-start / main-end;
padding-bottom: var(--space-xs);
.site-header__title {
color: var(--gray1);
color: var(--text-color-primary);
font-size: var(--text-m);
font-weight: normal;
letter-spacing: 0.05em;