Bieži sastopama problēma, kā izrādās. Gadās, ka, lietojot Microsoft Internet Explorer 6, nav iespējams normāli iezīmēt tekstu. Šī problēma, lai cik dīvaini tas nebūtu, ir tieši ar sesto versiju. Ar piekto viss ir kārtībā. Lai gan tur ir citas problēmas.
Bieži vien, ja Tu centies iezīmēt tekstu, kas atrodas absolūti pozicionētos
elementos, tad tas nemazam nestrādā. Tiek iezīmēta puse lapas, taču ne tas
teksts, kuru vajadzēja. Šī problēma ir aktuāla tieši IE6, jo ar IE5 viss darbojās
lieliski.
Šī problēma atgadās tad, ja tiek mēģināts iezīmēt tekstu, kas atrodas zemāk
(vertikāli skatoties)
par lapas statisko saturu (parasti tas nozīmē jebkādu taga <body>
saturu) un
tikai tad, ja pārlūks darbojas standards-compatible režīmā. Bet, kad
tas notiek, tas ir ļoti kaitinoši. Tici man. Un, ja netici, vari pārbaudīt
ar šo žūrnālu – tieši tā pati problēma.
Tagad neliela atkāpe teorijai. Kas tas tāds standards-compatible režīms?
Nu, tāds.. mazs, pūkains zvēriņš, daudz neēd..
Pārlūks, attēlojot jebkuru HTML dokumentu, darbojas divos režīmos – atpakaļsavietojamajā
(backward-compatible; Mozillas inženieri to sauc par quirks režīmu,
MS to nesauc nekā) un standartiem atbilstošajā (Mozillai – strict,
IE – standards-compatible).
Otrais režīms ir pēc iespējas tuvāk W3C rekomendācijām.
Režīms, kādā pārlūks
darbosies, tiek noteikts pēc HTML faila DOCTYPE. Vai tā neesamības. Īpaši lielas
jēgas no DOCTYPE norādīšanas nav. Bet tas tā ir pagaidām. Nākotnē tam būs lielāka
nozīme. Pagaidām tas skaitās labais stils tādu norādīt katram HTML failam.
Šajā DOCTYPE var norādīt gan to, ka tas ir HTML 4.01 dokuments, gan to, ka
tas ir XHTML 1.1 dokuments. Protams, ja pārlūkam kāds no šiem DOCTYPE izrādīsies
liels jaunums un pirmā dzirdēšana, tad tas izmantos savu iebūvēto, veco DOCTYPE
definīciju. Tas notiks arī tad, ja DOCTYPE netiks norādīts vispār. Tā ka nevar
teikt, ka no tā vispār nav nekādas jēgas. Parasti to norāda tad, ja web-lapa
tiek veidota tieši jaunākajām pārlūku versijām (piemēram, 6.), tiek izmantota
precīza elementu pozicionēšana un smalki piestrādāts pie CSS un DOM specifikāciju
ievērošanas.
Piezīme Starp citu, uzzināt, kāds režīms tiek izmantots, var
ar JavaScript palīdzību, izmantojot document.compatMode
īpašību.
(Vienkārši dokumenta body
elementā ievieto script
tagu un tajā ieraksti "alert(document.compatMode);
".)
Paeksperimentē ar vairākiem pārlūkiem, pieliekot un noņemot gan XML prologu
(<?xml .. ?>
), gan pašu DOCTYPE. Rezultāti ar Netscape un
MSIE atšķiras. (Heh.. protams!)
Īsumā Visas HTML 4.x/strict un XHTML DTD definīcijas ieslēdz standards-compatible režīmu,
vienalga, vai, definējot DOCTYPE, ir norādīts DTD faila URL vai nav. Tāpat
arī šis režīms tiek ieslēgts, ja, izmantojot HTML 4.x transitional un frameset
DTD failus, tiek norādīta to URL adrese.
Un tagad atpakaļ pie problēmas. Tātad, ja IE darbojas standards-compatible režīmā,
tad ir problēmas ar iezīmēšanu.
Risinājumi
1. neizmantot standards-compatible. Jā,
tā var. Tādā gadījumā var vai nu vispār nenorādīt DOCTYPE (fuj!), vai arī pirms tā pierakstīt
XML prologu "<?xml version="1.0" encoding="utf-8"?>
" (enkoudings, protams, var būt cits).
Tas nostrādās. IE darbosies tajā režīmā, ko Mozillinieki sauc par quirks.
Patiesībā tas emulēs MSIE 5.x versijas pārlūku.
2. neizmantot absolūto pozicionēšanu. Stulbi.
3. neuztraukties par IE lietotājiem un ignorēt šo problēmu. Var! Lai vaino Microsoft'u,
nevis mani. :)
4. Tom Gilder iesaka izmantot šādu haku:
Hmm.. Es to izpētīju. Es to izmēģināju. Tas strādā. Bet tā arī nesapratu tā
jēgu. Nu..
Kā tas darbojas un ko tas dara. Ir tāda nojauta, ka tas "izstiepj" body
elementu
pa visu ekrānu (un tāpēc visi absolūti pozicionētie elementi tik un tā atrodas
body
robežās). Tā ir? Uzminēju?
Lai nu kā, es ceru, ka vismaz kādam palīdzēju tikt vaļā no galvassāpēm bez medicīnas palīdzības, ja tas arī ir saskāries ar šādu problēmu.
Paldies Kindai un asdf'am par
informāciju. Šis lielākoties ir tulkots. Dažādi info avoti.
Saites: 1.
avots, 2.
avots, 3.
avots.