- La regla
@property ya es compatible con todos los navegadores modernos y ofrece una forma de definir explícitamente la sintaxis, el valor inicial y la herencia de las propiedades personalizadas de CSS
- Ha pasado mucho tiempo desde la primera introducción de CSS Houdini y la API de CSS Properties and Values
- A través de demos que exploran las posibilidades de
@property, se puede ver lo que la próxima generación de CSS puede ofrecer
Calls to action (elementos de llamada a la acción)
- Los CTA llamativos en páginas web se usan en muchos sitios
- Probó este estilo directamente y el resultado puede verse en CodePen
- Si abres el panel CSS del demo, puedes ver la regla
@property relacionada con la propiedad personalizada que necesita animación
@property --gradient-angle {
syntax: "";
initial-value: 0deg;
inherits: false;
}
- La regla
@property le indica al navegador qué sintaxis permitir y establece el valor inicial en 0deg
- Esto permite que el navegador interpole suavemente de
0deg a 360deg y muestre un gradiente giratorio
@keyframes rotate-gradient {
to {
--gradient-angle: 360deg;
}
}
.rotate-gradient {
background: conic-gradient(from var(--gradient-angle), transparent, black);
animation: rotate-gradient 10s linear infinite;
}
- Un demo simple de rotación de gradiente muestra las pocas líneas de código necesarias para implementar esta idea
Transición suave al pasar el cursor
- Cuando se pasa el cursor sobre un elemento, se necesitan algunos componentes especiales para lograr una transición suave del gradiente
- Cada propiedad personalizada que necesita animación declara su sintaxis en la definición
@property, para que el navegador pueda interpolar los cambios de valor sin saltos
.shiny-cta {
background: linear-gradient(var(--shiny-cta-bg), var(--shiny-cta-bg)) padding-box,
conic-gradient(from calc(var(--gradient-angle) - var(--gradient-angle-offset)),
transparent, var(--shiny-cta-highlight) var(--gradient-percent),
var(--gradient-shine) calc(var(--gradient-percent) * 2),
var(--shiny-cta-highlight) calc(var(--gradient-percent) * 3),
transparent calc(var(--gradient-percent) * 4)) border-box;
}
- El valor
--gradient-percent determina el tamaño del área brillante, y al hacer hover la luz se alarga con un porcentaje mayor
- El valor
--gradient-angle-offset reajusta el ángulo del gradiente para que la luz no retroceda al hacer hover
Ajuste de la velocidad de rotación
- Un truco de CSS para ralentizar la rotación al hacer hover resulta muy útil
- Se declara la misma animación de rotación dos veces, y la segunda se configura en reversa para dejarla pausada, dividiendo la duración a la mitad
- Cuando el elemento entra en hover,
animation-play-state: running sobrescribe el valor pausado y hace que la rotación se vuelva más lenta, a media velocidad
Pequeños puntos brillantes
- Se añade un efecto de pequeños puntos brillantes dentro del botón
- Para esto se crea un fondo con
radial-gradient
.shiny-cta::before {
--position: 2px;
--space: calc(var(--position) * 2);
background: radial-gradient(circle at var(--position) var(--position),
white calc(var(--position) / 4),
transparent 0) padding-box;
background-size: var(--space) var(--space);
background-repeat: space;
}
- La propiedad personalizada
--gradient-angle se usa en una máscara conic-gradient para revelar mientras rota parte del patrón de puntos
Mejoras de color al hacer hover
- El estilo de hover se mejora para darle más profundidad y hacerlo más llamativo
- El texto del botón se envuelve en un elemento
span, y se aplica una sombra de caja desenfocada para que se expanda y contraiga al hacer hover
Introducción de un nuevo estilo
- Muchas de las técnicas anteriores eran casi imposibles hasta hace muy poco
- Definir explícitamente las propiedades personalizadas abre muchas oportunidades
- Genera expectativa ver cómo se aprovechará
@property en aplicaciones grandes y sistemas de diseño
Resumen de GN⁺
- La regla
@property ofrece una forma de definir explícitamente la sintaxis, el valor inicial y la herencia de las propiedades personalizadas de CSS
- Gracias a esta función, los desarrolladores web pueden implementar animaciones y estilos más complejos y sofisticados
- En particular, tiene un gran potencial de uso en aplicaciones a gran escala y sistemas de diseño
- Otros proyectos con funciones similares incluyen CSS Houdini y la API de CSS Properties and Values
1 comentarios
Comentarios en Hacker News
Se siente como si el cerebro se resistiera al encontrarse con un concepto nuevo
@propertydirectamente para entenderloNo es desarrollador web, pero puede usar frameworks web básicos
Le resultan interesantes los trabajos recientes en CSS, especialmente Houdini
Que algo sea posible no significa que necesariamente deba hacerse
Las cosas que se pueden hacer con animaciones CSS se sienten como magia
Es una demo técnicamente interesante, pero no deberían animarse los botones de esta manera
Los envíos anteriores no recibieron mucha atención, pero son interesantes y educativos
Este sitio web le da alegría
Disfruta trabajar con CSS, pero ve que sus colegas tienen dificultades
Hace tiempo que no hacía desarrollo web y le tomó tiempo entender qué hace esta función
@property --gradient-angle {...}inherits: false;, pero no entiende por qué es necesaria@property@property