Elementos reversibles con estilo 3D en CSS
- 👤 Andrés Cruz
 
    A lo largo del tiempo, hemos visto muchas cosas que podemos hacer con CSS; los selectores, animaciones y transiciones son algunos de los muchos componentes que muchas veces se encuentran presentes en las entradas anteriores sobre CSS, y esto es debido en gran parte a su versatilidad, fácil uso y por el gran efecto visual que se logra; esta entrada no será una excepción y veremos como hacer que un elemento sea reversible empleando las transiciones en CSS y las animaciones en CSS como un componente clave para la reversibilidad de los elementos HTML:
Posiciona el cursor encima del contenedor de color verde.
1.0 El código HTML
El código HTML base que emplearemos para mostrar todos los ejemplos es el siguiente:
        <div class="reversible reversibleImagen">
            <div id="atras"><span>1</span>
            </div>
            <div id="adelante"><span>2</span>
            </div>
        </div>
Tenemos dos divs que llamaremos adelante y atras respectivamente dentro de un bloque u otro div llamado reversible; la idea general es localizar ambos divs internos (adelante y atras) en una misma posición y rotar a su padre (reverso) para mostrar los divs de adelante a atrás y viceversa.
2.0 El código CSS
Antes de mostrar el CSS explicaremos las partes más importantes que debe de formar parte el CSS para hacer que un elemento sea reversible; veamos:
2.1 La propiedad perspectiva en CSS
La perspectiva en CSS agrega un factor de profundidad (Z) en los elementos HTML que es esencial para visualizar correctamente nuestro ejemplo; aunque ya existe una entrada en la que hablamos sobre la propiedad perspectiva en CSS más en detalle: Entendiendo la propiedad perspective (perspectiva) en CSS; esta propiedad será aplicado al padre del elemento reverso (que es el que rota).
2.2 La propiedad transform-style en CSS
Determina que los hijos del elemento asignado puedan ser visto en el espacio 3D ( preserve-3d) o no (flat).
2.3 La propiedad backface-visibility en CSS
Esta propiedad indica que si un elemento visto por su reverso (girado 180 grados) o -por detrás- debe ser visible (por defecto) o no; para nuestro ejemplo nos interesa que no sea visible debido a que al reverso de un elemento se encuentra otro elemento (adelante y atras).
Finalmente, el CSS:
.reversible{
    -webkit-transform-style : preserve-3d;
    transform-style : preserve-3d;
    -webkit-transition : -webkit-transform 3s ease;
    -webkit-transition : transform 3s ease;
    transition : transform 3s ease;
    margin: 0 auto;
    width : 200px;
    height : 200px;
}
.reversible:hover{
    -webkit-transform : rotateY(180deg);
    transform : rotateY(180deg);
}
.reversible div{
    position : absolute;
    top : 300px;
    width : 200px;
    height : 200px;
    -webkit-backface-visibility : hidden;
    backface-visibility : hidden;
    border:3px solid #000000;
}
.reversible div span{
    font-size: 180px;
    display:block;
    text-align:center;
    color:#FFF;
}
.reversible div img{
    width:200px;
    height:200px;
    object-fit: none;
}
.example1, .example2{
    -webkit-perspective : 500px;
    perspective : 500px;
}
#atras{
    background : #00FF00;
    -webkit-transform : rotateY( 180deg );
    transform : rotateY( 180deg );
}
#adelante{
    background : #FF0000;
}
La razón de estas líneas:
#atras{
    /*Otras propiedades y valores*/
    -webkit-transform : rotateY( 180deg );
    transform : rotateY( 180deg );
}
Es para mostrar el div atras, producto del efecto que tendría la propiedad backface-visibility sobre el div:
Animaciones y los elementos reversibles
Como comentamos al inicio de esta entrada, también es posible emplear las animaciones para crear elementos reversibles como el siguiente:
Para ello empleamos las siguientes líneas de código CSS:
@-webkit-keyframes reverso {
    0%{
    -webkit-transform : rotateY(0deg);
    transform : rotateY(0deg);
}
50%{
    -webkit-transform : rotateY(180deg);
    transform : rotateY(180deg);
}
100%{
    -webkit-transform : rotateY(0deg);
    transform : rotateY(0deg);
}
}
@keyframes reverso {
    0%{
    -webkit-transform : rotateY(0deg);
    transform : rotateY(0deg);
}
100%{
    -webkit-transform : rotateY(180deg);
    transform : rotateY(180deg);
}
}
.reversibleImagen{
    -webkit-animation: reverso 5s infinite;
    animation: reverso 5s infinite;
}
Inclusive, poniéndonos un poquito más creativos, podemos agregarles imágenes a los divs internos (adelante y atras) en conjunto con la propiedad object-fit tratado anteriormente en: La propiedad object-fit en CSS para ajustar la imagen al contenedor:
 
         
        Les dejo un link de un excelente artículo en el cual me apoyé para crear esta entrada:
Acepto recibir anuncios de interes sobre este Blog.
En esta entrada veremos como hacer que un elemento sea reversible empleando las animaciones y transiciones en CSS.
| 👤 Andrés Cruz
