Teknike
Deklarimi DOCTYPE
Rreshti <!DOCTYPE html> në krye të dokumentit; pa të, shfletuesi kalon në modalitet pajtueshmërie me shfletuesit e viteve '90.
Çfarë është
<!DOCTYPE html> është rreshti i parë i çdo dokumenti HTML. Ai nuk është etiketë dhe nuk përmban informacion — është një çelës.
Kur ekziston, shfletuesi renderon në "modalitet standardesh": zbaton rregullat moderne të CSS-së dhe të layout-it. Kur mungon, shfletuesi kalon në "modalitet të çuditshëm" (*quirks mode*), ku imiton sjelljen e Internet Explorer 5 për të mos prishur faqe të vitit 1998.
Në atë modalitet, llogaritja e gjerësive ndryshon, lartësitë e rreshtave ndryshojnë, dhe një pjesë e mirë e CSS-së moderne sillet ndryshe nga sa pret.
Pse ka rëndësi
Pasoja është vizuale dhe e papritshme. Faqja mund të duket pothuajse e saktë dhe të ketë një element të zhvendosur, ose të shpërbëhet krejt. Simptoma klasike është layout-i që del i saktë në një shfletues dhe i prishur në një tjetër, sepse modaliteti i çuditshëm nuk zbatohet njësoj kudo.
Problemi është veçanërisht i keq për layout-e të rrjedhshme: llogaritja e gjerësisë së kutive ndryshon, dhe një faqe e ndërtuar për telefon shpërbëhet.
Për motorët e kërkimit, mungesa e DOCTYPE-it nuk është faktor renditjeje i drejtpërdrejtë. Por motori e renderon faqen për të vlerësuar përdorshmërinë mobile — dhe nëse ajo shpërbëhet në render, vlerësimi bie.
Shkaku është gati gjithnjë i njëjti: diçka shkruhet para DOCTYPE-it. Një hapësirë, një rresht bosh nga një skedar i përfshirë, ose një BOM.
Si rregullohet
<!DOCTYPE html>
<html lang="sq">
<head>
<meta charset="utf-8">Hapat:
- Asgjë para tij. As hapësirë, as rresht bosh, as koment.
- Kontrollo skedarët e përfshirë. Në PHP, një rresht bosh pas
?>te një skedar i përfshirë del në dalje para DOCTYPE-it. - Ruaj skedarët pa BOM. Tri bajtet e BOM-it shfaqen para DOCTYPE-it dhe e prishin.
- Përdor formën e shkurtër `<!DOCTYPE html>`, jo variantet e gjata XHTML.
- Për ta parë modalitetin aktual, hap konsolën e shfletuesit dhe shkruaj
document.compatMode—CSS1Compatdo të thotë modalitet standardesh,BackCompatdo të thotë modalitet i çuditshëm.
Si e mat ky mjet
TechnicalAnalyzer::checkDoctype() (services/TechnicalAnalyzer.php:74) kërkon nënvargun <!doctype brenda 100 shenjave të para të HTML-së së papërpunuar, pa marrë parasysh shkronjat e mëdha. Dy dalje: gjendet (:79, kaluar), nuk gjendet (:81, paralajmërim).
Çfarë NUK e mat
Kontrolli është kërkim nënvargu, jo parsim. Ai nuk dallon midis <!DOCTYPE html> dhe një DOCTYPE-i të vjetër XHTML ose HTML 4 — të dyja kalojnë, ndonëse vetëm e para e garanton modalitetin e standardeve në çdo shfletues.
Nuk kontrollohet as nëse ka tekst para DOCTYPE-it: mjafton që ai të rrijë brenda 100 shenjave të para. Një dokument me 50 shenja mbeturinë përpara e kalon kontrollin, ndonëse shfletuesi mund ta trajtojë ndryshe.
Dhe nuk verifikohet sjellja reale — mjeti nuk e renderon faqen, prandaj nuk e di se në cilin modalitet përfundoi vërtet.
Kodi që e kryen matjen
services/TechnicalAnalyzer.php:74— TechnicalAnalyzer::checkDoctypeservices/TechnicalAnalyzer.php:81— missing_doctype