Muchas veces debemos incluir una señal para que el usuario vea que se está cargando cierta parte del nuestro sitio, y nada mejor que los famosos “cargando” o “loader css”.
Pero esta vez, realizados y animados solo con CSS y sin imágenes…
Hoy veremos la creación de animaciones del tipo “cargando” empleando para ello solo hojas de estilo CSS, sin emplear ni una sola linea de JavaScript ni tampoco imágenes para funcionar.
La gran ventaja de realizar esto es que no recargamos nuestro sitio con imágenes ni elementos innecesarios.
Hoy en dia ya todos los navegadores soportan las hojas de estilo CSS3 con la que realizaremos este recurso.
En este ejemplo cree un DIV contenedor que lo hice de 200 x 200 pixeles:
<div id="contenedor"></div>
Y luego dentro creamos otro DIV al que le colocaremos el ID “loader” y le aplicamos la clase “loader”
<div id="contenedor"> <div class="loader" id="loader">Loading...</div> </div>
Esta clase “loader” contiene un trozo de código CSS que varias propiedades.
Para hacerlo en tus sitios, solo debes procurar incluir el DIV con ID “loader” y colocarle el trozo de código CSS que más te guste.
Aquí te doy 4 ejemplos de loader.
Loader CSS 1:
Codigo CSS:
.loader, .loader:before, .loader:after { background: #FFF; -webkit-animation: load1 1s infinite ease-in-out; animation: load1 1s infinite ease-in-out; width: 1em; height: 4em; } .loader:before, .loader:after { position: absolute; top: 0; content: ''; } .loader:before { left: -1.5em; } .loader { text-indent: -9999em; margin: 40% auto; position: relative; font-size: 11px; -webkit-animation-delay: 0.16s; animation-delay: 0.16s; } .loader:after { left: 1.5em; -webkit-animation-delay: 0.32s; animation-delay: 0.32s; } @-webkit-keyframes load1 { 0%, 80%, 100% { box-shadow: 0 0 #FFF; height: 4em; } 40% { box-shadow: 0 -2em #ffffff; height: 5em; } } @keyframes load1 { 0%, 80%, 100% { box-shadow: 0 0 #FFF; height: 4em; } 40% { box-shadow: 0 -2em #ffffff; height: 5em; } }
Loader CSS 2:
Codigo CSS:
.loader { font-size: 10px; margin: 30% auto; text-indent: -9999em; width: 11em; height: 11em; border-radius: 50%; background: #ffffff; background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%); position: relative; -webkit-animation: load3 1.4s infinite linear; animation: load3 1.4s infinite linear; } .loader:before { width: 50%; height: 50%; background: #FFF; border-radius: 100% 0 0 0; position: absolute; top: 0; left: 0; content: ''; } .loader:after { background: #0dcecb; width: 75%; height: 75%; border-radius: 50%; content: ''; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } @-webkit-keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }
Loader CSS 3:
Codigo CSS:
.loader { font-size: 20px; margin: 45% auto; width: 1em; height: 1em; border-radius: 50%; position: relative; text-indent: -9999em; -webkit-animation: load4 1.3s infinite linear; animation: load4 1.3s infinite linear; } @-webkit-keyframes load4 { 0%, 100% { box-shadow: 0em -3em 0em 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 0em #ffffff; } 12.5% { box-shadow: 0em -3em 0em 0em #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0em 0 0em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 25% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 0em #ffffff, 3em 0em 0 0.2em #ffffff, 2em 2em 0 0em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 37.5% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 0em #ffffff, 2em 2em 0 0.2em #ffffff, 0em 3em 0 0em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 50% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 0em #ffffff, 0em 3em 0 0.2em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 62.5% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 0em #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0em 0 0em #ffffff, -2em -2em 0 -0.5em #ffffff; } 75% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0em #ffffff; } 87.5% { box-shadow: 0em -3em 0em 0em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 0em #ffffff, -2em -2em 0 0.2em #ffffff; } } @keyframes load4 { 0%, 100% { box-shadow: 0em -3em 0em 0.2em #ffffff, 2em -2em 0 0em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 0em #ffffff; } 12.5% { box-shadow: 0em -3em 0em 0em #ffffff, 2em -2em 0 0.2em #ffffff, 3em 0em 0 0em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 25% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 0em #ffffff, 3em 0em 0 0.2em #ffffff, 2em 2em 0 0em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 37.5% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 0em #ffffff, 2em 2em 0 0.2em #ffffff, 0em 3em 0 0em #ffffff, -2em 2em 0 -0.5em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 50% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 0em #ffffff, 0em 3em 0 0.2em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 -0.5em #ffffff, -2em -2em 0 -0.5em #ffffff; } 62.5% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 0em #ffffff, -2em 2em 0 0.2em #ffffff, -3em 0em 0 0em #ffffff, -2em -2em 0 -0.5em #ffffff; } 75% { box-shadow: 0em -3em 0em -0.5em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 0.2em #ffffff, -2em -2em 0 0em #ffffff; } 87.5% { box-shadow: 0em -3em 0em 0em #ffffff, 2em -2em 0 -0.5em #ffffff, 3em 0em 0 -0.5em #ffffff, 2em 2em 0 -0.5em #ffffff, 0em 3em 0 -0.5em #ffffff, -2em 2em 0 0em #ffffff, -3em 0em 0 0em #ffffff, -2em -2em 0 0.2em #ffffff; } }
Loader CSS 4:
Codigo CSS:
.loader:before, .loader:after, .loader { border-radius: 50%; width: 2.5em; height: 2.5em; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation: load7 1.8s infinite ease-in-out; animation: load7 1.8s infinite ease-in-out; } .loader { margin: 8em auto; font-size: 10px; position: relative; text-indent: -9999em; -webkit-animation-delay: 0.16s; animation-delay: 0.16s; } .loader:before { left: -3.5em; } .loader:after { left: 3.5em; -webkit-animation-delay: 0.32s; animation-delay: 0.32s; } .loader:before, .loader:after { content: ''; position: absolute; top: 0; } @-webkit-keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em #ffffff; } 40% { box-shadow: 0 2.5em 0 0 #FFF; } } @keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em #ffffff; } 40% { box-shadow: 0 2.5em 0 0 #FFF; } }
Con estos simples pero efectivos loader css podemos embellecer nuestros sitios sin recargarlos ni aumentar el tiempo de carga de los mismos.
Si te interesa el desarrollo web, te recomiendo el siguiente recurso:
Saludos!
Cristian
muy bueno el tutorial para hacer estos loader. Soy novato en este mundo y mi duda es si sería necesario utilizar javascript para que funcione cuando se está cargando una imagen por ejemplo.
Gracias
Claro, para manejar los loading de forma dinámica debes usar Javascript cambiando la clase del loading o ocultandolo una vez que se cargo la imagen.
Saludos!
Y para posicionarlo en el centro de la web como se haría?
Hola Cristian, disculpa necesito hacer esto pero con un texto que valla formandose por lineas, como deberia hacerlo?
buenas tardes soy nuevo en esto y ps me gustara saber en el formato que se deve guardar una ves que se introdusca el codigo
El codigo CSS lo puede incorporar dentro del archivo HTML entre las etiquetas
como puedo intercambiar los colores es decir que el fondo sea blanco y el loading sea azul, intente agregar color con background-color y se pierde el efecto…
Intercambia los valores de las propiedades «background-color» por los de «color»
No, no me funciona, solo se muestra un circulo azul, y las barras de mi navegador se hacen pequeñas y grandes,
lo que hice fue:
1.- hice un archivo css y alli pegue la fuente del css.
2.- lo agregue a mi archivo php, y pegue los div «contenedor», y «loader»
no se que tengo mal, ¿me podría ayudar? diciendo me que me falto
Que navegador estas usando?
Están geniales todos los ejemplos. Gracias.
El codigo CSS lo puede incorporar dentro del archivo HTML entre las etiquetas
Si claro puedes incluirlo dentro del HTML en las etiquetas STYLE aun que lo mejor es ponerlo en un archivo CSS separado.