Propiedades personalizadas más inteligentes con la nueva API de Houdini

Transiciones y protección de datos en CSS

Propiedades personalizadas de CSS, también conocidas como CSS variables, te permiten definir tus propiedades en CSS y usar sus valores en toda tu o CSS. Si bien son increíblemente útiles hoy, tienen deficiencias que pueden hacerlas trabajar con ellos: pueden tener cualquier valor y pueden anulada por algo inesperado, siempre heredan sus valores de de su madre o padre, y no puedes realizar la transición. Con las propiedades de CSS y Valores de nivel de API 1 ahora disponibles en Chrome 78, se trascienden estas deficiencias, lo que hace que CSS propiedades personalizadas son muy útiles.

¿Qué es Houdini?

Antes de hablar sobre la nueva API, hablemos rápidamente sobre Houdini. El CSS-TAG El Grupo de trabajo de Houdini, mejor conocido como CSS Houdini o simplemente Houdini, existe para "desarrollar funciones que expliquen la "magia" del estilo y el diseño en la Web". El conjunto de especificaciones de Houdini es el siguiente: diseñada para ampliar la potencia del motor de renderizado del navegador, lo que permite que tanto más detalles sobre nuestros estilos y la capacidad de extender nuestro motor de renderizado. De esta forma, los valores de CSS escritos en JavaScript y polyfills o la creación de nuevos CSS sin un acierto de rendimiento. Houdini tiene el potencial potenciar la creatividad en la Web.

Nivel de API 1 de propiedades y valores de CSS

El nivel de API de propiedades y valores de CSS 1 (Houdini Props y Vals) nos permite estructurar nuestras propiedades personalizadas. Esta es la actual cuando se usan propiedades personalizadas:

.thing {
  --my-color: green;
}

Dado que las propiedades personalizadas no tienen tipos, se pueden anular de forma maneras. Por ejemplo, piensa en lo que sucede si defines --my-color con una URL.

.thing {
  --my-color: url('not-a-color');
  color: var(--my-color);
}

En este caso, dado que no se escribe --my-color, no se detecta si una URL no es válida. valor del color. Cuando lo usamos, recurre a los valores predeterminados (negro para color, transparente para background). Con Houdini Props y Vals, las propiedades personalizadas pueden registrarse para que el navegador sepa lo que debe ser.

Ahora, la propiedad personalizada --my-color se registra como un color. Esto le indica al navegador qué tipos de valores están permitidos y cómo puede escribirlos y tratarlos propiedad.

Anatomía de una propiedad registrada

El registro de una propiedad se ve de la siguiente manera:

window.CSS.registerProperty({
  name: '--my-color',
  syntax: '<color>',
  inherits: false,
  initialValue: 'black',
});

Se admiten las siguientes opciones:

name: string

Es el nombre de la propiedad personalizada.

syntax: string

Cómo analizar la propiedad personalizada En la especificación de Unidades y valores de CSS, encontrarás una lista completa de posibles valores. La configuración predeterminada es *.

inherits: boolean

Indica si hereda el valor de su elemento superior. La configuración predeterminada es true.

initialValue: string

Valor inicial de la propiedad personalizada.

Analiza syntax con más detalle. Existen varios certificados válidos Opciones que van desde números hasta colores <custom-ident> de tipos de datos. Estas sintaxis también se pueden modificar usando los siguientes valores

  • Adjuntar + significa que acepta una lista de valores separados por espacios de esa sintaxis. Por ejemplo, <length>+ sería una lista separada por espacios de largos
  • Agregar # significa que acepta una lista de valores separados por comas de esa sintaxis. Por ejemplo, <color># sería una lista separada por comas de colores
  • Agregar | entre sintaxis o identificadores significa que cualquiera de los valores proporcionados de ese tipo sean válidas. Por ejemplo, <color># | <url> | magic permitiría cualquiera de las siguientes opciones: una lista de colores separados por comas, una URL o la palabra magic.

Gotchas

Hay dos trampas con Houdini Props y Vals. La primera es que, una vez definida, no hay forma de actualizar una propiedad registrada existente, y tratar de volver a registrar una propiedad, se mostrará un error que indica que ya se definido.

En segundo lugar, a diferencia de las propiedades estándares, las propiedades registradas no se validan cuando cuando se las analiza. En cambio, se validan cuando se calculan. Eso significa que tanto que los valores no válidos no aparezcan como no válidos cuando se inspeccionan propiedades e incluir una no válida después de una válida no tendrá resguardo. al válido; una propiedad no válida, sin embargo, recurrirá a la cuenta predeterminado de la propiedad.

Cómo animar propiedades personalizadas

Una propiedad personalizada registrada ofrece una bonificación divertida más allá de la verificación de tipo: y la capacidad de animarlos. Un ejemplo básico de animación se ve de la siguiente manera:

<script>
CSS.registerProperty({
  name: '--stop-color',
  syntax: '<color>',
  inherits: false,
  initialValue: 'blue',
});
</script>

<style>
button {
  --stop-color: red;
  transition: --stop-color 1s;
}

button:hover {
  --stop-color: green;
}
</style>

Cuando te desplaces sobre el botón, la animación se moverá de rojo a verde. Sin pero pasará de un color a otro. sin estar registrado, el navegador no sabe qué esperar entre una valor y el siguiente y, por lo tanto, no pueden garantizar la capacidad para realizar la transición. Sin embargo, este ejemplo puede ir un paso más allá para animar los gradientes de CSS. El El siguiente CSS se puede escribir con la misma propiedad registrada:

button {
  --stop-color: red;
  background: linear-gradient(var(--stop-color), black);
  transition: --stop-color 1s;
}

button:hover {
  --stop-color: green;
}

Esto animará nuestra propiedad personalizada que forma parte de linear-gradient, por lo que animando nuestro gradiente lineal. Consulta el problema a continuación para ver el código completo en acción y jugar con ella tú mismo.

Conclusión

Houdini está en camino a los navegadores y, con él, formas completamente nuevas de trabajar con CSS y extenderlo. Con la pintura Ya se envió la API y ahora Custom Props and Vals, nuestra caja de herramientas de creatividad se está expandiendo, lo que nos permite definir las propiedades de CSS escritas y usarlas para crear y animar nuevas los diseños. También hay más temas en camino, en la edición de Houdini en la fila, en la que puedes otorgar comentarios y ver qué sigue para Houdini. Houdini existe para desarrollar funciones que explican la "magia" del estilo y el diseño en la Web, así que, sal y darles un buen uso a esas funciones mágicas.

Foto de Maik Jonietz activado Eliminar salpicadura