单个HTML锚标记实际呈现TWICE!截图

Luk*_*ett 3 html xhtml

我在HTML和CSS的第二次尝试中有10行,它立即完成了一些完整的事情.

我有以下代码(这整个页面):

<!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">
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
        <title>Some page title</title>
        <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.1.1/build/cssreset/reset-min.css" />
        <link rel="stylesheet" type="text/css" href="47926.css" />
        <link rel="stylesheet" type="text/css" href="960Clear.css" />
    </head>

    <body>
        <div id="rootDiv">
            <div class="container_16" id="topBarDiv">
                <div id="topBarLogoDiv">
                    <a id="topBarLogoLink" href="~/Home/ComingSoon" title="Coming soon page"/>
                </div>
            </div>
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这里是CSS(960Clear.css,其他是960网格和YUI重置):

#rootDiv {
    height: 70px;
    background-color: #F7F7F7;
}

#topBarLogoDiv {
    background-image: url('file:///C:/Users/Public/Documents/~Main/Vuplan/S26.Vuplan.Web.Application/Images/logo-vuplan-color-on-alpha-172x49.png');
    background-color: #F7F7F7;
    background-repeat: no-repeat;
    margin-left: 20px;
    height: 50px;
    width: 172px;
    display: block;
    overflow: hidden;
}

#topBarLogoLink {
    height: 50px;
    width: 172px;
    min-height: 50px;
    min-width: 172px;
    display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)

这个简单,简单的页面不起作用.Internet Explorer是我最初的问题,在顶部角落最多可以渲染四个徽标,但是现在让我们忽略Internet Explorer,因为即便是Firefox也在做最疯狂的事情.

我在包装器div之外渲染另一个整个锚元素,这个奇怪甚至在F12diag工具窗口中作为另一行代码可见!

我拍了一个屏幕截图来证明:

http://0olmuq.bay.livefilestore.com/y1pxx75x_th_V0FX15uiLSOAK7MbKnHOQ17L9WMLg4K1TrIoZ0_xEaTgveh0_xF0S8o1Ae8WVvQLNWjQzyGl5AXsPpMV9MW0aDI/One%20Anchor%20Tag%20Renders%20Two%20Anchor%20Tags%20Crap.jpg?psid=1

对我来说,HTML + CSS工作是在地狱中受到惩罚,但这需要饼干.地球上到底发生了什么?

注意

我的错 - 我之前应该添加这个免责声明.

上面的代码似乎让一些人感到困惑.请记住它处于实验状态,因为我试图弄清楚为什么我会得到多个徽标和一般的奇怪.

我还没有纠正本地链接(生产方式完全不同,无论如何都是通过ASP.NET MVC方法生成).

想象一下,有人在管道房子时遇到问题而你去调查.房子可能尚未完工; 请忽略丢失的地毯;-)

Tom*_*Tom 6

您无法关闭A标签,/>需要将其关闭<a href="#">Link</a>

双重渲染是Firefox/Firebug解析无效的HTML.

  • @Luke - 没有浏览器没有错,验证器也没有.只是他们有不同的优先级,浏览器提供一些东西,无论他们发送什么垃圾,验证者指出垃圾是什么.因此,验证器传统上使用DTD和mime类型的浏览器.DTD和mime类型不匹配时会出现问题,最常见的情况是使用text/html mime类型发送XHTML DTD有效网页时.HTML5将通过废除DTD并使用与浏览器类似的mime类型的验证器来解决这个问题. (3认同)
  • ad d:那将是"read-my-mind mode",即HTML.阅读你的想法并不是浏览器的工作(虽然这对你来说是愚蠢的,但对我来说并非如此 - 我甚至不是电脑) - 因为你宣称该页面是XHTML,所以写你的页面是你的工作这样它就是有效的XHTML.你的IDE应该警告你是对的 - 如果没有,请尝试W3C标记验证器:http://validator.w3.org/(它在FF的Web Developer Toolbar中很好地集成).此外,引用柴郡猫:"我们都疯了";) (2认同)

Yi *_*ang 5

首先,如果你知道你要编写错误的代码,至少让浏览器提前知道.使用doctype比原来更宽容strict(技术上这并没有真正做多,但我认为每一点都有帮助)

接下来,与大多数其他语言不同,网格框架和辅助工具实际上更适合中级和高级用户.CSS新手更容易被他们搞糊涂.(这是主观的,我知道,但这是很多人表达的观点,我们在这里给出建议,不是吗?)

现在为站点徽标.我认为这是个人偏好的问题,但通常会将标识标记为h1s.有多种方法可以实现你想要的东西,我只会给我习惯使用的方法:

HTML:

<h1>
  <a href="#">Site Name</a>
</h1>
Run Code Online (Sandbox Code Playgroud)

CSS:

h1 {
  float: left;
  overflow: hidden;
}

h1 a {
  display: block;
  background: url('path/to/logo.png') no-repeat;
  width: 100px;
  height: 100px;
  text-indent: -9999px;
}
Run Code Online (Sandbox Code Playgroud)

您的URL不正确:~/Home/ComingSoon并且file:///C:/Users/Public/Documents/~Main/Vuplan/S26.Vuplan.Web.Application/Images/logo-vuplan-color-on-alpha-172x49.png可能在本地工作,但如果要将其放在服务器上,则需要使用相对路径(假设您不打算使用服务器端脚本生成这些URL)


#topBarLogoLink {
    height: 50px;
    width: 172px;
    min-height: 50px;
    min-width: 172px;
    display: table-cell;
}
Run Code Online (Sandbox Code Playgroud)

在min-height和min-width声明是没有用的:他们是唯一有用的,如果你不声明固定width和height.min-height和max-height属性以及它们的宽度对应物用于流体布局,其中设计者给予浏览器一定程度的灵活性以适应不同的屏幕尺寸和其他不可控制的因素.

该display: table-cell声明也有点可疑:如果您希望内联a元素扩展到其父级的大小,div您可以使用display: block


#topBarLogoDiv {
    background-image: url('file:///C:/Users/Public/Documents/~Main/Vuplan/S26.Vuplan.Web.Application/Images/logo-vuplan-color-on-alpha-172x49.png');
    background-color: #F7F7F7;
    background-repeat: no-repeat;
    margin-left: 20px;
    height: 50px;
    width: 172px;
    display: block;
    overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

除了网址问题之外,背景颜色也不应重新声明 - 默认情况下,HTML元素具有透明背景颜色.display: block在这里声明也是不必要的--s div是块级元素.


哦,如果你对这个评论感到冒犯,我真的很抱歉.我真的是.考虑一下我弥补这一点,好吗?

  • 易,我接受你的道歉,我认为你已经成熟了.很多无关的CSS是由于我摆弄了解决问题的方法.我多年来一直是.NET magasine(netmag.co.uk)的订阅者,我从未接触过HTML,但我正在准备.我学到的一件事是看似随机的CSS设置修复了IE渲染问题,显示:table-cell出现了一些问题.我之前没有关于锚点的div,我添加了一个然后复制了CSS,包括块设置.我希望我的代码能够显示导致感知到的"错误"的确切状态.谢谢,卢克 (2认同)