HTML Doctype差异

时间:2012-05-23 18:02:56

标签: asp.net html

我一直在ASP.net中创建一个网站,使用vs2010中的默认模板和Site Master。 我得到了一些奇怪的结果,其中带有跨度的图像不会排列,因为它们之间总是有空格。 我花了好几个小时看着标记,最后在绝望中创建了一个普通的.htm文件,并将我的html复制到其中。令我惊讶的是,这实际上是有效的,所以经过另一个小时的比较差异,我注意到模板创建了site.master与

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

然而它使用

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

任何人都可以解释Strict(导致我的布局错误)和Transitional(这意味着布局是我期望的)之间的区别,如果在我的aspx页面中使用Transitional将会导致我未来的任何困难吗?

我确实在VS中发出警告

validation (xhtml 1.0 transitional): element 'h2' cannot be nested within element 'span'

我猜这可能是使用Strict时出错的原因,但我不知道如何绕过它。

编辑:这是导致错误的问题

<a href="http://somelink.com">
    <img src="Images/test.png alt="Test" />
    <span class="Styling for hovering">
        <h2>
            Test
        </h2>
        <p>
            This Is A Test
        </p>
    </span>
</a>

我正在尝试创建一个由图像及其下方文本激活的链接。我想将文本保存在容器中。当容器背景悬停时,容器背景会发生变化。我还为跨度设置了固定大小。这是我需要一些容器的主要原因。

2 个答案:

答案 0 :(得分:2)

无论您使用哪种DOCTYPE,都无法在内联元素(<h2>)中放置块级元素(<span>)。这就是你得到这个错误的原因。由于<span>通常用于样式,我怀疑您可以删除<span>并使用CSS来设置<h2>的样式,以便按照您的需要显示。

答案 1 :(得分:1)

简短的回答?

繁体=允许旧版deprecated HTML标记,例如&lt; font&gt;,&lt; center&gt;,&lt; s&gt;并且对HTML中我们不应该再做的事情非常宽容。

Strict =使用css替换大部分标签,并按照W3C定义的方式强制执行规则。

答案很长:您可以阅读W3C中每种HTML规范类型的25+页specifications,但是如果您要创建新页面,则应该尝试坚持使用 XHTML 1.0严格,因为它是未来的时尚潮流,Transitional为一些平面设计师提供了heebie jeebies。 :)

W3schools对每种类型或多或少的含义都有很好的细分:

  

XHTML 1.0 Strict 此DTD包含所有HTML元素和属性,但不包含表示元素或已弃用的元素   (像字体一样)。不允许使用框架集。标记也必须是   写成格式良好的XML。

     

XHTML 1.0 Transitional 此DTD包含所有HTML元素和属性,包括表示元素和不推荐使用的元素(如   字体)。不允许使用框架集。标记也必须写为   格式良好的XML。