CMD 1 | Herfst 07 | Browser compatibility

Leerdoelen

Browsers en CSS, Crossbrowser competabiliteit

Aangezien CSS de vormgeving bepaald is het uiterlijk belangrijk. Helaas komen onder andere juist hier de verschillen tussen browsers om de hoek kijken. Dit het heeft te maken met hoe de browser markt zich heeft ontwikkeld. De grootste problemen bestaan bij Internet Explorer 6 (5 en 5.5wordt al bijna nergens meer gebruikt). Vanuit het perspectief van IE gebruiker lijkt er niet veel aan de hand. Ongeveer 60 procent van de gebruikers gebuikt IE dus waarom nog ontwikkelen voor niet IE? Welnu de markt is zo groot dat als je 40 procent van je gebruikers laat liggen kunnen dat een heleboel gebruikers zijn.

Wereldwijd wordt bijgehouden wat de percentages zijn van het gebruik van de verschillende browsers. Een voorbeeld voor tot juli van w3schools.

Bron: http://www.w3schools.com/browsers/browsers_stats.asp

Belangrijker is dat je publiek bekijkt. Je kan je sowieso statistieken bijhouden op je eigen site

Aangezien veel van de tegenhangers gebaseerd zijn op de engine die vanuit Netscape is ontwikkeld (Gecko) is er nog wel tegenaan te ontwikkelen. Moderne Engines (Niet IE) renderen naast enkele kleine uitzondering volgens de standaarden . En dat is wel fijn. Veel developers hadden gehoopt op een dus danige verbetering van IE7 dat er crossbrowser eenvoudig te ontwikkelen was. Dat was helaas valse hoop.

Algehele aanpak

Het schrijven van een CSS bestand is een uitwisseling tussen HTML en CSS. Het omzetten van een vormgeving komt van twee kanten. Het omzetten van een ontwerp naar CSS is al niet makkelijk als de HTML niet mag veranderen is het nog moeilijker. Het beste is om te schrijven vanuit een W3C standaard browser en vervolgens aanpassingen te maken voor IE en eventueel andere browsers. Let op alle browsers hebben bugs!

Problemen bij IE.

Aangezien de eerste Trident engine gebaseerd is op hoe Netscape navigator renderde, zitten er nogal problemen in de interpretatie van CSS. Alle bugs die netscape had zitten zitten totaan IE 6 zeker en sommige ook nog in IE7.
 

Ad 1: Het box model.

IE had traditioneel (t/m IE 5.5) een niet standaard manier om de hoogte en breedte van een element te bepalen: de width en height beschreven niet alleen de breedte en hoogte van de inhoud, maar de breedte en hoogte van alles tot en met de border, maar zonder margin.

box model

Als je dus ontwerpt voor firefox, zul je er voor oude versies van IE de padding en border bij op moeten tellen.

box model verschil

IE6 kan wel werken met het standaard box model, maar doet dat alleen als je een doctype opgeeft. Als je dat nalaat blijft IE op de oude (backward compatible) manier interpreteren.

Informatie over doctype:http://en.wikipedia.org/wiki/Document_type_declaration

informatie over quirksmode: http://en.wikipedia.org/wiki/Quirks_mode

Ad 2: Pseudo classes

Deze zijn bij IE alleen maar toe te passen op een a-tag ( je kan namelijk onmogelijk op een andere element willen klikken toch?). Dus hovers zijn dan onmogelijk behalve op a tags.

Wat je bijvoorbeeld bij een menu zou willen is dat ul + li + a een mooie tab geeft. Om dat te bereiken moet je zorgen dat je a tag zich als een block level element gedraagt

vele voorbeelden van goede menu'tjes en de bijbehorende css vind je op: http://css.maxdesign.com.au/listamatic/

Ad x: vele andere browser bugs

Voor een compleet overzicht zie:
http://www.positioniseverything.net/explorer.html

Aangezien alle browsers bugs hebben.
http://www.positioniseverything.net/gecko.html

Hacks of hoe onderscheid te maken.

Er zijn vele manieren om stylesheets zo te schrijven dat ze in alle browsers doen wat je wilt.

Optie 1:

Link eerst je standaard stylesheet (voor moderne browsers) en vervolgens voor iedere foutgevoelige browser een aparte stylesheet dat de waarden in je standaard stylesheet overschrijft. Maak hiervoor gebruik van de if element. Let op dat de latere definitie altijd een eerdere definitie overschrijft.

   <!--[if IE 5]>
      <link rel="stylesheet" type="text/css" href="iehacks-5.css"/>
   <![endif]-->
  

Optie 2: de tantek hack

Een betere methode is een soort overwrite maken en voor alle elementen die dat nodig hebben. Let wel de laatste definitie wordt altijd gebruikt.

Voorbeeld:

   div.content {
      width: 400px; //verkeerde breedte voor IE5
      voice-family:"\"}\""; //verwarrende code waardoor IE5 stopt met lezen
      voice-family:inherit;
      width: 300px; //goede maat
   }

Optie 3:

Als er weinig aan passingen zijn dan kan je door middel van bepaalde schrijf wijzen ook nog hacks in de CSS toe passen.

Voorbeeld:

    padding:10px;    //Wordt door alle browsers gelezen
    _padding:5px;     // Wordt niet gelezen behalve door IE 5, 6 en 7
    *padding:10px;   // Wordt alleen gelezen door IE7

Een voorbeeld:

Om een div Element te centeren op een pagina moet je een nogal rare hack toepassen. Als je een text-align:left doet zorgt IE ervoor dat deze div wordt gecentreerd. FF gebruikt een andere manier margin:0 auto; De breedte van het element moet wel zijn gedefinieert. Bijvoorbeeld:

#wrap {
width:800px;
margin:0px auto;
text-align:left; //hack voor IE5.5 en 5
}

Sites over allerlei problemen met en CSS en browsers

http://www.brunildo.org/test/
http://www.positioniseverything.net/
http://www.satzansatz.de/cssd/onhavinglayout.html

Michiel's delicious account over CSS

http://del.icio.us/recrotka/css

Auteur: Michiel Mobach en Mio van der Lijn
Seizoen: Herfst
Studiejaar: CMD
Lesnummer: 07
Datum: 16-10-2007
Type les: MME