ISSN 1312-0379

Главна > Статии > Код

Правилният DOCTYPE. От Джефри Зелдман.

Направили сте всичко правилно, но сайтът ви не изглежда както трябва в последните версии на браузърите.

Написали сте валиден XHTML и CSS код. Използвали сте стандартния Document Object Model (DOM) на W3C, за да обработвате динамичните елементи на страницата. И въпреки това сайтът ви не работи в браузърите създадени да поддържат същите тези стандарти. Вероятно причината е в грешния DOCTYPE (бел. прев. чете се "доктайп". Тук е мястото да се извиня, но редица термини в английския нямат абсолютно никакъв превод на български и същевременно звучат странно на родния ни език. Така мн. ч. на доктайп става доктайпове и т.н.).

Тази малка статия ще ви даде DOCTYPE-овете, които вършат работа и ще обясни практическия ефект от тези иначе изглеждащи абстрактни тагове.

Защо DOCTYPE-а?

Според HTML и XHTML стандартите, DOCTYPE (съкратено от "document type declaration" или "декларация за вида на документа") дава информация на валидатора коя версия на (X)HTML използвате и трябва да присъства в самото начало на всяка уеб страница. DOCTYPE-овете са ключов компонент на всяка страница спазваща стандартите: кодът и CSS няма да бъдат валидни без тях.

Както беше споменато в предишни статии в ALA (и на други интересни места), DOCTYPE-овете също така са от решаващо значение за правилното показване и функциониране на уеб документите в браузърите поддържащи стандартите (като Mozilla, IE5/Mac и IE6/Win).

Правилният DOCTYPE, включващ пълен URI (пълен уеб адрес), казва на тези браузъри да показват вашата страница в режим "съвместима със стандартите" и да се отнасят с вашия (X)HTML, CSS и DOM както очаквате.

Използването на непълен или остарял DOCTYPE или въобще изпускането DOCTYPE-а превключва същите тези браузъри в режим "увъртане", в който браузърът приема, че сте написали старомоден, невалиден код в традициите на изпадналата в рецесия индустрия от края на 90-те години.

В този режим браузърът ще се опита да обработи страницата в по начин съответстващ на старите браузъри, показвайки вашия CSS както би изглеждал в IE4 и преминавайки към съответния специфичен за този браузър DOM. (IE преминава към IE DOM; Mozilla и Netscape 6 минават на бог знае какво.)

Ясно е, че вие не искате това. Но често вие ще получите точно това, заради широкоразпространените неверни или непълни DOCTYPE-ове, които тази статия се надява да поправи.

(Забележка: Браузърът Opera не играе по тези правила; той винаги се опитва да покаже страниците в режим на съвместимост със стандартите. Само Opera! От друга страна, Opera все още не предлага солидна поддръжка на W3C DOM. Но работят по въпроса.)

Къде се дянаха всички DOCTYPE-ове?

Понеже DOCTYPE-овете са жизненоважни за правилното функциониране на уеб стандартите в браузърите и понеже W3C е водещ фактор при създаването на уеб стандарти, очакваме сайтът на W3C да предлага списък с правилни DOCTYPES, а освен това бихме очаквали да намерим тази информация бързо и лесно на едно определено място. Но поне по времето, в което пиша тази статия, това е невъзможно.

W3.org не е A List Apart, WebReference или Webmonkey. Той няма за цел да помага на уеб дизайнерите, разработчиците и другите приятелчета да се оправят из най-новите препоръки и начини за работа. Това не е негова работа.

W3C публикува серия от уроци, но повечето уеб разработчици не знаят за това. Сайтът на W3C основно съдържа колекция от предложения, чернови и Препоръки, писани от маниаци за маниаци. И когато казвам маниаци, нямам предвид обикновените уеб професионалисти като вас и мен. Имам предвид маниаци, които ни карат да изглеждаме като Баба ни и първия път, когато Тя Имаше Поща™.

Може цял ден да претърсвате w3.org за DOCTYPE-ове, но няма да намерите и една страница, която ги изброява всичките. И когато най-накрая проследите някой DOCTYPЕ (обикновено във връзка с някоя отделна Препоръка или Чернова), той често е точно този, който няма да проработи на вашия сайт.

Из сайта на W3C са разпръснати DOCTYPE-ове с липсващи URI или относителни URI, които сочат към конкретни документи от сайта на W3C. Веднъж извадени от сайта на W3C и използвани във вашите уеб страници, тези URI сочат към несъществуващи документи. По този начин те провалят най-големите усилия на браузърите и на вас самите.

Например, много сайтове използват този DOCTYPE, copy & paste-нат директно от w3.org:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "DTD/xhtml1-strict.dtd">

Ако погледнете последната част от този DOCTYPE ("DTD/xhtml1-strict.dtd"), ще видите, че това е относителна връзка към документ в сайта на W3C. Понеже този документ е на сайта на W3C, а не на вашия, URI-то е безполезно за браузъра.

DOCTYPE, който всъщност бихте искали да използвате е:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Забележете, че последният DOCTYPE включва пълният URI в края на тага. Понеже тагът сочи към съществуващо място в Мрежата, браузърът знае къде да го намери и ще покаже вашия документ в режим на съвместимост със стандартите.

DOCTYPE-ове, които работят

И в края на краищата, какви DOCTYPE-ове трябва да използваме? Радвам се, че попитахте. Следващите пълни DOCTYPE-ове са онези, които ни трябват:

HTML 4.01 Strict, Transitional, Frameset

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
     "http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 Strict, Transitional, Frameset

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML 1.1 DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

Следващите стъпки

Как можете да допринесете за увеличаване на поддръжката на стандартите в Мрежата? Освен да си отбележите тази страница (и да използвате тези DOCTYPE-ове в работата си), можете да проверите дали вашият уеб редактор слага правилните DOCTYPE-ове, сравнявайки ги с тези по-горе.

Много добронамерени разработчици на софтуер използват непълни DOCTYPE-ове в програмите си. Резултатът: когато използвате вградените възможности на тези програми да вмъкват DOCTYPE-овете във вашите страници, браузърите минават в режим на "увъртане" пренебрегвайки целия ви упорит труд.

Заслужава си да се свържете с приятелчетата, които правят вашия любим софтуер и да им покажете правилните DOCTYPE, молейки ги учтиво да използват тях в следващата версия. (В някои случаи, може би ще можете сами да настроите своя редактор.)

Очаквайте

Имаме всички основания да вярваме, че скоро на сайта на W3C ще се появи полезен списък с точните, използваеми DOCTYPE-ове и друга важна информация на лесно за намиране място. Всъщност Карл Дюбост, мениджър в Quality Assuraance екипа на W3C, допринесе за информацията в тази малка статия.

Иначе, когато скоро стартира The Web Standards Project отново (наистина скоро), той също ще дава тази информация.

Но сайтове се правят всеки ден и вие имате нужда от тази информация сега - така че ето я.

Приятно писане на код!