Jump to content

Почему большинство сайтов используют XHTML?


PetrovDS
 Share

Recommended Posts

Собственно говоря, я заметил, что почти все сайты, которые я посещаю используют именно XHTML, а не HTML4.01 или HTML5. Теперь мне ужасно интересно, почему выбирают именно эту технологию, ведь в ней не так много интересных фишек, как например в HTML5. Да и имеет XHTML более строгий синтаксис, чем те же HTML5 и HTML4.01. Так вот, почему именно эта технология? :)

  • Like 1
Link to comment
Share on other sites

HTML4 vs XHTML1:

В какой-то промежуток времени XHTML1 был очень модным трендом. Из-за более строгого синтаксиса, многие считали, что он указывал на профессионализм верстальщика. За этот интервал времени многие прывыкли к синтаксису XHTML1 или он им более понравился нежели HTML4(я в том числе). Мне(и многим) интересней было верстать на XHTML1 больше, а сложностей он, практически, не прибавлял... Почему же тогда не использовать?) ИМХО

В общем, XHTML1 - это модно(было, щас эта эстафета переходит к HTML5) для многих, в том числе заказчиков.

HTML4/XHTML1 vs HTML5:

Почему чаще встечаеться XHTML1, чем HTML5? Потому-что:

1. HTML5 - новый формат, он начал использоваться всего ~2 года назад(а активно и того меньше...) и только начинает глобально распространяться.

2. Даже сейчас многих сдерживает: незнания, лень/нежелание учить что-то новое, время...

Но HTML5 - это уже не просто модный тренд, как было с XHTML1, это будущее верстки. Почему? На этот ответ можно написать десертацию... Если нужно будет(или не в курсе), поделюсь ссылками на хорошие статьи на тему HTML5.

Edited by Viper
  • Like 2
Link to comment
Share on other sites

Нет никакого HTML4, XHTML1, HTML5 - есть просто HTML. Неважно, что автор пишет (или думает, что пишет), важно, что (и как) браузер парсит.

Так вот парсит он не как HTML. Это больше XML+HTML (частичный SGML, я бы сказал)

Link to comment
Share on other sites

Можно чуть подробнее?

Я понял вопрос автора темы как "Почему на большинстве популярных сайтов стоит доктайп XHTML 1.x", т.к. из сайтов, действительно использующих XHTML ("технический", а не "маркетинговый", XHTML по определению Генри Сивонена) сходу могу назвать лишь xpoint.ru. Что никак не тянет на "большинство". С обычным же Content-type text/html, насколько я в курсе, любая разметка (независимо от доктайпа и "строгости синтаксиса") парсится либо как HTML5 (FF 4+, Хром 7+, Опера 11.6+), либо "как исторически сложилось" (достаточно похоже на HTML5 по построению за вычетом новых тегов), и уж совсем непохоже на XML. И это подтверждается моим личным опытом и всеми авторитетными источниками, что мне попадались...

Link to comment
Share on other sites

Вот этот пример доказывает, что браузер

1. Знает про xmlns

Отнюдь. Он тупо находит элемент со странным именем "test:div" в дефолтном для HTML5 неймспейсе, и работает с ним как с любым неизвестным...

  • Like 1
Link to comment
Share on other sites

из сайтов, действительно использующих XHTML ("технический", а не "маркетинговый", XHTML по определению Генри Сивонена) сходу могу назвать лишь xpoint.ru

Сейчас зашёл туда и не нашёл ни единого признака xhtml. Может быть, не xpoin.ru, а xiper.ru?

Но там я вижу такое:

<!--?xml version="1.0" encoding="utf-8"?-->

Закомментировали от греха подальше)) На других форумах, посвящённых вёрстке, не раз встречал листинги с XHTML-ем, да и только. А крупные сайты не могут позволить себе так рисковать.

Link to comment
Share on other sites

Сейчас зашёл туда и не нашёл ни единого признака xhtml. Может быть, не xpoin.ru, а xiper.ru?

У меня Page Info в FF там показывает такое:

xpoint.png

И xml-пролог не закомменчен.

А на xiper.net — обычный "маркетинговый" text/html.

Link to comment
Share on other sites

Вот этот пример доказывает, что браузер

1. Знает про xmlns (чего нет в HTML)

2. Умеет с ним работать на уровне отображения, но не на уровне JS

Вообще в хелпе по jsFiddle написано:

Please do not enter doctype, body etc. into the HTML panel. These tags are placed automatically.

Так что зря вы добавляете туда доктайп, есть мнение, что там все равно стоит HTML5-доктайп...

post-8922-0-23606600-1335947968.gif

Так что s0rr0w может оказаться прав.

Link to comment
Share on other sites

Функционально эти доктайпы эквивалентны (более того, для HTML5 они оба валидны!). Парсер не в доктайпе, а в браузере. Если он совсем не понимает неймспейсов — он не поймет их с любым доктайпом (при text/html). Если понимает выборочно (для VML в IE5.5+ или для SVG и MathML в новых браузерах) — то опять же с любым доктайпом он будет раскидывать знакомые элементы по знакомым неймспейсам, а любые незнакомые (даже с двоеточием в имени) сваливать в дефолтный (как велит ныне узаконенный алгоритм парсинга).

Link to comment
Share on other sites

При отдаче как text/html странички с любым Strict-доктайпом HTML 4.x/XHTML 1.x либо HTML5-доктайпом каждый браузер парсит и рендерит одинаково. Старые браузеры — как "исторически захардкодано", новые — по алгоритму из спеки HTML5 (во многом основанного на изучении работы старых, ради максимальной совместимости).

Между стандартным режимом и Quirks mode у некоторых браузеров бывали различия при парсинге (напр. тот же IE в Quirks mode позволял вкладывать в <p> таблицу, а какая-то Мозилла, ЕМНИП, по-разному реагировала на двойной дефис в комментариях), но это редкие и не принципиальные исключения.

Фичу с "частичной поддержкой выборочных неймспейсов" для нового алгоритма, насколько я понимаю, позаимствовали как раз у IE, из его манеры встраивать в HTML-разметку VML-графику (хотя детально я вопрос не изучал, но на беглый взгляд очень похоже).

Link to comment
Share on other sites

В ИЕ, кроме режима совместимости есть еще режимы ИЕ7 и ИЕ8, на счет ИЕ8 не скажу, а вот в ИЕ7 разбор идет точно не по правилам HTML5. Например незнакомый ему элемент <test> он рендерить правильно отказывается.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title></title>

<style type="text/css">
test {border: 1px solid;}
</style>
</head>
<body>

<test>test</test>

</body>
</html>

UPD: ИЕ8 тоже не хочет этому элементу присваивать бордер.

UPD2: сменил <header> на <test> для наглядности.

Link to comment
Share on other sites

Ну так IE7 и никак не назвать новым браузером... да и IE8 уже тоже :)

Но рендеринг — отдельная тема. Рендерятся и Strict с Transitional чуть по-разному. А парсинг, да, в IE (особенно старых) самый специфический.

Link to comment
Share on other sites

Я так понимаю, что из-за того, что в IE8-(минус) нет поддержки xml, они и не применяют стили к неизвестным им тегам. То есть тот же тег test в примере, расценивается как, что-то невменяемое и пропускается. Собственно из-за чего и пошла вся волокита с html5shiv, чтобы хоть как-то задурить IE и заставить понимать не известные ему теги.

Link to comment
Share on other sites

Поддержка XML тут ни при чем (кстати, она в IE5+ есть, это у application/xhtml+xml нет поддержки, а при */xml не применяется CSS, подключенный не через <?xml stylesheet?>). Это именно самовольство IEшного алгоритма парсинга HTML (впрочем, насколько я понимаю, формально не нарушающее спеку HTML 4). А стилизация «незнакомцев» после соотв. createElement очень сильно смахивает на недокументированную особенность реализации самого createElement-а в IE.

Link to comment
Share on other sites

Поддержка XML тут ни при чем (кстати, она в IE5+ есть, это у application/xhtml+xml нет поддержки, а при */xml не применяется CSS, подключенный не через <?xml stylesheet?>). Это именно самовольство IEшного алгоритма парсинга HTML (впрочем, насколько я понимаю, формально не нарушающее спеку HTML 4). А стилизация «незнакомцев» после соотв. createElement очень сильно смахивает на недокументированную особенность реализации самого createElement-а в IE.

Скорее всего, js-функция появилась гораздо позже парсера. Парсер таки умеет новые теги трансформировать в DOM-структуру, но не включает их в список рендеринга, а createElement регистрирует их у рендерера.

  • Like 1
Link to comment
Share on other sites

Парсер таки умеет новые теги трансформировать в DOM-структуру, но не включает их в список рендеринга, а createElement регистрирует их у рендерера

Ого как. Спасибо за поправку! Но всё равно, имхо, такая логика попахивает побочным эффектом какой-то внутренней "оптимизации". На MSDN я упоминания о такой особенности createElement не нашел (может, плохо искал).

Link to comment
Share on other sites

Парсер таки умеет новые теги трансформировать в DOM-структуру, но не включает их в список рендеринга, а createElement регистрирует их у рендерера

Ого как. Спасибо за поправку! Но всё равно, имхо, такая логика попахивает побочным эффектом какой-то внутренней "оптимизации". На MSDN я упоминания о такой особенности createElement не нашел (может, плохо искал).

Это не оптимизация, это недоделки. :rolleyes:

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy