CSS
Proprietà personalizzate (variabili)
Ricerca…
introduzione
Le variabili CSS consentono agli autori di creare valori riutilizzabili che possono essere utilizzati in tutto un documento CSS.
Ad esempio, è comune nei CSS riutilizzare un singolo colore nel documento. Prima delle variabili CSS questo significherebbe riutilizzare lo stesso valore di colore più volte in un documento. Con le variabili CSS il valore del colore può essere assegnato a una variabile e referenziato in più punti. Questo rende più semplice cambiare i valori ed è più semantico rispetto all'utilizzo di valori CSS tradizionali.
Sintassi
- : root {} / * pseudo-classe che consente una maggiore definizione globale di variabili * /
- --variable-name: value ; / * definisce la variabile * /
- var (- nome-variabile, valore-predefinito ) / * usa la variabile definita con il valore di default fallback * /
Osservazioni
Le variabili CSS sono attualmente considerate una tecnologia sperimentale.
SUPPORTO AL BROWSER / COMPATIBILITÀ
Firefox: versione 31 + (abilitato per impostazione predefinita)
Maggiori informazioni da Mozilla
Chrome: versione 49 + (abilitata per impostazione predefinita) .
"Questa funzione può essere abilitata nella versione 48 di Chrome per i test abilitando la funzionalità experimental Web Platform
. Inserisci chrome://flags/
nella barra degli indirizzi di Chrome per accedere a questa impostazione."
IE: non supportato.
Edge: Under Development
Safari: versione 9.1+
Colore variabile
:root {
--red: #b00;
--blue: #4679bd;
--grey: #ddd;
}
.Bx1 {
color: var(--red);
background: var(--grey);
border: 1px solid var(--red);
}
Dimensioni variabili
:root {
--W200: 200px;
--W10: 10px;
}
.Bx2 {
width: var(--W200);
height: var(--W200);
margin: var(--W10);
}
Cascading variabile
Le variabili CSS si sovrappongono in modo simile alle altre proprietà e possono essere ripristinate in modo sicuro.
È possibile definire le variabili più volte e solo la definizione con la massima specificità verrà applicata all'elemento selezionato.
Supponendo questo HTML:
<a class="button">Button Green</a>
<a class="button button_red">Button Red</a>
<a class="button">Button Hovered On</a>
Possiamo scrivere questo CSS:
.button {
--color: green;
padding: .5rem;
border: 1px solid var(--color);
color: var(--color);
}
.button:hover {
--color: blue;
}
.button_red {
--color: red;
}
E ottieni questo risultato:
Validi / invalidi
Denominazione Quando si nominano le variabili CSS, contiene solo lettere e trattini, proprio come le altre proprietà CSS (es: line-height, -moz-box-sizing) ma dovrebbe iniziare con due trattini (-)
//These are Invalids variable names
--123color: blue;
--#color: red;
--bg_color: yellow
--$width: 100px;
//Valid variable names
--color: red;
--bg-color: yellow
--width: 100px;
Le variabili CSS sono sensibili al maiuscolo / minuscolo.
/* The variable names below are all different variables */
--pcolor: ;
--Pcolor: ;
--pColor: ;
Spazio vuoto vs.
/* Invalid */
--color:;
/* Valid */
--color: ; /* space is assigned */
concatenazioni
/* Invalid - CSS doesn't support concatenation*/
.logo{
--logo-url: 'logo';
background: url('assets/img/' var(--logo-url) '.png');
}
/* Invalid - CSS bug */
.logo{
--logo-url: 'assets/img/logo.png';
background: url(var(--logo-url));
}
/* Valid */
.logo{
--logo-url: url('assets/img/logo.png');
background: var(--logo-url);
}
Attento quando si usano le unità
/* Invalid */
--width: 10;
width: var(--width)px;
/* Valid */
--width: 10px;
width: var(--width);
/* Valid */
--width: 10;
width: calc(1px * var(--width)); /* multiply by 1 unit to convert */
width: calc(1em * var(--width));
Con le domande dei media
È possibile reimpostare le variabili all'interno delle query multimediali e avere quei nuovi valori in cascata ovunque vengano utilizzati, cosa che non è possibile con le variabili del preprocessore.
Qui, una query multimediale modifica le variabili utilizzate per impostare una griglia molto semplice:
HTML
<div></div>
<div></div>
<div></div>
<div></div>
CSS
:root{
--width: 25%;
--content: 'This is desktop';
}
@media only screen and (max-width: 767px){
:root{
--width:50%;
--content: 'This is mobile';
}
}
@media only screen and (max-width: 480px){
:root{
--width:100%;
}
}
div{
width: calc(var(--width) - 20px);
height: 100px;
}
div:before{
content: var(--content);
}
/* Other Styles */
body {
padding: 10px;
}
div{
display: flex;
align-items: center;
justify-content: center;
font-weight:bold;
float:left;
margin: 10px;
border: 4px solid black;
background: red;
}
Puoi provare a ridimensionare la finestra in questa demo di CodePen
Ecco uno screenshot animato del ridimensionamento in azione: