Como posso mostrar conteúdo quando o Javascript não estiver disponível, escondê-lo quando javascript está disponível e não flicker em ambos os casos?
-
06-07-2019 - |
Pergunta
Eu tenho um formulário simples para opções de transporte e estou usando javascript para auto enviar o formulário quando alguém seleciona uma nova opção a partir da lista suspensa.
Para os navegadores suportam sem javascript, há também um botão para enviar o formulário. Este botão está escondido usando javascript.
No entanto, isto significa meu botão é visível por um período breve de tempo e pode causar uma cintilação como o resto do conteúdo é reformatado.
Alguém pode sugerir uma maneira de criar o botão assim que começa escondido, mas torna-se visível somente se javascript não está disponível? por exemplo, começar com visor: nenhuma; e magicamente mudar para display: block; se e somente se não houver javascript.
Solução
Basta colocar nada dentro de tags <noscript> ... </noscript>
e, em seguida, ela só vai aparecer se JavaScript não está habilitado / disponíveis.
Outras dicas
Depende de como você está escondendo isso, você está usando um DOM pronto ou uma janela está pronto? Janela aguarda pronto para todas as imagens para download, que é geralmente muito tempo.
Para acessibilidade, razões, eu escondê-lo no DOM carregado. Mas para garantir que ele não vai aparecer, você poderia colocá-lo em um elemento noscript
<noscript>
<input type="submit" />
</noscript>
Quanto ao seu último parágrafo, nada disso pode acontecer na ausência de JavaScript.
Basta escrever javascript discreto: http://icant.co .pt / artigos / sete-regras-de-discreto-javascript / .
O que você faz é escrever sua página como uma página normal, mas, em seguida, usar o código na parte inferior para iniciar o javascript e começar a editar a página para torná-lo mais interativo. A beleza disto é que, se eles tem o javascript desligado a página é normal, mas, se eles têm-lo, então você pode graciosamente adicionar mais recursos.
Eu não sou um grande fã da opção como isso pode significar um monte de código extra para ser baixado, que não é necessário.
Nesta página olhada comentário 5 para uma solução boa para ser capaz de fazer alterações antes de qualquer coisa é realmente exibido: http://dean.edwards.name/weblog/2006/06/again/
Você pode usar o script antes e depois no botão enviar para escrever de início e fim marcas de elemento div escondidas.
Uma opção seria começar com o botão mostrado, em seguida, modificar o seu CSS do JavaScript:
<head>
...
<link rel="stylesheet" href="style.css" type="text/css" charset="utf-8">
<script>
document.styleSheets[0].addRule(".hideMe", "display:none");
</script>
...
</head>
A modificação do estilo em vez do botão (e colocar esse código fora de um onload) garante que ele vai ser escondidas antes que o botão é desenhado.