el poder
de
css3
Rubén Bernárdez
@rubenbpv
AGENDA
- Futuro del CSS
- CSS Filters
- Interaction Media Features
- Object fit & position
- Custom properties
- Overscroll behavior
- Scroll snap
El futuro de css
CSS1, CSS2, CSS2.1
especificaciones completas
CSS3 😎
Dividido en módulos por niveles y estados
EL FUTURO DE CSS
EL FUTURO DE CSS
caniuse.com
css filters
COMPATIBILIDAD
css filters
interaction media features
Permiten tomar decisiones según cómo el usuario interactúa con la página
interaction media features
DEMO
😰
.button-label:hover {
border: 10px solid #00AF64;
}
interaction media features
DEMO
@media (hover: hover) and (pointer: fine) {
.button-label:hover {
border: 10px solid #00AF64;
}
}
🥳
COMPATIBILIDAD
interaction media features
object fit & position
Establece como se debe cambiar el contenido de un replace element (<img>, <video>, etc.) para que se ajuste a su contenedor
.img {
object-fit: fill | contain | cover | none | scale-down;
object-position: [left right] | [top bottom] | center;
object-position: 20% 70%;
object-position: 20px 150px;
}
OBJECT FIT & POSITION
DEMO
OBJECT FIT & POSITION
COMPATIBILIDAD
CUSTOM PROPERTIES
También llamadas "variables de CSS" permiten la declaración y el uso de valores usados en otras declaraciones de la hoja de estilo.
:root {
/* variable de ámbito global */
--main-bg-color: brown;
}
.foo {
background-color: var(--main-bg-color);
color: var(--font-color, red);
border-color: var(--my-var, var(--my-background, pink));
}
CUSTOM PROPERTIES
Desde CSS podemos obtener, modificar y crear propiedades personalizadas
.foo {
--background: #ccc;
background-color: var(--background);
transition: background-color 1s;
}
.foo:hover {
--background: #cce;
}
CUSTOM PROPERTIES
Las reglas de herencia en CSS también se aplican a las custom properties
<div class="uno">
<div class="dos">
<div class="tres"></div>
<div class="cuatro"></div>
</div>
</div>
.dos {
--test: 10px;
}
.tres {
--test: 2em;
}
En este caso, los resultados de var(--test) son:
- Para el elemento class="dos": 10px
- Para el elemento class="tres": 2em
- Para el elemento class="cuatro": 10px (Heredado de su padre)
- Para el elemento class="uno": valor no válido, que es el valor predeterminado de cualquier propiedad personalizada.
CUSTOM PROPERTIES
Desde Javascript podemos obtener, modificar y crear propiedades personalizadas
var element = document.querySelector('...');
// Obtener la valor desde el estilo inline
element.style.getPropertyValue("--my-var");
// Obtener valor desde cualquier lugar
getComputedStyle(element).getPropertyValue("--my-var");
// Establecer valor en estilo inline
element.style.setProperty("--my-var", jsVar + 4);
// Obtener valor global (:root)
getComputedStyle(document.documentElement).getPropertyValue('--color');
// Asignar valor global (:root)
document.documentElement.style.setProperty('--color', 'blue');
// Eliminar una custom property global (:root)
document.documentElement.style.removeProperty('--color');
CUSTOM PROPERTIES
DEMO
CUSTOM PROPERTIES
DEMO
CUSTOM PROPERTIES
DEMO
custom properties
COMPATIBILIDAD
OVERSCROLL-BEHAVIOR
Establece qué hace el navegador cuando se llega a los límites de desplazamiento de una capa
.demo {
/* Valores de la palabra clave */
overscroll-behavior: auto; /* default */
overscroll-behavior: contain;
overscroll-behavior: none;
/* Establece valor para eje X e Y */
overscroll-behavior: auto contain;
/* Sólo establece valor para un eje */
overscroll-behavior-x: contain;
overscroll-behavior-y: contain;
}
OVERSCROLL-BEHAVIOR
DEMO
body {
}
.modal {
overflow: auto;
}
.line {
border-bottom: 1px solid #ccc;
padding: 10px;
}
<div class="line">Line 01</div>
<div class="line">Line 02</div>
...
<div class="modal">
<div class="line">Modal 01</div>
<div class="line">Modal 02</div>
..
</div>
😩
OVERSCROLL-BEHAVIOR
DEMO
😎
body {
overscroll-behavior: none;
}
.modal {
overflow: auto;
overscroll-behavior-y: contain;
}
.line {
border-bottom: 1px solid #ccc;
padding: 10px;
}
<div class="line">Line 01</div>
<div class="line">Line 02</div>
...
<div class="modal">
<div class="line">Modal 01</div>
<div class="line">Modal 02</div>
..
</div>
overscroll-behavior
COMPATIBILIDAD
scroll snap
Permite forzar la posición de scroll final del viewport de un contenedor con scroll una vez la acción de scroll ha terminado
SCROLL SNAP
.demo {
/* Propiedad para el contenedor */
scroll-snap-type: none | [ x | y | block | inline | both ] [ mandatory | proximity ];
scroll-padding: 10px 15px 12px 14px;
/* Propiedad para los hijos */
scroll-snap-align: none | start | end | center;
scroll-margin: 10px 15px 12px 14px;
}
SCROLL SNAP
Polyfill recomendado: css-scroll-snap-polyfill
🥺
SCROLL SNAP
DEMO
SCROLL SNAP
DEMO
SCROLL SNAP
DEMO
SCROLL SNAP
COMPATIBILIDAD
one more thing...
tip: modales simples sin js
COMPATIBILIDAD
tip: modales simples sin js
tip: css supports
@supports (display: grid) {
div {
display: grid;
}
}
@supports not (display: grid) {
div {
float: right;
}
}
result = CSS.supports("text-decoration-style", "blink");
result = CSS.supports("display: flex");
result = CSS.supports("(--foo: red)");
result = CSS.supports(`(transform-style: preserve) or (-moz-transform-style: preserve)`);
// result is true or false
COMPATIBILIDAD
tip: css supports
GRACIAS :)
El poder de CSS3
By rubenbp
El poder de CSS3
- 566