¿Es posible usar la animación de transición CSS3 en la carga de la página sin usar Javascript?
Esto es algo de lo que quiero, pero en la carga de la página:
http://rilwis.googlecode.com/svn/trunk/demo/image-slider.html
Lo que encontré hasta ahora
- CSS3 transición-retraso , una forma de retrasar los efectos en los elementos. Solo funciona en vuelo estacionario.
- CSS3 Keyframe , funciona con carga pero es extremadamente lento. No es útil por eso.
- La transición CSS3 es lo suficientemente rápida pero no se anima en la carga de la página.
css
webkit
css-transitions
css-animations
Jens Törnell
fuente
fuente
Respuestas:
Usted puede ejecutar un CSS animación al cargar la página sin usar ningún JavaScript; solo tienes que usar CSS3 Keyframes .
Veamos un ejemplo...
Aquí hay una demostración de un menú de navegación deslizándose en su lugar usando solo CSS3 :
Descomponerlo...
Las partes importantes aquí son la animación de fotogramas clave que llamamos
slideInFromLeft
...... que básicamente dice "al principio, el encabezado estará fuera del borde izquierdo de la pantalla en todo su ancho y al final estará en su lugar".
La segunda parte es llamar a esa
slideInFromLeft
animación:Arriba está la versión abreviada, pero aquí está la versión detallada para mayor claridad:
Puede hacer todo tipo de cosas interesantes, como deslizar el contenido o llamar la atención sobre las áreas.
Esto es lo que tiene que decir el W3C.
fuente
Se necesita muy poco Javascript:
Ahora el CSS:
Sé que la pregunta decía "sin Javascript", pero creo que vale la pena señalar que hay una solución fácil que involucra una línea de Javascript.
Incluso podría ser Javascript en línea, algo así:
Eso es todo el JavaScript que se necesita.
fuente
body
clases existentes , utilice:document.body.classList.add('loaded)
document.body.className += " loaded";
que es un poco menos detallado para agregar laloaded
clase a las clases existentes.Creo que he encontrado una especie de solución alternativa para la pregunta de OP: en lugar de una transición que comienza 'on.load' de la página, descubrí que el uso de una animación para una opacidad se desvaneció tuvo el mismo efecto (estaba buscando lo mismo que OP).
Entonces, quería que el texto del cuerpo se desvaneciera del blanco (igual que el fondo del sitio) al color del texto negro en la carga de la página, y solo he estado codificando desde el lunes, así que estaba buscando un código de estilo de 'carga', pero aún no conozco JS, así que aquí está mi código que funcionó bien para mí.
Y por alguna razón, esto no funciona
.class
solo#id
para los (al menos no en los míos)Espero que esto ayude, ya que sé que este sitio me ayuda mucho.
fuente
Bueno, este es complicado.
La respuesta es "no realmente".
CSS no es una capa funcional. No tiene conciencia de lo que sucede o cuándo. Se usa simplemente para agregar una capa de presentación a diferentes "banderas" (clases, id, estados).
De manera predeterminada, CSS / DOM no proporciona ningún tipo de estado "en carga" para que CSS lo use. Si quisieras / pudieras usar JavaScript, asignarías una clase
body
o algo para activar CSS.Dicho esto, puedes crear un truco para eso. Daré un ejemplo aquí, pero puede o no ser aplicable a su situación.
Estamos operando bajo el supuesto de que "cerrar" es "suficientemente bueno":
Aquí hay un extracto de nuestra hoja de estilo CSS:
También asumimos que los navegadores modernos se procesan progresivamente, por lo que nuestro último elemento se procesará en último lugar y, por lo tanto, este CSS se activará en último lugar.
fuente
Similar a la solución de @ Rolf, pero omita la referencia a funciones externas o jugar con clase. Si la opacidad se mantendrá fija en 1 una vez cargada, simplemente use la secuencia de comandos en línea para cambiar directamente la opacidad a través del estilo. Por ejemplo
donde CSS sytle "fadein" se define por @ Rolf, definiendo la transición y configurando la opacidad al estado inicial (es decir, 0)
el único inconveniente es que esto no funciona con elementos SPAN o DIV, ya que no tienen un evento onload que funcione
fuente
Comience con el desplazamiento del cuerpo de lo que comenzará cuando el mouse se mueva por primera vez en la pantalla, que es principalmente dentro de un segundo después de la llegada, el problema aquí es que se revertirá cuando esté fuera de la pantalla.
eso es lo mejor que se me ocurre: http://jsfiddle.net/faVLX/
pantalla completa: http://jsfiddle.net/faVLX/embedded/result/
Editar vea los comentarios a continuación:
Esto no funcionará en ningún dispositivo con pantalla táctil porque no hay desplazamiento, por lo que el usuario no verá el contenido a menos que lo toque. - Rich Bradshaw
fuente
CSS solo con un retraso de 3s
Algunos puntos para tomar aquí:
Código:
fuente
Ok, he logrado lograr una animación cuando la página se carga usando solo transiciones CSS (¡más o menos!):
He creado 2 hojas de estilo CSS: la primera es cómo quiero que el html tenga un estilo antes de la animación ... y la segunda es cómo quiero que se vea la página después de que se haya llevado a cabo la animación.
No entiendo completamente cómo he logrado esto, pero solo funciona cuando los dos archivos css (ambos en el encabezado de mi documento) están separados por algún javascript de la siguiente manera.
He probado esto con Firefox, safari y opera. A veces la animación funciona, a veces salta directamente al segundo archivo CSS y a veces la página parece estar cargándose pero no se muestra nada (¿tal vez soy solo yo?)
Aquí hay un enlace a mi sitio web de trabajo en progreso: http://www.hankins-design.co.uk/beta2/test/index.html
Tal vez me equivoque, pero pensé que los navegadores que no admiten transiciones CSS no deberían tener ningún problema, ya que deberían saltar directamente al segundo archivo CSS sin demora ni duración.
Estoy interesado en conocer las opiniones sobre qué tan amigable es este método para los motores de búsqueda. Con mi sombrero negro puesto, supongo que podría llenar una página con palabras clave y aplicar un retraso de 9999 en su opacidad.
Me interesaría saber cómo manejan los motores de búsqueda el atributo de retraso de transición y si, utilizando el método anterior, incluso verían los enlaces y la información en la página.
Más importante aún, ¡me gustaría saber por qué esto no es consistente cada vez que se carga la página y cómo puedo rectificar esto!
Espero que esto pueda generar algunos puntos de vista y opiniones si nada más!
fuente
Si alguien más tuvo problemas para hacer dos transiciones a la vez, esto es lo que hice. Necesitaba que el texto viniera de arriba a abajo en la carga de la página.
HTML
HTML
CSS
No sé por qué seguí tratando de usar 2 declaraciones de transición en 1 selector y (no realmente) pensando que usaría ambas.
fuente
Solución aún más simple (aún con [una línea en línea] javascript):
Use esto como la etiqueta del cuerpo: tenga en cuenta que
body.
othis.
no funcionó para mí. Solo el largo;querySelector
permitir el uso declassList.remove
(Linux Chromium)y agregue esta línea encima de sus otras reglas CSS.
Tenga en cuenta que esto puede aplicarse a la opacidad (como lo solicitó OP [otros pósters]) simplemente usando la opacidad como desencadenante de transición. (incluso podría funcionar en cualquier otra regla css de la misma manera y puede usar múltiples clases para un retraso explícito entre los disparos)
La lógica es la misma. No imponga ninguna transformación (con
:none !important
todos los elementos secundarios debody.onload
y una vez que se cargue el documento, elimine la clase para activar todas las transiciones en todos los elementos como se especifica en su CSS.PRIMERA RESPUESTA A CONTINUACIÓN (VER EDITAR ARRIBA PARA RESPUESTA MÁS CORTA)
Aquí hay una solución inversa:
Funciona con transición múltiple en múltiples elementos. No probé la compatibilidad entre navegadores.
fuente
En realidad no, ya que el CSS se aplica lo antes posible, pero es posible que los elementos aún no se hayan dibujado. Podrías adivinar un retraso de 1 o 2 segundos, pero esto no se verá bien para la mayoría de las personas, dependiendo de la velocidad de su internet.
Además, si desea desvanecer algo, por ejemplo, requeriría CSS que oculta el contenido que se entregará. Si el usuario no tiene transiciones CSS3, nunca lo verán.
Recomiendo usar jQuery (para facilitar su uso + es posible que desee agregar animación para otros UA) y algunos JS como este:
Junto con las transiciones agregadas en el CSS. Esto tiene la ventaja de permitir fácilmente el uso de animar en lugar del segundo CSS en navegadores heredados si es necesario.
fuente
#id_to_fade in
, aunque estoy de acuerdo, eso no está tan claro en la respuesta.#id_to_fade_in { -webkit-transition:opacity 0.5s ease-in-out; }
+-o-
,-moz-
prefijos también.