似乎有一些不同的技术,所以我希望得到一个“明确的”答案……

在一个网站上,创建一个链接到主页的标志是很常见的做法。我想做同样的事情,同时对搜索引擎、屏幕阅读器、IE 6+和禁用CSS和/或图像的浏览器进行最佳优化。

例一:不使用h1标记。对搜索引擎优化不太好,对吧?

<div id="logo">
    <a href="">
        <img src="logo.png" alt="Stack Overflow" />
    </a>
</div>

例二:在某个地方找到了这个。CSS看起来有点俗气。

<h1 id="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
#logo {
    padding: 70px 0 0 0;
    overflow: hidden;
    background-image: url("logo.png");
    background-repeat: no-repeat;
    height: 0px !important;
    height /**/:70px;
}

例三:相同的HTML,使用文本缩进的不同方法。这就是图像替换的“Phark”方法。

<h1 id="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
#logo {
    background: transparent url("logo.png") no-repeat scroll 0% 0%;
    width: 250px;
    height: 70px;
    text-indent: -3333px;
    border: 0;
    margin: 0;
}

#logo a {
    display: block;
    width: 280px; /* larger than actual image? */
    height: 120px;
    text-decoration: none;
    border: 0;
}

例四:Leahy-Langridge-Jefferies方法。当图像和/或css被关闭时显示。

<h1 id="logo" class="logo">
    <a href="">Stack Overflow</a>
</h1>
/* css */
h1.logo {
    margin-top: 15px; /* for this particular site, set this as you like */
    position: relative; /* allows child element to be placed positioned wrt this one */
    overflow:hidden; /* don’t let content leak beyond the header - not needed as height of anchor will cover whole header */
    padding: 0; /* needed to counter the reset/default styles */
}

h1.logo a {
    position: absolute; /* defaults to top:0, left:0 and so these can be left out */
    height: 0; /* hiding text, prevent it peaking out */
    width: 100%; /* 686px; fill the parent element */
    background-position: left top;
    background-repeat: no-repeat;
}

h1#logo {
    height: 60px; /* height of replacement image */
}

h1#logo a {
    padding-top: 60px; /* height of the replacement image */
    background-image: url("logo.png"); /* the replacement image */
}

对于这种事情,什么方法是最好的?请在回答中提供html和css。


当前回答

W3C是怎么做的?

看看https://www.w3.org/就知道了。 图像的z指数为:1,文本在这里但在后面,因为z指数为:0耦合到位置:absolute;

原始HTML:

<h1 class="logo">
    <a tabindex="2" accesskey="1" href="/">
        <img src="/2008/site/images/logo-w3c-mobile-lg" width="90" height="53" alt="W3C">
    </a>
    <span class="alt-logo">W3C</span>
</h1>

原CSS:

#w3c_mast h1 a {
    display: block;
    float: left;
    background: url(../images/logo-w3c-screen-lg) no-repeat top left;
    width: 100%;
    height: 107px;
    position: relative;
    z-index: 1;
}
.alt-logo {
    display: block;
    position: absolute;
    left: 20px;
    z-index: 0;
    background-color: #fff;
}

其他回答

我所做的主要类似于上面的方法,但是出于可访问性的原因,我需要支持在浏览器中禁用图像的可能性。因此,我没有将链接中的文本缩进到页面外,而是将<span>完全定位到<a>的全宽和高,并使用z-index将其按堆叠顺序置于链接文本之上。

价格是一个空的<span>,但我愿意有一些重要的东西,如<h1>。

<h1 id="logo">
  <a href="">Stack Overflow<span></span></a>
</h1>
#logo a {
   position:relative;
   display:block;
   width:[image width];
   height:[image height]; }

#logo a span {
   display:block;
   position:absolute;
   width:100%;
   height:100%;
   background:#ffffff url(image.png) no-repeat left top;
   z-index:100; /* Places <span> on top of <a> text */  }

一个新的(Keller)方法应该可以提高-9999px方法的速度:

.hide-text {
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
}

推荐:http://www.zeldman.com/2012/03/01/replacing - - 9999 px -攻击-新-图像- replacement/

如果你不想在<h1>中包装你的图像时应用浏览器样式,你可以使用属性role="heading"和aria-level="1"来获得与<h1>相同的可访问性和SEO改进。

例如,就画外音而言,这个

<标题> < a href = " / " > 堆栈溢出 < / > < / h1 >

<div role="heading" aria-level="1"> < a href = " / " > <img src="https://via.placeholder.com/150" alt="Stack Overflow" /> < / > < / div >

说得有点晚了,但还是忍不住了。

你的问题有一半是错误的。让我解释一下:

你的前半部分问题,关于图像替换,是一个有效的问题,我的观点是,对于一个标志,一个简单的图像;一个Alt属性;和CSS对其定位是足够的。

你问题的后半部分,关于logo H1的“SEO值”,是决定不同类型内容使用哪些元素的错误方法。

logo不是一个主要的标题,甚至根本不是一个标题,在你网站的每一页上使用H1元素标记logo会(稍微)对你的排名弊大于利。从语义上讲,标题(H1 - H6)适用于:内容的标题和副标题。

In HTML5, more than one heading is allowed per page, but a logo isn't deserving of one of them. Your logo, which might be a fuzzy green widget and some text is in an image off to the side of the header for a reason - it's sort of a "stamp", not a hierarchical element to structure your content. The first (whether you use more depends on your heading hierarchy) H1 of each page of your site should headline its subject matter. The main primary heading of your index page might be 'The Best Source For Fuzzy Green Widgets in NYC'. The primary heading on another page might be 'Shipping Details for Our Fuzzy Widgets'. On another page, it may be 'About Bert's Fuzzy Widgets Inc.'. You get the idea.

旁注:尽管听起来不可思议,但不要从谷歌拥有的网页属性中寻找正确标记的例子。这是一个完整的帖子。

要从HTML及其元素中获得最大的“SEO价值”,请查看HTML5规范,并在搜索引擎之前根据(HTML)语义和对用户的价值做出标记决定,这样您的SEO将获得更好的成功。

W3C是怎么做的?

看看https://www.w3.org/就知道了。 图像的z指数为:1,文本在这里但在后面,因为z指数为:0耦合到位置:absolute;

原始HTML:

<h1 class="logo">
    <a tabindex="2" accesskey="1" href="/">
        <img src="/2008/site/images/logo-w3c-mobile-lg" width="90" height="53" alt="W3C">
    </a>
    <span class="alt-logo">W3C</span>
</h1>

原CSS:

#w3c_mast h1 a {
    display: block;
    float: left;
    background: url(../images/logo-w3c-screen-lg) no-repeat top left;
    width: 100%;
    height: 107px;
    position: relative;
    z-index: 1;
}
.alt-logo {
    display: block;
    position: absolute;
    left: 20px;
    z-index: 0;
    background-color: #fff;
}