Как должен выглядеть раздел <! DOCTYPE> в JSF? HTML5 или XHTML?

Это просто любопытство, которое у меня сейчас. В Eclipse это раздел <head>, который определен, например, для нового шаблона Facelet, но для большинства шаблонов это одно и то же:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
  ..
</head>

Я бы хотел, чтобы на нем был более понятный код, поэтому я перехожу к:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
  ..
</head>

Он отлично работает в разработке, но мне было интересно, будет ли такой подход давать какие-либо проблемы в будущем через множество браузеров или устройств (мобильных).

Ответ 1

То, что тип HTML5 и он должен хорошо работать во всех браузерах, включая IE6.

JSF официально указан для создания разметки, совместимой с XHTML 1.0 (с здесь и существует несколько нарушений в реализациях, которые исправлены в JSF 2.2 и/или управляемы с помощью параметров контекста). JSF может по дизайну не генерировать non-XML sytnax (например, <br> вместо <br/>), и поэтому старый тип документа HTML4 никак не совместим с выходным HTML-выходом JSF (то есть, когда вы уважаете стандарты и/или опасайтесь W3 validator, однако большинство, если не все браузеры, очень прощают на нем). В отличие от старого документа HTML4, doctype HTML5 допускает синтаксис XML и поэтому совместим с доктринами XHTML. Поэтому страницы JSF могут быть написаны с помощью документа HTML5.

Доктрипт имеет значение только для того, как webbrowser интерпретирует и представляет HTML-разметку (как это сделано JSF в вашем конкретном случае, но HTML не обязательно должен быть создан JSF, и поэтому представление браузера технически полностью не связано с JSF). В частности, Microsoft IE имеет серьезную проблему с некоторыми доктринами или полным отсутствием doctype. В нижней части этой страницы вы можете найти краткий обзор поведения браузера в сочетании с определенными доктринами. Существует три стандартных поведения:

  • Q - Quirksmode. Вы действительно этого не хотите. В IE запускается ошибка модели коробки. CSS width и height затем неправильно покрывает padding и border.
  • A - Режим почти стандартов. Доступный, только вертикальный размер ячейки таблицы не соответствует спецификации CSS2. Полезно, если вы хотите избежать таинственных пробелов изображений в ячейках таблицы.
  • S - режим стандартов. Браузер пытается полностью соответствовать стандарту w3 HTML/CSS. Предпочтительный режим, поскольку это единственный режим, в котором вы можете быть менее или более уверенным, что ваш веб-сайт будет выглядеть одинаково во всех браузерах.

В вашем конкретном случае, с изменением переходного doctype XHTML 1.0 до типа HTML5, Firefox, Chrome, Safari и IE >= 8 будут идти от "А" до "S". Итак, вы должны обязательно просмотреть презентацию вашего веб-сайта на своем веб-сайте в отношении заполнения изображений в ячейках таблицы, если вы намерены создать идеальный пиксель.

Что касается важности doctype в IE, вот фрагмент HTML, который демонстрирует ошибку в коробке, вызванную "Q" в IE6-9 (обратите внимание, что это больше не проявляется в IE10):

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Remove DOCTYPE to trigger quirksmode</title>
        <style>
            #box { 
                background: yellow; 
                width: 100px;
                padding: 20px; 
                border: 20px solid black; 
                margin: 20px;
            }
        </style>
    </head>
    <body>
        <div id="box">box</div>
    </body>
</html>

Скопируйте'paste'n'run это. При наличии <!DOCTYPE html> вы увидите прямоугольник. Без линии doctype вы увидите подлинный квадрат (в IE10 вам понадобится набор инструментов webdeveloper (нажмите F12), чтобы изменить "Режим браузера", например, IE9, чтобы увидеть его).

enter image description here

См. также:

Ответ 2

Лучшим решением было бы использовать подробное объявление только один раз в шаблоне индекса и включать в него шаблоны заголовка и тела. Если это невозможно, вы можете оставить эту декларацию. Это "стандартный", но не очень необходимый!