14

这只是我现在的好奇心。例如,在 Eclipse 中,这是在New Facelet 模板<head>上定义的部分,但对于大多数模板来说,都是一样的:

<!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>

它在开发中运行良好,但我想知道这种方法是否会在未来通过许多浏览器或设备(移动设备)产生任何问题。

4

2 回答 2

18

那是 HTML5 文档类型,它应该在所有浏览器中都能正常工作,包括 IE6。

JSF 被正式指定为生成符合 XHTML 1.0 的标记(实现中只有少数违规行为在 JSF 2.2 中得到修复和/或可由上下文参数管理)。JSF 在设计上不能产生非 XML sytnax(例如<br>代替<br/>),因此旧的 HTML4 文档类型与 JSF 产生的 HTML 输出决不兼容(也就是说,当您尊重标准和/或害怕W3 验证器时;但是,如果不是所有的浏览器都非常宽容)。与旧的 HTML4 文档类型相反,HTML5 文档类型允许 XML 语法,因此与 XHTML 文档类型兼容。因此,JSF 页面可以使用 HTML5 文档类型进行创作。

doctype 仅对 webbrowser 如何解释和呈现 HTML 标记很重要(在您的特定情况下由 JSF 生成,但 HTML 不一定需要由 JSF 生成,因此浏览器的呈现在技术上与 JSF 完全无关)。尤其是 Microsoft IE 在某些 doctype 方面存在重大问题,或者完全没有 doctype。在此页面的底部,您可以找到结合某些文档类型的浏览器行为的简明概述。有以下三种标准行为:

  • Q - 怪癖模式。你真的不想拥有那个。它会触发IE 中的框模型错误。CSSwidth然后height错误地覆盖了paddingand border
  • A - 几乎标准模式。经济实惠,只有表格单元格的垂直尺寸不符合 CSS2 规范。如果您想避免表格单元格中图像的神秘间隙,这很有用。
  • S - 标准模式。浏览器尝试完全符合 w3 HTML/CSS 标准。首选模式,因为它是唯一一种模式,您可以或多或少地确定您的网站在所有浏览器中看起来都完全相同。

在您的特定情况下,随着从 XHTML 1.0 过渡文档类型到 HTML5 文档类型的更改,Firefox、Chrome、Safari 和 IE>=8 将从“A”变为“S”。因此,如果您想要一个像素完美的设计,您绝对应该查看浏览器对您网站的展示,以了解表格单元格中的图像填充。

关于文档类型在 IE 中的重要性,这里有一段 HTML 演示了 IE6-9 中“Q”触发的盒子模型错误(注意,这不再在 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>

复制'n'粘贴'n'运行它。现在<!DOCTYPE html>,您将看到一个矩形。如果没有 doctype 行,您将看到一个真正的正方形(在 IE10 中,您需要在 webdeveloper 工具集中(按 F12)将“浏览器模式”更改为例如 IE9 才能看到它)。

在此处输入图像描述

也可以看看:

于 2013-04-16T11:24:22.850 回答
1

最好的解决方案是在索引模板中只使用一次详细声明,并在其中包含标题和正文模板。如果这不可能,您可以离开此声明。这是“标准”,但不是真正必要的!

于 2013-04-16T11:16:48.003 回答