ugrás a tartalomhoz

IE6/Win id & class combo bug

wiktor · 2004. Aug. 24. (K), 20.38
Tiszteletem minden fórumozónak!

Belefutottam ma egy érdekes IE hibába, de már nem is vagyok benne biztos, hogy hiba... :)

Történt, hogy pontosan azt akartam megcsinálni, amit ezen az oldalon http://jan.moesen.nu/code/html-css/ie-id-class-combo-bug/ veséznek ki. Adott egy oldalon, egy (azaz 1!!!) div, aminek van egy id-je - maradjunk a peldanal - legyen #buggydiv. Amikor az oldal generalodik a szerveroldalon, lehet, hogy .highlighted class-t, de lehet, hogy .lowlighted class-t teszek rá. Akkor értelemszerűen a css-ben mindkettő deklarálnám, #idName.className { /* . . . */ } formában.

Kipróbáltam simán működik FireFox és Opera alatt is és nem is látok benne semmilyen kivetnivalót. Az id csak egyszer fordul elő az oldalon, a classt megadtam, mi kell még? Mondanom sem kell IE alatt nem megy, az tapasztalható, amit a már említett oldalon is olvasható, az IE csak az elsőként megadott deklarációt értelmezi.

Gyakran használom az IE7-et, hát gondoltam megnézem, hogy javítja-e a feltételezett bugot. Nem javítja... :(

Gondoltam lelkes újoncként felvetem a témát az IE7 SourceForge fórumán. :) https://sourceforge.net/forum/forum.php?thread_id=1133148&forum_id=379297

Azt a választ kaptam - Deantől is -, hogy ez így helytelen kódolás és nem érdemes javítani.

Tudom, hogy pikk-pakk ki lehet kerülni az ilyen deklarációkat, nem is ez a gondom, csak most már nagyon érdekel, hogy mi a túró van.

Szerintetek helyes egy ilyen kiválasztó deklaráció? Kinek van igaza? Az IE-nek, vagy a FireFox-nak?

Boccs, hogy hosszú lettem...

w
 
1

helytelen kódolás?

bbalint · 2004. Aug. 24. (K), 23.26
egy szép napon... én is gondoltam, hogy id + class kombót akarok használni; amikor még internet explorer-t használtam, nem pedig valami böngészőt.
és úgy volt, hogy voltak id="message" meg class="info" attribútumok és a rájuk vonatkoztatott szabályok külön-külön működtek is (#message{} és .info{}) de együtt nem. :-|
fogtam az id-t és visszaminősítettem class-nak, mert nem volt túl nagy jelentőssége.

... ééés: gyorsan bepötyögve a
#id.class{
text-align: right;
}
kódot a W3C CSS Validation Servicébe, nem adta semmi jelét hibának, viszont ő úgy írná e fenti kódot, hogy
.class#id{
text-align: right;
}

...ugyanakkor bepróbáltam egy ilyen kódot is, ie-vel hogy
<html>
<head>
<style type="text/css"><!--
.class#id{
background: red;
}
#id.class{
background: green;
}
--></style>
</head>
<body>
<div id="id" class="class">
div
</div>
</body>
</html>
és mindkét formát képes volt értelmezni ez a ... szóval az ie

sőt - legjobb tudomásom szerint - standardos módba kapcsolva is, egy
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="hu" lang="hu" dir="ltr">
féle DOCTYPE-tól sem változott a helyzet, mindkét CSS szabályt képes volt értelmezni.

úgyhogy, lehet a hiba az ön készülékében / HTML-CSS kódjában van.
nálam internet exploiterből 6.0.2600.0 magyar van feltelepítve, mindenféle és fajta patch, egyéb kiegészítő nélkül.

és (szvsz) a firefox-nak meg a dom inspectornak mindig igaza van. legalábbis biztos igazabbja mint a explorer-nek ...

bbalint
2

elvileg mindegy a sorrend

Jano · 2004. Aug. 25. (Sze), 01.54
A CSS specifikacio idezett resze:
selector
  : simple_selector [ combinator simple_selector ]*
  ;
simple_selector
  : element_name? [ HASH | class | attrib | pseudo ]* S*
  ;


eszerint HASH es class kozott nincs sorrendi kulonbseg!

De nagyon jo, hogy kiderult a classID sorrend mert Inertian is volt multkor ez a problema.
3

Mindig csak az elsőt értelmezi...

wiktor · 2004. Aug. 25. (Sze), 12.44
Ez a sorrend felcserélés tényleg jó ötlet. Ki is próbáltam mindhárom böngésző alatt. Kicsit belenyúltam Bálint a kódodba, az alábbiak szerint.

<html>
<head>
<style type="text/css"><!--
.blue#id{
background: blue;
}
.red#id{
background: red;
}
--></style>
</head>
<body>
<div id="id" class="red">
div
</div>
</body>
</html>


A helyzet változatlan. :( IE mindig csak az első deklarációt értelmezi, tehát az említett példa nem lesz piros. Nem csinál semmit (kék sem lesz!), nem rendel hozzá szabályt. FireFox és Opera mindkettőt tudja értelmezni, akár red-et akár blue-t irok a div-hez class-nak, értelmezi függetlenül attól, hogy a kék vagy piros stílust deklarálom először a forrásban.

Nem akarok rágódni ezen a csonton, mert tényleg nem egy nagy valami, de szerintem akkor is IE bug... :)
4

hát ja

bbalint · 2004. Aug. 25. (Sze), 21.47
nagyon úgy néz ki, hogy tényleg hibácska... mint említettem engem nem nagyon érdekelt, inkább használtam class-okat,