2012-01-16 53 views
3

我有一个旧的网站,该网站正确呈现在FF 3.6,IE 7〜8等,但在FF失败9强制浏览器忽略HTML 5个功能

问题是一个古老的(预HTML 5)第三方网站使用JS框架(伍德斯托克)增加了一个HIDDEN属性一些HTML元素,所以当我看HTML的萤火我看到这样的代码:

<table id="foo" hidden=""> 

这些页面被送达:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

这对于为HTML 4设计的浏览器没有HIDDEN属性效果很好。但支持HTML 5的最新浏览器会解释此属性并隐藏我需要显示的元素。

修改(不支持的)第三方框架以避免使用HIDDEN属性将非常困难。

是否有可能强制浏览器呈现页面,就像它们是HTML 4一样,而不是对HTML 5功能做任何解释?其他建议欢迎...

+2

XHTML既不是HTML 4也不是5.您可能也在使用MIME类型为“text/html”的文档? – deceze 2012-01-16 01:27:17

+0

它被用作text/html(单独的问题,对吗?)。我将首先尝试改变DOCTYPE,正如Zee所建议的那样。 – 2012-01-16 02:24:44

+0

是的,将XHTML文档作为“text/html”服务的问题在于您只是在提供HTML汤。 XHTML应严格解释为XML,这首先是使用XHTML的好处。为此,您需要使用'application/xhtml + xml' MIME类型来提供XHTML文档。 – deceze 2012-01-16 03:17:55

回答

6

IE以外的浏览器只实现了一个HTML(当然,除了怪癖模式外)。

但是,所有hidden属性都会触发UA样式表中的某些样式规则。您可以添加自己的样式规则来覆盖这些规则。这些规则需要多复杂取决于框架将元素添加到的元素,但一种综合方法是从HTML5规范或http://mxr.mozilla.org/mozilla-central/source/layout/style/html.css复制各种display规则,但涉及hidden的规则除外,只需将它们放入您的页面链接到的样式表。

+0

鲍里斯,隐藏的属性是通过显示实现的要求:没有,因为它似乎是?问题是相对较低的特异性使得它很容易无意中覆盖规则。例如,请参阅http://jsfiddle.net/yYemx/1/如果JS是第一次编写的,并且只在非常情况下运行,并且稍后由其他人添加了CSS,那么CSS编写器不太可能知道他们添加的常见规则将会破坏隐藏属性的使用。 – Alohci 2012-01-16 08:24:36

+1

对于Web浏览器,这是一个要求,是的。请参阅http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#hidden-elements这是Web浏览器的规范要求。 – 2012-01-16 17:12:29

+0

谢谢。通过使用display:table来定义特定元素来解决问题。不是优雅的,但我在这种情况下的首选选项,因为它是非常有针对性的,并保证不会混淆其他元素。 – 2012-01-16 22:37:43

2

是的,你应该宣布正确的DOCTYPE。如果它确实是HTML4,则应该将其声明为HTML4,而不是XHTML。

请参阅http://www.w3.org/QA/2002/04/valid-dtd-list.html了解您可以使用的不同类型。

+0

谢谢。我会尝试更改DOCTYPE,并让它知道它是否有效。 – 2012-01-16 02:21:22