Tymlis a écrit :
Et pourquoi ne pas tout simplement charger une feuille de style spéciale lorsque javascript est activé grâce à un :
<script language="javascript" type="text/javascript">
/* <![CDATA[ */
document.write('<link rel="stylesheet" type="text/css" href="javascript.css" media="screen" />');
/* ]]> */
</script>
( A placer dans le <head> bien sur, après les feuilles de styles normales, de façon à overrider les définitions précédentes ).
Ainsi pas de FoC, et on garde les styles pour javascript centralisés dans un seul fichier.
Ben là tu te fais chier avec un truc en plus qui entraine des emmerdes en plus :
- 1 fichier en plus
- 1 hit sur le serveur dont on pourrait se passer
- devoir maintenir les styles d'un même élément dans plusieurs feuilles de styles, alors que dans ce cas précis (une ligne change) ce n'est vraiment pas nécessaire.
- devoir se trimballer une ligne de JS lourde, qui bien sur pourrait être transposer dans un fichier JS, je te l'accorde.
Ce que je viens de citer est aussi valable pour une feuille de style alternative IE pour les gens qui n'aimes pas les hacks. Les hacks c'est bon, mangez en, mais intelligemment
Vous verrez quand vous atteindrez des feuilles de styles de l'ampleurs de ce qu'on manie par chez moi
, et pourtant ce sont des CSS optimisés à la source.
Pour revenir à la discussion avec Matmat, la seule méthode que les gens connaissent c'est mettre une classe sur le body. J'ai vu que d'autres justement utilisaient cette méthode lors d'une présentation au Wasp Café n°2 par des gars de chez Yahoo. Et le résultat a été que tu était obligé de te coltiner une ligne à mettre juste après ton body.
Avant j'utilisais un JS avec un setTimeout qui attendait que le body apparaisse pour coller la classe
function hasJSOnBody() {
if (document.body)
document.body.className+=" hasJS";
else setTimeout(hasJSOnBody, 10);
}
hasJSOnBody();
Mais cette chose avait des effets un peu pervers au niveau comportemental sur certains sites. Et un ptit génie qui est passé par chez nous à trouvé cette solution smart de le coller sur le document.documentElement, qui correspond à l'élément HTML
Autre petite précision: Cette méthode évite aussi de devoir parcourir le dom à la recherche d'élément à cacher. Ca fait un traitement en moins, et quand on a des paquets de trucs applicatifs sur une page, c'est déjà ça de pris.
Il n'y a rien de plus rapide que le moteur CSS pour afficher / cacher des éléments via une classe parent
Modifié par Gatsu35 (15 May 2008 - 05:56)