É possível usar animação de transição CSS3 no carregamento da página sem usar Javascript?
É o que eu quero, mas no carregamento da página:
http://rilwis.googlecode.com/svn/trunk/demo/image-slider.html
O que eu encontrei até agora
- Atraso na transição CSS3 , uma maneira de atrasar os efeitos nos elementos. Funciona apenas em foco.
- O quadro-chave CSS3 , funciona com carga, mas é extremamente lento. Não é útil por causa disso.
- A transição CSS3 é rápida o suficiente, mas não é animada no carregamento da página.
css
webkit
css-transitions
css-animations
Jens Törnell
fonte
fonte
Respostas:
Você pode executar uma animação CSS no carregamento da página sem usar JavaScript; você só precisa usar os quadros-chave CSS3 .
Vejamos um exemplo ...
Aqui está uma demonstração de um menu de navegação deslizando para o lugar usando apenas CSS3 :
Quebre isso ...
As partes importantes aqui são a animação do quadro-chave que chamamos de
slideInFromLeft
...... que basicamente diz "no início, o cabeçalho estará fora da borda esquerda da tela por toda a largura e no final estará no lugar".
A segunda parte está chamando essa
slideInFromLeft
animação:Acima está a versão abreviada, mas aqui está a versão detalhada para maior clareza:
Você pode fazer todo tipo de coisa interessante, como deslizar no conteúdo ou chamar atenção para áreas.
Aqui está o que o W3C tem a dizer.
fonte
É necessário muito pouco Javascript:
Agora o CSS:
Eu sei que a pergunta dizia "sem Javascript", mas acho que vale ressaltar que existe uma solução fácil que envolve uma linha de Javascript.
Pode até ser Javascript embutido, algo assim:
É todo o JavaScript necessário.
fonte
body
classes existentes , use:document.body.classList.add('loaded)
document.body.className += " loaded";
um pouco menos detalhado para adicionar aloaded
classe às classes existentes.Acho que encontrei uma espécie de solução alternativa para a questão do OP - em vez de uma transição que começa com 'on.load' da página - descobri que o uso de uma animação para diminuir a opacidade tinha o mesmo efeito (eu estava procurando por a mesma coisa que OP).
Então, eu queria que o texto do corpo aparecesse do branco (igual ao plano de fundo do site) para a cor do texto preto no carregamento da página - e só codifico desde segunda-feira, então estava procurando um código de coisa no estilo 'on.load', mas ainda não sei o JS - então aqui está o meu código que funcionou bem para mim.
E por qualquer motivo, isso não funciona
.class
apenas para#id
os (pelo menos não para os meus)Espero que isso ajude - como eu conheço este site me ajuda muito!
fonte
Bem, isso é complicado.
A resposta é "não realmente".
CSS não é uma camada funcional. Não tem consciência do que acontece ou quando. É usado simplesmente para adicionar uma camada de apresentação a diferentes "sinalizadores" (classes, IDs, estados).
Por padrão, o CSS / DOM não fornece nenhum tipo de estado "em carga" para o CSS usar. Se você quisesse / fosse capaz de usar JavaScript, alocaria uma classe
body
ou algo para ativar algum CSS.Dito isto, você pode criar um hack para isso. Vou dar um exemplo aqui, mas pode ou não ser aplicável à sua situação.
Estamos trabalhando com a suposição de que "fechar" é "bom o suficiente":
Aqui está um trecho da nossa folha de estilo CSS:
Também assumimos que os navegadores modernos são processados progressivamente; portanto, nosso último elemento será processado por último e, portanto, esse CSS será ativado por último.
fonte
Semelhante à solução de @ Rolf, mas pule a referência a funções externas ou brinque com a classe. Se a opacidade permanecer fixa em 1 depois de carregada, basta usar o script embutido para alterar diretamente a opacidade por meio do estilo. Por exemplo
onde o sytle CSS "fadein" é definido por @ Rolf, definindo a transição e configurando a opacidade para o estado inicial (ou seja, 0)
o único problema é que isso não funciona com elementos SPAN ou DIV, pois eles não têm evento onload de trabalho
fonte
inicie-o com o foco do corpo do que Ele começará quando o mouse se mover pela primeira vez na tela, que ocorre quase um segundo após a chegada, o problema aqui é que ele será revertido quando estiver fora da tela.
é a melhor coisa que consigo pensar: http://jsfiddle.net/faVLX/
tela cheia: http://jsfiddle.net/faVLX/embedded/result/
Editar, veja os comentários abaixo:
Isso não funcionará em nenhum dispositivo de tela sensível ao toque, pois não há pairar o mouse; portanto, o usuário não verá o conteúdo a menos que toque nele. - Rich Bradshaw
fonte
CSS apenas com um atraso de 3s
alguns pontos a serem tomados aqui:
Código:
fonte
Ok, eu consegui obter uma animação quando a página é carregada usando apenas transições css (mais ou menos!):
Eu criei 2 folhas de estilo css: a primeira é como eu quero o estilo html antes da animação ... e a segunda é como eu quero que a página cuide da execução da animação.
Eu não entendo completamente como consegui isso, mas ele só funciona quando os dois arquivos css (ambos no cabeçalho do meu documento) são separados por algum javascript da seguinte maneira.
Eu testei isso com o Firefox, safari e ópera. Às vezes a animação funciona, às vezes pula direto para o segundo arquivo css e às vezes a página parece estar carregando, mas nada é exibido (talvez seja apenas eu?)
Aqui está um link para meu site de trabalho em andamento: http://www.hankins-design.co.uk/beta2/test/index.html
Talvez eu esteja errado, mas achei que os navegadores que não suportam transições de CSS não devem ter problemas, pois devem pular diretamente para o segundo arquivo CSS sem demora ou duração.
Estou interessado em conhecer pontos de vista sobre como esse método é amigável para os mecanismos de pesquisa. Com meu chapéu preto, suponho que poderia preencher uma página com palavras-chave e aplicar um atraso de 9999s em sua opacidade.
Gostaria de saber como os mecanismos de pesquisa lidam com o atributo de atraso de transição e se, usando o método acima, eles ainda veriam os links e as informações na página.
Mais importante, eu realmente gostaria de saber por que isso não é consistente cada vez que a página é carregada e como posso corrigir isso!
Espero que isso possa gerar alguns pontos de vista e opiniões, se nada mais!
fonte
Se alguém mais teve problemas para fazer duas transições ao mesmo tempo, aqui está o que eu fiz. Eu precisava que o texto fosse de cima para baixo no carregamento da página.
HTML
HTML
CSS
Não sei por que continuei tentando usar 2 declarações de transição em 1 seletor e (não realmente) pensando que usaria ambas.
fonte
Solução ainda mais simples (ainda com javascript [uma linha em linha]):
Use isso como a etiqueta do corpo: observe que
body.
outhis.
não funcionou para mim. Apenas o longo;querySelector
permitir o uso declassList.remove
(Linux Chromium)e adicione esta linha sobre suas outras regras de CSS.
Observe que isso pode se aplicar à opacidade (conforme solicitado pelo OP [outros pôsteres]) simplesmente usando a opacidade como um gatilho de transição. (pode até funcionar com qualquer outra regra CSS da mesma maneira e você pode usar várias classes para atrasos explícitos entre o acionamento)
A lógica é a mesma. Impor nenhuma transformação (com
:none !important
todos os elementos filhos debody.onload
e depois que o documento for carregado, remova a classe para acionar toda a transição em todos os elementos, conforme especificado em seu css.PRIMEIRA RESPOSTA ABAIXO (VEJA EDITAR ACIMA PARA RESPOSTA MAIS CURTA)
Aqui está uma solução inversa:
Funciona com várias transições em vários elementos. Não tentou compatibilidade entre navegadores.
fonte
Na verdade, o CSS é aplicado o mais rápido possível, mas os elementos ainda não podem ser desenhados. Você pode adivinhar um atraso de 1 ou 2 segundos, mas isso não parecerá adequado para a maioria das pessoas, dependendo da velocidade da internet.
Além disso, se você deseja desvanecer algo, por exemplo, seria necessário CSS que oculte o conteúdo a ser entregue. Se o usuário não tiver transições CSS3, nunca o verá.
Eu recomendo usar o jQuery (para facilitar o uso + você pode adicionar animação para outros UAs) e algumas JS como esta:
Junto com as transições adicionadas no CSS. Isso tem a vantagem de permitir facilmente o uso de animar, em vez do segundo CSS, em navegadores herdados, se necessário.
fonte
#id_to_fade in
, embora eu concorde, isso não está claro na resposta.#id_to_fade_in { -webkit-transition:opacity 0.5s ease-in-out; }
+-o-
,-moz-
prefixos também.