IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Changement du style d'une classe CSS en javascript


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut Changement du style d'une classe CSS en javascript
    Bonjour.

    Est-il possible de changer le style d'une classe CSS en Javascript et si oui comment ?
    Je précise qu'il s'agit de changer le style d'une ou plusieurs classes seulement, pas de changer toute la feuille de style (si possible).

  2. #2
    Membre actif
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Points : 219
    Points
    219
    Par défaut
    Tu veux modifier le style appliqué à un élément, ou à tous les éléments ayant la même classe CSS ?
    Les seules choses que je connait dans ce domaine sont
    document.getElementById(..).style.xxx (par exemple, width, border, etc...) = yyy;
    et document.getElementById(...).className = yyy

  3. #3
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Oui, je connais aussi, mais sauf à faire une boucle ou équivalent, ça ne marche que sur un élément.
    Ce que je souhaite, c'est bien changer le style de la classe de façon à ce qu'il soit répercuté sur tous les élements de la feuille relevant de la classe.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu peux utiliser les propriétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.styleSheets[i].cssRules[j]    //FF
    document.styleSheets[i].rules[j]    //IE Win
    sur les règles j de la feuille de style i.

  5. #5
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    N'étant pas à l'aise avec la solution de Bovino, je reviens sur le sujet pour préciser mon besoin.
    Je souhaite que des portions de ma page Web changent selon que JS est activé ou pas. J'ai donc encadré dans des blocs les portions en question, avec une classe "avec_JS" si le bloc est à afficher quand JS est activé, "sans_JS" dans le cas inverse. Par défaut les blocs "avec_JS" sont masqués :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <style type="text/css">
    <!--
    *.avec_JS {display:none}
    *.sans_JS {display:block}
    -->
    </style>
    Comment faire pour masquer les blocs "sans_JS" et afficher les blocs "avec_JS" lorsque JS est activé ? Sachant que "bloc" peut être n'importe quel élément HTML (div, span, img...).

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    autant voir une seconde classe et modifier le className


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .red {color:red;}
    .blue{color:blue;}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div class="red" onclick="this.className='blue';"> cliquez ici</div>

  7. #7
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Sauf que le changement de classe doit se faire sans action de l'utilisateur, au chargement de la page. J'avais commencé à changer le style "display" en fonction de la classe via une fonction avec boucle lancée par le "onload" de la balise "body". Mais il faudrait que la fonction parcourt tous les éléments HTML et ça me parait un peu bourrin.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    deux fichiers css externalisés, les même noms de class mais des propriétés differentes ...
    suffit alors de change le rel de la balise link

  9. #9
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Ça m'embête un peu de faire deux fichiers avec une seule ligne dans chacun, mais ça a effectivement l'air d'être le plus simple.
    Petite question toutefois, comment fais-je le changement de rel dans la balise link ? Via document.styleSheets[i].href ?

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getElementsByTagName('link')[0].rel

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    sinon tu charges par défaut ta feuille css avec javacript, et dans une balise noscript , tu insère charge tas feuille des styles sans js

  12. #12
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Le noscript avait l'air pas mal, mais le validateur HTML n'aime pas.

    Sinon pourrais-je avoir un petit exemple plus explicite avec le rel ?

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <link id="testJS" rel="stylesheet" type="text/css" href="sansjs.css" />
    <script type="text/javascript">
        document.getElementById('testJS').href = 'avecjs.css';
    </script>

  14. #14
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Finalement, je suis revenu sur la solution proposée par Bovino.

    Mes deux règles de style par défaut sont donc incluses directement dans la page Web, après le code CSS général du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <link rel="stylesheet" type="text/css" href="Conf/planning.css" />
    <style type="text/css">
    <!--
    *.avec_JS {display:none}
    *.sans_JS {display:block}
    -->
    </style>
    Je fais la modification des règles par Javascript au chargement avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	if (document.styleSheets[1].cssRules)
    		var objReglesCssInternes = document.styleSheets[1].cssRules
    	else if (document.styleSheets[1].rules)
    		var objReglesCssInternes = document.styleSheets[1].rules
     
    	objReglesCssInternes[0].style.display = "block";
    	objReglesCssInternes[1].style.display = "none";
    Reste que je ne sais pas comment faire apparaître un élément selon son type, c'est-à-dire un div comme un bloc, un span comme un élément en ligne... Sauf à faire des règles span.avec_JS, div.avec_JS...
    Si quelqu'un a une idée sur ce point...

  15. #15
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Ca y est, j'y suis !

    In fine je n'utilise plus qu'une seule règle CSS initiale dans la page, pour masquer les éléments de la classe "avec_JS" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <link rel="stylesheet" type="text/css" href="Conf/planning.css" />
    <style type="text/css">
    <!--
    *.avec_JS {display:none}
    -->
    </style>
    Au chargement je supprime cette règle et j'en ajoute une pour faire disparaître les éléments de la classe "sans_JS" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	var objReglesCssInternes = document.styleSheets[1];
     
    	if (document.styleSheets[1].cssRules) {		/* FF */
    		objReglesCssInternes.deleteRule(0);
    		objReglesCssInternes.insertRule("*.sans_JS {display:none}", 0);
    	} else if (document.styleSheets[1].rules) {	/* IE */
    		objReglesCssInternes.removeRule(0);
    		objReglesCssInternes.addRule("*.sans_JS", "display:none");
    	}
    Merci pour vos aides respectives !

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    oui en gros comment aller à la salle de bain en passant par tokyo ...

  17. #17
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Pourquoi ? Ca vous paraît trop compliqué ?

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    passer par les rules pour ça oui

  19. #19
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Peut-être, mais je ne souhaitais pas utiliser deux fichiers CSS supplémentaires avec seulement 2 ou 3 règles chacun. D'autant qu'ils n'auraient été utilisés que par une seule page du site.

  20. #20
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    l'essentiel est que tu sois arrivé a tes fins

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réinitialiser une classe css à sa valeur initiale
    Par Xunil dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/02/2007, 15h06
  2. Ajouter une class CSS a une nouvelle cellule
    Par Arfigado dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/09/2006, 10h08
  3. Utiliser le background color d'une class css dans un body..
    Par WeDgEMasTeR dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 02/07/2006, 03h40
  4. Modifier dynamiquement une classe CSS
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/06/2006, 16h49
  5. Appeler une classe CSS avec Javascript
    Par p0Kep0K dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2006, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo