# Colori

La versione 5 del DiviChild introduce una nuova gestione dei colori.
Sono definite di default tre famiglie di colori, più i colori per i messaggi di sistema.
Le tre famiglie principali sono:

  • neutral
  • primary
  • secondary

Tutte e tre le famiglie sono espresse con l'intero range di pesi da 50 a 900, quindi avremo ad esempio $neutral-50 o $primary-500 e così via.

Ogni famiglia ha poi un sottoinsieme di variabili semantiche a tre valori ciascuna:

  • light
  • main
  • dark

Quindi avremo ad esempio $primary-light,$primary-main e $primary-dark.
Di default i valori usati nelle tre nomenclature sono i rispettivi:

  • light: 200
  • main: 500
  • dark: 900

# Default Palette

Elenco delle variabili principali (semantiche) della palette di default:

Colore CSS Var Default Darkmode
Primario --fc-primary-main #05aef3 #05aef3
Primario Light --fc-primary-light #82d7f8 #82d7f8
Primario Dark --fc-primary-dark #005b9b #005b9b
Secondary --fc-secondary-main #ee0076 #ee0076
Secondary Light --fc-secondary-light #f38fbd #f38fbd
Secondary Dark --fc-secondary-dark #8a035d #8a035d
Neutral --fc-neutral-main #9fa3a9 #ecf2f7
Neutral Light --fc-neutral-light #ecf2f7 #f6fbff
Neutral Dark --fc-neutral-dark #212529 #9fa3a9

# Dark Mode

Nella versione 5 è stata introdotta la possibilità di gestione del darkmode, ovvero l'adattamento dei colori, attraverso apposita media query, alla colorazione di default dell'interfaccia del sistema operativo adottata dall'utente. Questa feature si basa sul cambiamento del valore assegnato alle variabili "semantiche" css che si adattano alla colorazione scelta.
Al momento sono "reattive" alla media query prefers-color-scheme soltanto alcune proprietà come il background del body, il colore del font, i bordi e alcuni background secondary che possono essere usati laddove serve.

# Gestione Dark Mode

Per gestire il dark mode è necessario un approccio basato sulle variabili semantiche (questo per facilitare il lavoro e l'uso delle variabili sottoposte a cambiamento).
Un'occhiata al file principale delle variabili scss darà un quadro più preciso.

In sintesi, facendo un esempio, se intendessimo sottoporre il background di un box a cambiamento, potremmo definire, a livello scss, una variabile come $box-bg-light e la sua variante dark $box-bg-dark.

A livello di trasformazione in css le due variabili confluiranno nell'unica variabile --fc-box-bg sottoposta a media query:

:root {
    --#{$prefix}-box-bg: #{$box-bg-light};

    @media (prefers-color-scheme: dark) {
        --#{$prefix}-box-bg: #{$box-bg-dark};
    }
}

# Il data attribute "colorscheme"

Attraverso il data attribure data-colorscheme="", che accetta i valori "light" e "dark", è possibile gestire lo schema colori a prescindere dalle impostazioni del browser dell'utente. Questa tecnica richiede però l'uso di Javascript.

# I mixin color scheme

Per facilitare la stesura delle variabili css, nel file _root.scss sono presenti due mixin scss color_scheme_light() e color_scheme_dark(), usati poi nelle direttive :root{} e nei selettori body[data-colorscheme="light"] {} e body[data-colorscheme="dark"] {}.

Questo approccio è consogliato anche per lo stile custom, e nello specifico per il file custom/_root-custom.scss

# Palette Generators

http://mcg.mbitson.com/ (opens new window)
http://palettegenerator.stagingfattoria.it/ (opens new window)
https://www.webfx.com/blog/web-design/material-design-color-generators/ (opens new window)