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

Contribuez Discussion :

[SRC] Style switcher


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut [SRC] Style switcher
    Je ne sais pas si un style switcher a déjà été proposé, mais je porpose le mien que je viens de créer vite fait :

    http://josselin.willette.free.fr/cod...styleswitcher/

    L'utilisation de Javascript et non pas d'un langage serveur pour switchter les styles permet d'éviter le rechargement de la page.

    J'ai mis en place un système de cookie qui permet de retrouver le style choisi à la prochaine reconnexion (ainsi qu'au rechargement de la page étant donné que rien n'est géré côté serveur )

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <link rel="stylesheet" href="css/main.css" type="text/css" />
    <link rel="stylesheet" href="css/bleu.css" type="text/css" />
    <link rel="stylesheet" href="css/rouge.css" type="text/css" />
    <!--
    Mettre un lien vers toutes les feuilles de style permet de les charger dans
    le cache du navigateur et ainsi éviter le clignotement au changement du style.
    Seule la dernière balise link sera modifiée par le Javascript, alors ne pas
    mettre le main.css en dernier.
    -->


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /* Récupération du cookie */
    var cook = getCookie("style");
     
    /* Si un cookie existe on affiche la feuille de style sauvegardée dans le cookie,
       sinon on met une feuille de style par défaut (ici rouge.css) */
    if(cook == undefined)
       document.getElementsByTagName('link')[document.getElementsByTagName('link').length-1].href = "css/rouge.css";
    else
       document.getElementsByTagName('link')[document.getElementsByTagName('link').length-1].href = "css/" + cook + ".css";
     
    function setCookie(name, value, expire){
       var timestamp = new Date(expire);
       document.cookie = name + "=" + escape(value) + "; expires=" + timestamp.toGMTString();
    }
     
    function getCookie(name){
        var cookies = document.cookie.split(/;/);
     
       for(var i = 0; i < cookies.length; i++){
          var mycook = cookies[i].split(/=/);
          if(mycook[0] == name)
             return unescape(mycook[1]);
       }
    }
     
    function styleSwitcher(css){
       document.getElementsByTagName('link')[document.getElementsByTagName('link').length-1].href = "css/" + css + ".css";
     
       /* Création du cookie */
       setCookie("style", css, (new Date(2010, 12).getTime()));
    }
     
    function setSelected(){
       var options = document.getElementById('style').getElementsByTagName('option');
       var n = options.length;
     
       for(var i = 0; i < n; i++){
          if(options[i].value == cook)
             options[i].selected = true;
       }
    }
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <body onload="setSelected()">
     
    <div id="main">
       <h1>Mon site</h1>
    &nbsp;&nbsp;&nbsp;&nbsp;
       <select onchange="styleSwitcher(this.value)" id="style">
          <option value="rouge">Rouge</option>
          <option value="bleu">Bleu</option>
       </select>
     
    </div>
     
    </body>


    Suggestions ? Améliorations ?

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Moi je suis plutot partisant de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .green a {
      /* Style pour les liens quand html est green */
    }
     
    .red a {
      /* Style pour les liens quand html est red */
    }
    couplé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function changeStyle(color) {
       /* documentElement == <HTML> */
       document.documentElement.className=color;
    }
    Mais je reconnais que ton code semble de très bonne qualité !

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Ta solution implique une seule feuille de style, ce qui peut être gérable pour les petits sites qui ne proposent que deux choix de couleur, mais vite bordélique si on veut passer à 3, 4 voire 5 couleurs et encore plus un sur gros site.

    Après évidemment c'est un choix de programmation comme un autre et je conçois que certains s'y retrouveront mieux avec une seule feuille de style. ^^

  4. #4
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Ben pas du tout, je peux avoir autant de feuille de style que je veux

    green.css
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .green body {
      background-color: green;
      background-image: greenGradient.png;
    }
    red.css
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .red body {
      background-color: red;
      background-image: redGradient.png;
    }

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Ah, oui, je vois ce que tu veux dire.

    Tu fais comme moi au début, tu charges toutes les feuilles de style, mais ta méthode a l'avantage de ne pas modifier le lien de la dernière feuille de style et donc permet de les déclarer n'importe comment sans une rigueur définie.

    J'aime bien, je regarderai ça.

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Hop, voilà j'ai modifié à la manière de FremyCompany.

    Ca alourdit un poil les CSS mais ça simplifie énormément le Javascript pour les néophytes.

    On peut donc mettre les feuilles de style dans n'importe quel ordre (ne pas oublier de toutes les mettre pour les charger dans le cache du navigateur et ainsi améliorer le switch) :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <link rel="stylesheet" href="css/bleu.css" type="text/css" />
    <link rel="stylesheet" href="css/main.css" type="text/css" />
    <link rel="stylesheet" href="css/rouge.css" type="text/css" />

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    /* Récupération du cookie */
    var cook = getCookie("style");
     
    /* Si un cookie existe on affiche la feuille de style sauvegardée dans le cookie,
       sinon on met une feuille de style par défaut (ici rouge.css) */
    if(cook == undefined)
       document.documentElement.className = "rouge";
    else
       document.documentElement.className = cook;
     
    function setCookie(name, value, expire){
       var timestamp = new Date(expire);
       document.cookie = name + "=" + escape(value) + "; expires=" + timestamp.toGMTString();
    }
     
    function getCookie(name){
       var cookies = document.cookie.split(/;/);
     
       for(var i = 0; i < cookies.length; i++){
          var mycook = cookies[i].split(/=/);
          if(mycook[0] == name)
             return unescape(mycook[1]);
       }
    }
     
    function styleSwitcher(css){
       document.documentElement.className = css;
       /* Création du cookie */
       setCookie("style", css, (new Date(2010, 12).getTime()));
    }
     
    function setSelected(){
       var options = document.getElementById('style').getElementsByTagName('option');
       var n = options.length;
     
       for(var i = 0; i < n; i++){
          if(options[i].value == cook)
          options[i].selected = true;
       }
    }
    Et donc dans le CSS on a :

    rouge.css
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .rouge body{
       background:#e52c18 url(rouge/fond-rouge.gif) repeat-x;
    }
     
    .rouge select{
       background:#e52c18;
    }
     
    .rouge h1{
       color:#e52c18;
       text-align:center;
    }
    bleu.css
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .bleu body{
       background:#20b9e5 url(bleu/fond-bleu.gif) repeat-x;
    }
     
    .bleu select{
       background:#20b9e5;
    }
     
    .bleu h1{
       color:#20b9e5;
       text-align:center;
    }
    main.css
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select{
       border:1px solid #a7a7a7;
       color:#fff;
       font:normal 11px verdana;
    }
     
    #main{
       width:600px;
       margin:0 auto;
    }

  7. #7
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    Bonsoir tout le monde,

    Je cherche désespérément un tuto semblable à celui-ci mais je voudrais juste charger des fichiers css complets différents selon le select mais sans prendre en compte la classe ou autre dans le css. Quelqu'un aurait'il pour moi le code javascript à modifier avec les bon cookies a inclure.

    Je m'arrache les cheveux depuis deux jours... Fouine sur la toile et ne trouve rien de bien complet.

    Merci de votre aide

    Samba

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    Bonsoir merci j'ai trouvé mon bonheur en fouillant un peu plus

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Et bien, donne ta solution

    nb : en vacances, loin d'internet, je ne regarde pas les forums
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Par défaut
    Bonjour !

    Je viens de trouver ce post après avoir posté le mien et
    j'ai un souci d'affichage d'image bannière à 100% de largeur
    avec plus ou moins le même script de changement de thème.

    Plus de détails ici:
    http://www.developpez.net/forums/d68...s/#post3983164

    Votre aide serait la bienvenue.

Discussions similaires

  1. [Cookies] Style Switcher
    Par PIMPMAX dans le forum Langage
    Réponses: 10
    Dernier message: 02/03/2007, 16h29
  2. Style Switcher CSS/PHP > redirection avec 2 includes
    Par swaag dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 11/12/2006, 15h50
  3. [PHP-Langage] Probleme pour réaliser un Style switcher
    Par budylove dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2006, 16h28
  4. [theorie] style switcher en javascript
    Par psychoBob dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/05/2006, 16h32
  5. Poposer aux visiteurs de choisir le design, style switcher
    Par frimo dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 29/11/2004, 19h15

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