Avatar billede Slettet bruger
27. februar 2010 - 16:36 Der er 3 kommentarer og
1 løsning

Dynamisk ænding af CSS ?

Hej, jeg spekulerer på muligheden for at ændre på en stribe CSS-deklarationer - dynamisk.

Ideen er at give brugerne mulighed for at vælge imellem forskellige farve-skemaer: hvid tekst på sort baggrund med grønne rammer ELLER rød tekst på hvid baggrund med blå rammer ELLER ...

Jeg har dog ikke "lyst" til at vedligeholde en bunke forskellige style-sheets.
- ligesom det ville være cool at give brugerne mulighed for at designe deres egen palette...

Men hvordan - er der nogen som har en god idé ?

Jeg har en JS-funktion som kan ændre på CSS dynamisk, men den "ser langsom ud"...
(sig til, hvis du vil se funktionen)
Avatar billede Slettet bruger
27. februar 2010 - 17:20 #1
Vi vil da meget gerne se, hvad du selv har fundet frem til.
Avatar billede claes57 Ekspert
27. februar 2010 - 17:23 #2
hvis brugere skal kunne bruge det - så skal du gemme deres valg i cookies. Ellers taber de jo alt når sitet forlades.
Avatar billede Slettet bruger
27. februar 2010 - 17:36 #3
Funktionen:
function modifyCSS(classN,element,value)
    {
    var cssRules;

    var added = false;
    for (var S = 0; S < document.styleSheets.length; S++)
        {
        if (document.styleSheets[S]['rules'])
            cssRules = 'rules';
        else if (document.styleSheets[S]['cssRules'])
            cssRules = 'cssRules';
        else
            alert("Øv, din browser kan ikke modificere CSS dynamisk :(")

        for (var R = 0; R < document.styleSheets[S][cssRules].length; R++)
            if (document.styleSheets[S][cssRules][R].selectorText == classN)
                if(document.styleSheets[S][cssRules][R].style[element])
                    {
                    document.styleSheets[S][cssRules][R].style[element] = value;
                    added=true;
                    break;
                    }

        if(!added)
            if (document.styleSheets[S].insertRule)
                document.styleSheets[S].insertRule(classN+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
            else if (document.styleSheets[S].addRule)
                document.styleSheets[S].addRule(classN,element+': '+value+';');
            else
                alert("Øv, din browser kan ikke tilføje CSS dynamisk :(")
        }
    }


Selvfølgelig skal det gemmes - i deres stamdata-record i MySQL.

En mulighed er så: i onLoad, at køre ovenstående funktion på de class'es som skal modificeres. Men jeg er bange for at det vil gå langsomt...

Et alternativ: At style-sheet'et faktisk er en PHP-fil som modificeres inden browseren ser den - men så ryger muligheden for at cache...
Avatar billede Slettet bruger
28. februar 2010 - 10:52 #4
Det bliver et kompromis: I <head><script>
= Før siden vises med standard CSS
+ Uden at belaste serveren yderligere
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester