CSS Hacks

29 Nov

Într-o lume perfectă, codul (css/xhtml) valid este interpretat identic de toate browserele. Dar, cum nu suntem într-o lume perfectă, există bug-uri, atribute proprietare unui browser sau altuia şi interpretări greşite. Dar, partea bună este că există şi fix-uri pentru acestea. Cu siguranţă, cel mai înjurat browser de toţi web-developerii este IE, în special versiunile pre 7. Cei ce lucrează de mult timp în domeniu, au avut de-a face şi cu capriciile mai multor versiuni ale IE, spre deosebire de cei recenţi (1-2 ani) ce se „luptă” doar cu IE 6 şi, mai nou, IE 7.

De-a lungul timpului, mi-am format un obicei din ce am citit pe diverse forumuri ce mă ajută foarte mult în dezvoltare şi îmi conferă o oarecare siguranţă: fac site-ul pentru Firefox, îl testez în Opera şi Safari şi fac debugging pe IE. Din fericire, până acum nu am avut mari probleme cu Opera şi/sau Safari (de fapt nu am avut deloc :D ), singurele dureri de cap fiind date de IE, despre care voi scrie puţin.

Pentru Firefox, cel mai bun tool pentru debugging este firebug. În cazul în care nu ştiai şi înjurai cea mai mică problemă, există ceva asemănător pentru IE. Nu este atât de performant, dar are un inspector care, de cele mai multe ori, te ajută foarte mult.

Cele mai mari probleme ale IE sunt deja documentate pe multe site-uri, problema cea mai mare fiind aplicarea soluţiilor respective. Cea mai simplă soluţie, dar nu şi cea mai recomandată, este un fişier CSS comun, unde se aplică diverse hack-uri (ce le vom vedea un pic mai jos). Nu este recomandată deoarece versiuni viitoare ale browserelor pot interpreta greşit acele hack-uri. Nu vrea nimeni ca la un update să i se strice site-ul, nu?

Soluţia optimă este, cu siguranţă, folosirea comentariilor condiţionale, interpretate doar de IE:

1
<!--[if condiţie] HTML <![endif]–>

unde Condiţie ar fi oricare din opţiunile următoare:

  • IE - orice versiune de IE
  • IE x - o anumită versiune a IE
  • lt IE x - IE cu o versiune mai mică de X, unde X este numărul versiunii de IE. (ex lt IE 6)
  • lte IE x - IE cu o versiune mai mică sau egală de X
  • gt IE x - IE cu o versiune mai mare de X
  • gte IE x -IE cu o versiune mai mare sau egală de X

Ok, cum se foloseşte? Metoda aleasă de mine este următoarea:

1
2
3
<!--[if IE]>

	<link rel="stylesheet" href="css/screen_ie.css" type="text/css" media="screen" />
< ![endif]-->

Asta înseamnă că, dacă browserul este IE, se încarcă screen_ie.css. ATENŢIE! Această condiţie se pune în cod DUPĂ includerea stilului principal şi conţine fix-uri pentru TOATE versiunile IE. Acesta e motivul pentru care, în screen_ie.css vom folosi şi hack-uri specifice fiecărei versiuni. Desigur, se poate include câte un fişier pentru fiecare versiune, dar metoda mea mi se pare mai la îndemână :D

Pentru IE 6, selectorul este

* html  #header {border:1px solid red}

Pentru IE 7

*:first-child+html #header {border:1px solid blue}

Rezultatul: elementul cu id-ul header va avea border roşu pe IE 6 şi border albastru pe IE 7

Bonus, un îndrăgostit de Jack Daniels, a făcut nişte referinţe rapide, utile oricui


Referinţe
http://www.webdevout.net/css-hacks

Debugging in IE - tutoriale video

Scris în categoria: Css, Development, Tutoriale

10 Comentarii »

  1. daca pui fisier separat pt IE la ce nevoie mai ai de hack-uri? doar pt diferentierea intre versiunile de IE?

  2. 29 November 2007 Catalin N a spus:

    Ai incercat cu IE7 ? http://dean.edwards.name/IE7/
    Rezolva multe bug-uri si nu costa mult la size si viteza si tot conditional se incarca

  3. chiar ieri mi s-a întâmplat să nu meargă ceva bine pe ie7 şi să meargă pe ie6. am preferat să pun hack, pentru a evita alte probleme :)

    nu am încercat IE7 deoarece nu am atât de multe bug-fix-uri încât să se strângă mai mult de 2-3k :D

  4. La mine incepe sa domine IE7 un pic. Sper sa se faca trecerea cat mai repede sa pot scapa de atrocitatea aia de IE6. Si Microsoftu ar putea sa ne ajute si sa puna IE7 ca update obligatoriu la IE6. Mda .. la pastele cailor.

    Oricum … mai nou nu imi mai prea pasa. Folosesc metoda * html, il fac sa arate cat de cat bine si de detaliile mai marunte nu ma mai ocup.

  5. nu cred că există vreun update obligatoriu la ceva :)
    şi pe lângă procesele avute de microsoft referitor la integrarea mediaplayer şi internet explorer, asta ar fi cireaşa de pe tort
    Bine că apple nu bagă în osX iTunes şi safari….

  6. De la Microsoft se pot stoarce mai multi bani :)

    esti cumva os x? ce browser folosesti?

  7. nu, eu sunt Ntz :w00t:
    sunt în windows, dar am şi osx :) în ambele folosesc firefox

  8. *pe* os x :))

    intrebam sa vad daca-s singurul cu probleme … pana de curand foloseam safari. Firefox 2 mergea ca un melc si se bloca din 10 in 10 minute, dar vad ca au rezolvat problema in FF3 beta. merge perfect! :)

  9. [...] introducerea pentru a va indruma sa cititi un articol despre hack-uri si fixuri IE, pe blogul lui Ionut. La orice nivel ati fi (incepator sau avansat in css) gasiti cateva sfaturi si linkuri [...]

  10. Eu prefer sa folosesc fisiere separate pentru IE6 si IE7, e mai simplu, si stiu exact ce fac …
    AM intotdeauna controlul !

Lasă un comentariu

Poţi folosi câteva taguri XHTML: <blockquote> <strong> <a> <em>

Pentru a posta secvenţe de cod, foloseşte
<pre lang="php/css/html/javascript"> CODUL TĂU <pre>