JSF中的<!DOCTYPE>部分应该长什么样?HTML5还是XHTML?

15

现在我只是抱着好奇心。在Eclipse中,例如对于新的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>

在开发过程中它是正常工作的,但我想知道这种方法在未来通过许多浏览器或设备(移动设备)是否会出现任何问题。

2个回答

18

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

JSF的官方规范要求生成符合XHTML 1.0标准的标记(只有herethere中存在一些实现违规问题,这在JSF 2.2中已经得到修复或者可以通过上下文参数进行管理)。JSF设计上不能产生非XML语法(例如<br>而不是<br/>),因此旧的HTML4文档类型与JSF生成的HTML输出方式不兼容(也就是说,当您遵循标准和/或担心W3验证器时;然而,大多数如果不是所有的浏览器都对此很宽容)。与旧的HTML4文档类型相反,HTML5文档类型允许使用XML语法,因此可以使用HTML5文档类型编写JSF页面。

文档类型只影响网页浏览器如何解释和呈现HTML标记(在您的特定情况下由JSF生成,但HTML不一定需要由JSF生成,因此浏览器的呈现与JSF技术是没有直接关系的)。特别是Microsoft IE对某些文档类型或完全缺少文档类型存在严重问题。您可以在本页底部找到有关特定文档类型与浏览器行为的简明概述。共有三种标准行为:

  • Q - Quirksmode。你真的不想要这个。它会在IE中触发box model bug。CSS widthheight 然后错误地覆盖了 paddingborder
  • A - Almost standards mode。价格实惠,只有表格单元格的垂直大小不符合CSS2规范。如果您想避免mysterious gaps of images in table cells,则很有用。
  • S - Standards mode。浏览器尝试完全符合w3 HTML/CSS标准。由于这是唯一的模式,您可以更少或更确定您的网站在所有浏览器中看起来完全相同,因此是首选模式。

在您的特定情况下,从XHTML 1.0 transitional文档类型更改为HTML5文档类型,Firefox、Chrome、Safari和IE>=8将从“A”变为“S”。因此,如果您打算进行像素完美设计,则应仔细检查网站的图像填充在表格单元格中的浏览器呈现。

关于IE中doctype的重要性,下面是一段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>

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

enter image description here

参见:


谢谢你的回答,我的朋友。它非常有帮助,就像往常一样! - Valter Silva

1
最好的解决方案是只在索引模板中使用详细声明,并在那里包含头部和正文模板。 如果不可能,您可以省略此声明。这是“标准”的,但不是真正必要的!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接