1

在我的部分代码中,我将<DIV>元素放在<SPAN>. 通过 CSS 自定义,它可以正常工作,但页面没有通过 W3 验证。

代码如下所示:

<span class="spanclass">
    <div class="divclass">Content</div>
</span>

验证后我收到此错误:

所提到的元素不允许出现在您放置它的上下文中;其他提到的元素是唯一允许在那里并且可以包含提到的元素的元素。这可能意味着您需要一个包含元素,或者您可能忘记关闭前一个元素。出现此消息的一个可能原因是您试图将块级元素(例如“ <p>”或“ <table>”)放入内联元素(例如“ <a><span>或“ <font>”)中。

我知道如果我<div>用 代替可以很容易地解决这个问题<span>,但我对另一种解决方案感兴趣:

如何通过DTD声明强制验证器,以允许内联元素中的块级元素?

4

3 回答 3

1

您已经知道它是无效的 HTML。因此,为了符合标准实践并仍然实现您想要重用spanclassCSS 将新的 CSS 类定义为

spanclass, divlikespanclass {
  /* span css data */
}

并将您的 HTML 更改为

<div class="divlikespanclass">
    <div class="divclass">Content</div>
</div>

或者,简单地说

<div class="divclass divlikespanclass">Content</div>

编辑:(回应OP的评论;虽然不推荐)

重新声明<SPAN>

<!ELEMENT SPAN - - ((%inline;) | DIV)*  -- generic language/style container -->

或者,适用于所有内联元素更改

<!ENTITY % inline "#PCDATA | DIV | %fontstyle; | %phrase; | %special; | %formctrl;">
于 2013-08-03T16:29:48.367 回答
1

您(以及此处的大多数答案)似乎将三个截然不同的概念混为一谈:有效性、针对 HTML(或 XHTML)DTD 的有效性以及对 HTML(或 XHTML)规范的一致性。

  • 当且仅当文档符合在该 DTD 中表达的规则时,文档才对特定 DTD 有效。

    您可以通过提供文档对其有效的 DTD 来使任何文档有效(在某种绝对意义上)。这允许数据通过无意义和无意义的测试,这些测试要求 XML 在其生命周期中的某个特定点有效,而无需指定它对什么模式有效。(你听起来好像是在试图让数据通过这样的测试,尽管目前尚不清楚这种无意识和无意义的测试是别人强加给你的,还是你强加给你的。)

    具体来说,您可以通过告诉验证器使用适当的 DTD(或其他模式)来使通用 XML 验证器报告您的输入是有效的。如果您制作了 XHTML DTD 的修改版本,并从您的文档中指向它,那么您描述的文档很容易被报告为针对该 DTD 有效。(这不一定适用于 HTML 的 W3C 验证服务,因为该服务不是通用的基于 DTD 的验证器,它对 HTML 输入使用特殊规则。)

  • 当且仅当一个文档符合在那个(那个风格的)DTD 中表达的规则时,一个文档对(给定风格的)(X)HTML DTD 是有效的。

    您不能使在元素中嵌入div元素的 HTML 文档span对该 DTD 有效,因为根据定义,DTD 禁止此类嵌入。修改 DTD 以使其接受此类嵌入具有生成新的不同 DTD 的自然结果,该 DTD 不再是 (X)HTML DTD。

  • 当且仅当文档满足该规范中规定的文档的一致性要求时,文档才符合 (X)HTML 规范。

    您不太可能导致在元素中嵌入div元素的文档span被视为符合标准。一个结论性的演示需要比我今天早上花费更多的时间来处理 HTML 规范。

于 2013-08-13T16:53:42.547 回答
0

你不能(或不应该)因为它违反规范。

跨度只能包含“短语内容”。基本上这归结为: <abbr>, <audio>, <b>, <bdo>, <br>, <button>, <canvas>, <cite>, <code>, <command>, <datalist>, <dfn>, <em>, <embed>, <i>, <iframe>, <img>, <input>, <kbd>, <keygen>, <label>, <mark>, <math>, <meter>, <noscript>, <object>, <output>, <progress>, <q>, <ruby>, <samp>, <script>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <svg>, <textarea>, <time>, <var>, <video>, <wbr> or plain text. 有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/HTML/Content_categories#Phrasing_content

于 2013-08-03T16:23:59.913 回答