Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 10:38 Der er 23 kommentarer og
1 løsning

CSS kode som Opera læser og IE og FF undgår

Hej!

I min css koden har jeg brugt for at dele koden op så jeg kan lave en slags kode til explore, en slags kode til firefox og sidst, en slags kode til opera.

Indtil videre fungere det fint med explore og firefox.

Explore læser hele koden, og firefox det jeg vil have den til med...

html>body .minklasse a {
    font-size: 11px;
    font-family: verdana;
        osv...
}

Men hvordan laver jeg afsnit i koden som kun opera læser og explore og firefox undgår !??

Mvh. Peter
Avatar billede pidgeot Nybegynder
25. februar 2008 - 10:52 #1
Desværre er det ikke helt så lige til at skelne mellem andet end IE og ikke-IE, da kun IE understøtter conditional comments...

...du kan bruge User-Agent sniffing for at se om browseren siger den hedder Opera, og så tilføje et stylesheet, eller du kan kigge efter et CSS hack der kun påvirker Opera - desværre er ingen af de to ting særligt holdbare løsninger, da User-Agent nemt kan spoofes (Opera har endda som standard mulighed for at fremstå som IE!), og årsagen til at et CSS hack virker er urelateret til årsagen til at du BRUGER et CSS hack...

...en mere holdbar løsning er at tilføje en stylesheet-fil med JavaScript, baseret på hvad de forskellige browsere kan på det punkt, men det er ikke ligefrem pænt, og alt afhængigt af hvad du finder kan du ende med at du fanger mere eller mindre end det der var meningen...

...i langt de fleste tilfælde er det dog nok at håndtere to tilfælde; IE og ikke-IE, da de andre browsere renderer stort set ens, og netop der er conditional comments perfekte - lav et stylesheet der dækker alle browsere, og lav så nogle "fix"-stylesheets der overskriver de ting IE skal have anderledes, og er inkluderet med en conditional comment efter det primære stylesheet...

...SKAL det absolut være som du hentyder til i spørgsmålet, så tag evt. et kig på http://centricle.com/ref/css/filters/ for at se hvad der virker på de enkelte browsere - men bemærk at eks. Opera 9 ikke er med, og det derfor kan være andet der skal til for netop den!
Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 11:25 #2
Avatar billede pidgeot Nybegynder
25. februar 2008 - 11:34 #3
Det er den bedste løsning du finder, hvis du har brug for at differentiere yderligere end IE/ikke-IE, ja.

Den er stadig ikke god, fordi den streng, som nævnt foroven, let kan spoofes (og Opera endda tillader det out-of-the-box), men den er dog betydeligt bedre end et CSS hack, og der er faktisk ikke nogle fejlsikre løsninger for andet end lige IE (uden at man inddrager ting der ikke er relaterede, og dermed upålidelige i forbindelse med nye versioner af browseren).
Avatar billede jokkejensen Novice
25. februar 2008 - 11:43 #4
"Owen hack" skulle stadig kunne diferentiere gennem ren css selectors..

Kan være jeg tager fejl med den nyeste - men Opera 6 kan isoleres, og tidligere versioner..

/JJ
Avatar billede jokkejensen Novice
25. februar 2008 - 11:46 #6
naaa sry, de har vist fixet bug..

/JJ
Avatar billede jokkejensen Novice
25. februar 2008 - 11:50 #7
Brugn den her :

/////////////////////////////// BROWSER DETECT ///////////////////////////////////////
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++)    {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {     string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {        // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {         // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
Avatar billede jokkejensen Novice
25. februar 2008 - 11:51 #8
brug :
BrowserDetect.init();
window.alert(BrowserDetect.browser + " " + BrowserDetect.version);

//Kilde :: fra quircksmode.org !!!!!
Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 12:50 #9
Ja den browser detect virker fint.. Hvor får jeg den så til at hente min css kode til den valgte browser !?
Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 12:51 #10
Javascript er ikke min stærke side.. :(
Avatar billede jokkejensen Novice
25. februar 2008 - 13:02 #11
Det gør du sådan her:


BrowserDetect.init();
if(BrowserDetect.browser == "Opera")
{
document.write("<link src='link til css' />")
}
Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 13:21 #12
Synes ikke lige jeg får den til at fange css filerne..

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
BrowserDetect.init();
if(BrowserDetect.browser == "Firefox")
{
document.write("<link src='firefox.css' />")
}
if(BrowserDetect.browser == "Explorer")
{
document.write("<link src='explorer.css' />")
}
</SCRIPT>
Avatar billede wipeout_dk Nybegynder
25. februar 2008 - 13:27 #13
Ahh dammit.. Skal jo selvfølgelig hente den ordentlig...

<link href="min_css.css" rel="stylesheet" type="text/css">

TAK FOR HJÆLPEN !!!!!!!!!!! :)
Avatar billede jokkejensen Novice
25. februar 2008 - 13:36 #14
selv tak :)
Avatar billede jokkejensen Novice
25. februar 2008 - 13:36 #15
du kan også differentiere på version osv..

/JJ
Avatar billede olebole Juniormester
25. februar 2008 - 14:23 #16
<ole>

- og endelig kan man tilpasse sit design til den virkelighed, man arbejder med. Det kan godt være en paraply, lavet i fiskenet, ville se fiks ud, meeeeeen ......  ;o)

/mvh
</bole>
Avatar billede jokkejensen Novice
25. februar 2008 - 15:19 #17
det er ikke os alle der kan lave hjemmesider uden at tildele specielle stylesheets.

Men har du egentligt det gode eksempel olebole ? - et flot site der rammer alle browserse, uden at hacke/fuske et eller andet sted.

Eller hvad mener du løsningen for at få opera med her er ?

/JJ
Avatar billede w13 Novice
25. februar 2008 - 15:29 #18
Hvad er problemet i Opera her?

Ved bevidst at forsøge at undgå hacks (hovedsageligt da jeg synes, de er enormt grimme), og ved at bruge lidt ekstra tid, når noget drillede i en browser, så er det altid lykkedes mig at få designs til at spille i samtlige browsere. Jeg har endnu aldrig måtte bruge et CSS-hack.

Det kræver bare, at man gider ofre lidt ekstra tid på at finde en løsning, der holder, cross-browser, for det er der næsten altid.
Avatar billede jokkejensen Novice
25. februar 2008 - 15:32 #19
Link ?
Avatar billede w13 Novice
25. februar 2008 - 15:44 #20
Helst ikke.. :P
(Èn ting er, at jeg får CSS til at spille, en anden er, at jeg ikke har talent for design og grafik. =D )

Men skrev wipeout_dk noget sted, hvad problemet var i Opera?
Avatar billede jokkejensen Novice
25. februar 2008 - 15:51 #21
nope, han nævner ikke lige hvad ... kun at han ønsker at skrive css til opera..

/JJ
Avatar billede w13 Novice
25. februar 2008 - 15:51 #22
Det kan være, jeg har et eksempel, når jeg har lavet min næste hjemmesideopgave.
Avatar billede jokkejensen Novice
25. februar 2008 - 15:55 #23
hehe jamen det er godt :).. men sjov udtalelse 15:30 :)
Avatar billede olebole Juniormester
25. februar 2008 - 19:14 #24
Hvad er det store problem omkring CSS i Opera?
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