我有两个使用HTML制作的页面,我使用以下标准
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
这两个页面是 index.html ,另一个是 about.html 。我在索引页面中创建了一个徽标,如下所示
Index.html
的HTML标记<div class="logo"></div>
CSS中的我做了以下
.logo {
background: url ('../images/logo.png') no-repeat;
height: 300px;
width: 100px;
}
在 about.html 页面中,我编写了以下html标记
<a href="index.html">
<div class="logo"></div>
</a>
上面的标记工作正常,但是当我使用 w3c验证器时,它会给我警告,因为它不是标准标记。
我的问题是如何使html标记符合标准并给出相同的结果?
答案 0 :(得分:3)
你应该这样做:
<a href="index.html" class="logo"></a>
然后您的css将直接应用于a
,而不是嵌套的空div
。您需要将display: block;
添加到CSS,因为a
具有不同的默认display
。
答案 1 :(得分:3)
如果您需要保留此标记结构,则有两种选择:
使用HTML5 doctype,其中<a><div>this</div></a>
等锚点内的块级元素有效且合法。
HTML5文档类型为:<!doctype html>
请记住,目前还没有正式的HTML5验证服务。
使用内联元素<span>
作为徽标:
<a href="index.html">
<span class="logo"></span>
</a>
如果您使用#2,只需将display:block
添加到.logo
根据您的设计目标和其他标记,您可能根本不需要内部元素,只需通过赋予<a>
来设置class="logo"
元素的样式。
答案 2 :(得分:2)
您在验证程序中看到的问题是因为<div>
是块级标记,而<a>
标记是内联标记。
内联标记不能包含块级标记,这就是验证者抱怨的原因。
事实上,这条规则被广泛忽视,因为否则许多事情变得很难进入链接。此外,它只适用于较旧的HTML和xhtml版本(xhtml特别挑剔);当前的HTML5标准确实允许它,因为他们看到了由规则引起的问题。
所以简短的回答是改用HTML doctype(<!DOCTYPE HTML>
),你的问题就会消失。
“正确”的答案是使用<a>
或display:block;
为display:inline-block;
标记添加样式,以便它可以包含块级元素。这将使它在语法上正确。然而,这通常不满足验证器,因为它只是查看默认的显示类型,而不是CSS。
或者,切换<div>
的{{1}}。这将满足验证者的要求,您仍然可以使用<span>
和朋友来使其像display:block
一样工作。
希望有所帮助。
答案 3 :(得分:0)
不使用徽标图像作为背景,而是在DIV中放置标记。您不能将标记包装在像DIV这样的块元素周围。
<a href="index.html">
<div class="logo">
<a href='gosomewhere.html'>
<img src='mylogo.png'alt='' title=''/>
</a>
</div>
答案 4 :(得分:0)
链接(a
标签)是内联元素,意味着多个元素适合同一行,而div
是块元素,这意味着每行只有一个。在内联样式元素中插入块样式元素是无效的HTML 4.01,因为这会阻止内联元素实际呈现为内联。
有关内联元素和块元素的详细信息,请参阅此页面:http://www.webdesignfromscratch.com/html-css/css-block-and-inline/
答案 5 :(得分:0)
根据W3c标准的第4部分,将Div
标记放入Anchor
标记内是否无效。
anchor
标记是iline
元素,Div
是block
级元素。您不能将block
级元素放在inline
元素中。
这是关于你的问题的另一个好的SO讨论。
Is putting a div inside an anchor ever correct?