众所周知,浏览器会接受无效的HTML并尽力使用它来理解它.如果您创建的网页仅包含以下代码:
<html>
<head>
<title>This is bad HTML</title>
<body>
<h1>Bad HTML</h2>
<p>This is a paragraph
</body>
Run Code Online (Sandbox Code Playgroud)
然后你会得到一个网页解析方式,显示一个可接受的视图.是否是您的意思,取决于每个浏览器对您的错误的理解.
对我来说,这就像Javascript可以写成这样:
if (some_var == 1) {
say_something("some text');
else {
do_something_else();
// END OF CODE
Run Code Online (Sandbox Code Playgroud)
其中,一个Javascript编译器用同样的努力来理解无效代码可以按照你的意思进行解析- 或者说它自己有意义,但毕竟是运行它.
我已经看过几篇关于"它是否值得编写有效的HTML?"这一问题的文章和问题.,对写有效 HTML 的优缺点提出了几点看法.然而,这真让我惊讶的是:
为什么浏览器首先接受无效的 HTML?
注意:以下问题不是更多的问题,而是一种方法,为我在这里提出的唯一问题提供背景:
为什么浏览器不严格?
他们为什么不拒绝错误无效代码,就像任何其他编程语言一样?(不是我称HTML为编程语言,但你明白了)
难道不会强迫所有开发人员编写HTML代码,在任何浏览器中都会被完全相同地解释吗?
如果浏览器拒绝解析无效标记,那么在任何地方以及想要在网络上发布内容的人都不会有效地产生有效标记吗?
如果这是出于历史原因和向后兼容性,那么当我们已经看到像adsense.google.com这样的网站拒绝与IE <v10的兼容性时,是否还有时间进行更改?
编辑:投票结束此问题的人,请重新考虑.这不是一个广泛的问题,也不是基于意见的问题.对于一个非常具体的主题,这是一个非常具体的问题,与编程世界完全相关,并且实际上可以通过真正了解它的人的真实答案来回答.谢谢.
有没有什么好方法可以让ASP.NET 2.0在XHTML 1.0严格(或过渡)DTD下进行验证?在我破解HTTP响应的核心之前,我有兴趣听一些想法.
一个主要问题是表单标签本身,这是我在尝试验证时从W3C获得的输出:
Line 13, Column 11: there is no attribute "name".
<form name="aspnetForm" method="post" action="Default.aspx" onsubmit="javascript
Run Code Online (Sandbox Code Playgroud)
众所周知,该标签对ASP.NET来说非常重要.Hmmmm.
似乎(严格)html不允许在a中嵌套任何非内联元素<p>,但是我应该如何呈现包含列表的段落(通常在自然文本中出现的内容).我看到三个答案似乎都不满意:
<p>是块部分段落,并且对于一个标记正试图以更语义方向移动,似乎不好.<div class="mypara">- 这看起来像是一种绕过整个事情并放弃使用带有适当语义的文本标记的坏方法.还有其他方法可以做到这一点在语义上是正确和有效的吗?
我想要一个严格但完全兼容的html5替代方案:
<!doctype html>
Run Code Online (Sandbox Code Playgroud)
基本上我想确保使用结束标记只是为了使所有内容在编辑器中清晰可读,一致并突出显示.
这个问题的答案是HTML 5,因为XHTML-1.0-strict是HTML 4.
提前致谢.
有人可以向我解释为什么要有一个doctype
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
和
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
在Firefox下以不同的方式呈现以下块?
<table style="border-collapse:collapse; margin:0; padding:0;">
<tr>
<td style="border:1px solid red; margin:0; padding:0;"><img src="http://images.smh.com.au/2010/06/01/1533814/th_park-90x60.jpg" style="border:none; padding:0; margin:0;" /></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
使用'Transitional',图像下面没有空白区域,使用'Strict'就可以了!
第二个问题,使用严格,是否有可能删除这个空格?
我将我的doctype指定为xhtml strict,但它是作为text/html的内容类型通过网络发送的.我想指定内容类型是application/xhtml + xm,但我无法弄清楚我可以在我的应用程序中配置它的位置
我正在使用严格的XHTML.我想在SPAN标签里放一个LABEL标签.这是正确的方法吗?
<label>Username <span>*</span></label><input type="text" .... />
Run Code Online (Sandbox Code Playgroud) 将Microdata添加到我的页面后,我从W3C验证器那里得到了很多错误,抱怨itemprop:
没有属性"
itemprop"
从这样的代码:
<p itemprop="description">...</p>
Run Code Online (Sandbox Code Playgroud)
这是我的DOCTYPE和html标签
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="http://www.facebook.com/2008/fbml">
Run Code Online (Sandbox Code Playgroud)
如何修复验证器错误?
ps以前我也有验证器错误itemscope.但在我将其更改为itemscope="itemscope"之后,错误得到修复.
对于不支持JavaScript的访问者,我将它们重定向到某个页面 - "js.html".
为此,我在所有文件中都有以下内容:
<noscript>
<meta http-equiv="Refresh" content="0;URL=js.html" />
</noscript>
Run Code Online (Sandbox Code Playgroud)
当然,这不会在XHTML中验证,因为必须放入noscript <body>.但是,当我将该代码放在我的文档正文中时,我得到另一个错误,因为元标记只能在该<head>部分中使用,所以我在这里陷入无限循环.
有没有办法进行验证?它适用于所有浏览器,所以这不是什么大问题,我只是想验证我的应用程序.
我在html中使用了一些自定义属性,用于jquery的东西.我看到data-XYZHTML5中有属性,但我需要xhtml 1.0严格.我还有其他选择吗?