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 :

Changer dynamiquement de feuille de style


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut Changer dynamiquement de feuille de style
    Bonjour j'ai pour projet de réaliser un bouton à deux état celui ci étant déjà fait et fonctionnel en css néanmoins je souhaite que ce bouton lorsque je clique dessus il change de style de css(lorsque le site a le style il passe au style2 et vice-versa) dans ce cas j'ai un style.css et un style2.css j'ai réalisé 2 scripts qui ne fonctionnent pas et je n'arrive pas à les corriger
    dans un premier temps j'ai réalisé ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
    		 document.getElementById("replaceonclicktest").onclick =function changementdestyle(){
    		 var css = document.getElementById("linkcss").href;
    		 var etat = css.endsWith("style.css");
    		 if(etat==true){
    			 	document.getElementById("linkcss").setAttribute("href", "style2.css");
    			 }
    		 } else {
    			 document.getElementById("linkcss").setAttribute("href", "style.css");
    		   }
    		 }
    </script>
    Celui ci étant non fonctionnel j'ai donc réalisé celui là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    	<script type="text/javascript">
    		var cpt = 0;
    		document.getElementById("replaceonclicktest").onclick =function changementdestyle()
    		{
    		 	var cpt = ++cpt;
    			alert(cpt);
    			if(cpt%2 == 0){
    				document.getElementById("linkcss").setAttribute("href", "style2.css");
    				alert("pair");
    			} else {
    				document.getElementById("linkcss").setAttribute("href", "style.css");
    				alert("impair");
    			}
    		}
    	</script>
    Merci de m'avoir lu, si une âme charitable pourrait m'éclairer.
    Merci d'avance.

    PS:Je suis nouveau sur le forum si mon sujet n'est pas dans la bonne rubrique merci de me l'indiquer.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Je pense que tu t'es compliqué les choses, au lieu d'utiliser deux feuilles de styles tu devrais utiliser deux class dans une seule feuille de style...

    Par exemple (tu peux tester ici : https://playcode.io/196849/v2?tabs=c...ript.js&output) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    var monButton = document.getElementById("IDmonButton");
    var cp = 0;
     
    monButton.addEventListener("click", function() {
     
      // ça c'est juste pour afficher le nombre de clique...
      console.log("clique n°"+ cp++);
     
      if (monButton.classList.contains("etat1")) {
        monButton.classList.remove("etat1");
        monButton.classList.add("etat2");
        // cette ligne c'est en plus pour changer le texte...
        monButton.textContent = "Mon button : Etat2"
     
      } else if (monButton.classList.contains("etat2")) {
        monButton.classList.remove("etat2");
        monButton.classList.add("etat1");
        // cette ligne c'est en plus pour changer le texte...
        monButton.textContent = "Mon button : Etat1"
      }
    });

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <button id="IDmonButton" class="etat1">Mon button : Etat1</button>

    Avec le css des deux états (que tu peux changer pour y mettre ce que tu veux) :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .etat1 {
      color: green;
      height: 30px;
      width: 133px;
    }
     
    .etat2 {
      color: red;
      height: 90px;
      width: 110px;
    }

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut Réponse
    Bonsoir, merci de vous être donné tant de mal pour me répondre, c'est très gentil de votre part mais notre professeur veut absolument deux feuilles de styles différentes et un changement de style par un bouton. Si vous avez une idée qui me le permettrait, je suis preneur. Merci d'avance.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Je ne suis pas sûr de comprendre la question du coup...

    Et les deux styles ce n'est pas pour changer le style du bouton alors mais c'est pour changer le style de la page html, c'est ça ?

    En fait dis-moi si j'ai bien compris cette fois-ci : tu as une page html qui contient entre autres un bouton et ce bouton sert à passer de la feuille de style "style1.css" à "style2.css" et vice-versa ?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Bon supposons que ta réponse soit oui alors j'ai testé le code ci-après et cela fonctionne bien chez moi...
    Je suis parti de ton code, j'ai fait des ajouts et des modifications...

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var buttonChangeStyle = document.getElementById("replaceonclicktest");
    buttonChangeStyle.onclick = function changementdestyle() {
     
        var baliseLink = document.getElementById("linkcss");
        var etat = baliseLink.href.endsWith("style1.css");
     
        if (etat == true) {
            baliseLink.setAttribute("href", "style2.css");
            buttonChangeStyle.textContent = "style2.css"
        } else {
            baliseLink.setAttribute("href", "style1.css");
            buttonChangeStyle.textContent = "style1.css"
        }
    }


    Attention : ici j'ai supposé que style1.css et style2.css étaient dans le même répertoire que la page html ce qui mous évite de mettre le chemin complet des deux fichiers mais si tu veux traiter la question d'une manière plus générale avec n'importe quel chemin alors il faudra ajouter des choses...

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    il existe également les feuilles de style alternatives, rel="alternate stylesheet", qui s’intègrent de la façon suivante dans une page
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <link rel="stylesheet" type="text/css" href="CSS0.css" title="">
    <link rel="alternate stylesheet" type="text/css" href="css1.css" title="CSS1">
    <link rel="alternate stylesheet" type="text/css" href="css2.css" title="CSS2">
    <link rel="alternate stylesheet" type="text/css" href="css3.css" title="CSS3">
    on notera la présence d'un attribut title pour la prise en compte d'une ou l'autre par script simple qui active/désactive celle de notre choix.

    Exemple code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function setActiveStyleSheet(title) {
      var links = document.querySelectorAll('link[rel*="stylesheet"]');
      var i = links.length;
      while (links[--i]) {
        links[i].disabled = links[i].getAttribute('title') !== title;
      }
    }
    Pour activer une feuille particulier il suffit de faire un appel du type
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <button onclick="setActiveStyleSheet('')">Défaut</button>
    <button onclick="setActiveStyleSheet('CSS1')">Style 1</button>
    <button onclick="setActiveStyleSheet('CSS2')">Style 2</button>
    <button onclick="setActiveStyleSheet('CSS3')">Style 3</button>

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

Discussions similaires

  1. Changer dynamiquement une règle de style dans la CSS
    Par siddh dans le forum Téléchargez
    Réponses: 2
    Dernier message: 01/12/2014, 10h18
  2. Réponses: 2
    Dernier message: 16/06/2010, 13h14
  3. Réponses: 3
    Dernier message: 09/12/2008, 16h52
  4. Réponses: 2
    Dernier message: 09/12/2008, 16h50
  5. Changer la feuille de style a l aide d un clic sur un bouton
    Par jean_bobi dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/11/2005, 08h35

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