Haremos una introducción a las variables CSS y veremos algunos ejemplos sobre cómo usarlas para poder sacarles todo su potencial: tanto por parte del programador como del visitante de la web. A continuación veremos cómo podemos aplicarlo fácilmente a WordPress aprendiendo a crear un plugin o un tema hijo con unas pocas líneas de código.
5. Icons made by Freepik from www.flaticon.com
Esta presentación contiene fragmentos de código
No todo el código está completo. Es funcional pero
es a título de ejemplo
Para cualquier duda consulte con su programador
6. ÍNDICE
1. INTRODUCCIÓN A LAS VARIABLES CSS
2. CÓMO SE USAN
3. ¡VAMOS AL LÍO!
4. EJEMPLOS DE USO
5. INTEGRACIÓN CON WORDPRESS
8. Características
● Similares a las variables de los preprocesadores (LESS, SCSS …)
● No necesitan ser compiladas
● No hace falta refrescar la página para ver los cambios
● Código semántico
● Evitan código duplicado
● Facilitan cambios
● Integración con preprocesadores
● Compatibles con la mayoría de navegadores
INTRODUCCIÓN A LAS VARIABLES CSS
9. Similares a las variables de los preprocesadores
CARACTERÍSTICAS
$card-padding: 2em;
$main-color: #BADA55;
.card {
padding: $card-padding;
background-color: $main-color;
}
.title {
color: $main-color;
}
:root {
--main-color: #BADA55;
--card-padding: 2em;
}
.card {
padding: var(--card-padding);
background-color:var(--main-color);
}
.title {
color: var(--main-color);
}
Variables CSS
Permiten guardar valores para poder usarlos múltiples veces
SCSS
10. No necesita compilación
CARACTERÍSTICAS
$card-padding: 2em;
$main-color: #BADA55;
.card {
padding: $card-padding;
background-color: $main-color;
}
.title {
color: $main-color;
}
.card {
padding: 2em;
background-color: #BADA55;
}
.title {
color: #BADA55;
}
Una vez compiladas, las variables de los preprocesadores mantienen su valor
SCSS compiladoSCSS sin compilar
:root {
--main-color: #BADA55;
--card-padding: 2em;
}
.card {
padding: var(--card-padding);
background-color:var(--main-color);
}
.title {
color: var(--main-color);
}
Variables CSS
11. Código semántico
CARACTERÍSTICAS
.card {
padding: 2em;
background: linear-gradient(
to bottom,
rgba(0,0,255,1),
rgba(0,0,255,0.2));
color: #BADA55;
}
:root {
--card-padding: 2em;
--blue-gradient: linear-gradient(
to bottom,
rgba(0,0,255,1),
rgba(0,0,255,0.2));
--brand-color: #BADA55;
}
.card {
padding: var(--card-padding);
background: var(--blue-gradient);
color: var(--brand-color);
}
Si las variables están bien definidas, el código es más legible
CSS usando variablesCSS sin usar variables
12. Integración con preprocesadores
CARACTERÍSTICAS
:root {
--main-color: red;
}
$main-color: var(--main-color);
.card {
color: $main-color;
}
:root {
--main-color: red;
}
.card {
color: var(--main-color);
}
Se pueden integrar con preprocesadores para conseguir el máximo potencial de ambos
SCSS compilado usando variablesSCSS sin compilar usando variables
13. Compatibilidad con la mayoría de navegadores
CARACTERÍSTICAS
https://caniuse.com/#feat=css-variables
15. DECLARACIÓN
CÓMO SE USAN
--padding: 20px;
--main-color: #BADA55;
--Shadow: 0 0 10px 5px cyan;
--gradient: linear-gradient (to left, blue, red);
--color: var(--main-color);
Se declaran con un doble
guión seguido del nombre
de la variable.
Permiten guiones y
mayúsculas.
Pueden contener cualquier
valor válido de propiedades
CSS, incluso valores
complejos.
Se puede asignar otra
variable como valor.
16. color: var(--main-color);
color: var(--main-color, yellow);
color: var(--main-color, var(--fallback-color, #FF0))
color: red;
color: var(--main-color);
USO
CÓMO SE USAN
Para llamarlas, se usa la
función: var().
Se puede añadir un valor
como fallback, para que se
use en caso que la variable
no esté definida.
Se puede usar otra variable
como fallback.
Para evitar
incompatibilidad con
navegadores, se puede
definir la propiedad sin
variable.
17. SCOPE
CÓMO SE USAN
// Global scope
:root {
--color: red;
}
// Local scope
.card {
--card-color: blue;
}
div {
color: var(--color);
background-color: var(--card-color);
}
Se puede delimitar el scope
o ámbito de uso.
Si se declaran en el scope
:root serán accesibles
desde todo el documento.
Si se declaran en un ámbito
limitado, sólo de podrán
usar dentro de ése
elemento.
div.card {
color: var(--color);
background-color: var(--card-color);
}
24. 1. Controlar el elemento “root”:
const root = document.documentElement;
¡VAMOS AL LÍO!
THEME DINÁMICO
Los 4 pasos de JavaScript
4. Modificar el valor de la variable:
function changeVar() {
root.style.setProperty(‘--variable’, ‘valor’);
}
2. Controlar el “disparador” de la acción:
const btn = document.getElementById(‘boton’);
3. Capturar el evento o acción:
boton.addEventListener( ‘click’, changeVar);
25. ¡VAMOS AL LÍO!
<button value="dark">Dark</button>
<button value="bright">Bright</button>
/* Definimos por defecto el tema claro */
:root {
--text-color: #222;
--bg-color: hsl(0,0%,80%);
--bg-color-main: hsl(0,0%,95%);
}
header,footer {
color: var(--text-color);
background: var(--bg-color);
}
main {
background-color: var(--bg-color-main);
color: var(--text-color);
}
// Al hacer click en el botón cambiamos los estilos
const root = document.documentElement;
const themes = document.querySelectorAll('button');
themes.forEach((theme) => {
theme.addEventListener('click', changeTheme)
})
function changeTheme(ev) {
switch (ev.target.value) {
case 'bright':
root.style.setProperty('--text-color', '#222');
root.style.setProperty('--bg-color', 'hsl(0,0%,80%)');
root.style.setProperty('--bg-color-main', 'hsl(0,0%,95%)');
break;
case 'dark':
root.style.setProperty('--text-color', '#fff');
root.style.setProperty('--bg-color', 'hsl(0,0%,20%)');
root.style.setProperty('--bg-color-main', 'hsl(0,0%,40%)');
break;
}
}
THEME DINÁMICO
32. EJEMPLOS DE USO
<input type="range"
id="color-range" min="10" max="90"
value="0" step="1">
/* El color del main es el mismo que el
header/footer pero con más brillo */
:root {
--text-color: #fff;
--bg-color: hsl(0, 0%, 20%);
--bg-color-main: hsl(0, 0%, 40%);
}
header,footer {
color: var(--text-color);
background: var(--bg-color);
}
main {
background-color:var(--bg-color-main);
color: var(--text-color);
}
const root = document.documentElement;
const range = document.querySelector('#color-range');
range.addEventListener("input", changeTheme);
// El color de background se obtiene directamente del valor del input
// El color del texto es el inverso del valor del input
function changeTheme(e) {
let value = e.target.value;
let v = Number(value) + Number(20);
let bg = 'hsl(0,0%,'+ value +'%)';
let text = 'hsl(0,0%,'+ (100-value) +'%)';
let main = 'hsl(0,0%,'+ v +'%)';
root.style.setProperty("--bg-color", bg);
root.style.setProperty("--bg-color-main", main);
root.style.setProperty("--text-color", text);
}
2. INPUT TYPE: RANGE
38. <button id="batman"
value="batman">Batman</button>
/* Se usan las variables principales y se
definen otras para cada tema */
:root {
--batman-color-hue: ...
--batman-bg: …
--superman-color-hue: ...
--superman-bg: ...
--color-hue: 0;
--bg: 0;
}
main {
color: hsl(var(--color-hue), 100%, 50%);
background-color: var(--bg);
}
// Al pasar el cursor por encima del botón cambian los estilos
// A la variable principal se le asigna el valor de otra variable
const batman = document.getElementById('batman');
batman.addEventListener("mouseover", function(){
root.style.setProperty( '--color-hue', 'var(--batman-color-hue)' );
...
});
EJEMPLOS DE USO
4. PREVIEW (MOUSEOVER / MOUSEOUT)
42. <body data-theme="sith">
<header>...</header>
<main>
<p>A long time ago in a galaxy far far away...</p>
<article class="card">
<div class="card__bottom">
<h2></h2>
<button class="card__button">
JOIN US!
</button>
</div>
</article>
</main>
<footer>...</footer>
</body>
/* Se definen variables para cada tema y se usan de
forma genérica */
[data-theme="yoda"] {
--bg-img: url('yoda.jpg');
--cite: 'May WordPress be with you';
}
[data-theme="vader"] {
--bg-img: url('vader.jpg');
--cite: 'Join the WordPress side';
}
.card {
background-image: var(--bg-img);
}
.card h2:before {
content: var(--cite);
}
EJEMPLOS DE USO
6. DATA-ATTRIBUTE