在许多网站上,我看到有href="#"的链接。这是什么意思?它的用途是什么?


当前回答

正如其他一些回答所指出的,a元素需要href属性,#用作占位符,但它也是一个历史工件。

来自Mozilla开发者网络:

href 这是锚定义的惟一必需属性 超文本源链接,但在HTML5中不再需要。省略 此属性创建一个占位符链接。href属性 链接目标,URL或URL片段。一个URL Fragment是一个名称,前面有一个散列标记(#),它指定了一个 当前文档中的内部目标位置(ID)。

此外,根据HTML5规范:

如果a元素没有href属性,则该元素表示a 占位符,用于链接可能被放置的位置 都是相关的,只包含元素的内容。

其他回答

不幸的是,<a href="#">最常见的使用是由懒惰的程序员使用的,他们想要可点击的非超链接javascript编码的元素,这些元素的行为像锚一样,但它们不能被用来添加游标:指针;或者:悬停样式到类的非超链接元素,并且懒得将href设置为javascript:void(0);。

The problem with this is that one <a href="#" onclick="some_function();"> or another inevitably ends up with a javascript error, and an anchor with an onclick javascript error always ends up following its href. Normally this ends up being an annoying jump to the top of the page, but in the case of sites using <base>, <a href="#"> is handled as <a href="[base href]/#">, resulting in an unexpected navigation. If any logable errors are being generated, you won't see them in the latter case unless you enable persistent logs.

如果一个锚元素被用作非锚元素,它的href应该设置为javascript:void(0);为了优雅的堕落。

我只是浪费了两天时间调试一个随机的、意外的页面重定向,它本应该只是简单地刷新页面,最后追踪到一个引发<a href="#">点击事件的函数。将#替换为javascript:void(0);固定它。

我星期一要做的第一件事是清除<a href="#">的所有实例的项目。

超链接:

锚标记(<a></a>)的主要用途是作为超链接。这基本上意味着他们会带你去某个地方。超链接需要href属性,因为它指定了一个位置。

散列:

A hash - `#` within a hyperlink specifies an HTML element id to which the window should be scrolled.

Href ="#some-id"将滚动到当前页面上的一个元素,例如<div id="some-id">。

href = " / /网站。示例:/#some-id”将访问站点。示例并滚动到该页上的id。

滚动到顶部:

Href ="#"没有指定id名称,但是有一个对应的位置——页面顶部。点击href="#"的锚将滚动位置移到顶部。

请看这个演示。

根据w3文档,这是预期的行为。

超链接占位符:

An example where a hyperlink placeholder makes sense is within template previews. On single page demos for templates, I have often seen <a href="#"> so that the anchor tag is a hyperlink, but doesn't go anywhere. Why not leave the href property blank? A blank href property is actually a hyperlink to the current page. In other words, it will cause a page refresh. As I discussed, href="#" is also a hyperlink, and causes scrolling. Therefore, the best solution for hyperlink placeholders is actually href="#!" The idea here is that there hopefully isn't an element on the page with id="!" (who does that!?) and the hyperlink therefore refers to nothing - so nothing happens.

关于锚标签:

Another question that you may be wondering is, "Why not just leave the href property off?". A common response I've heard is that the href property is required, so it "should" be present on anchors. This is FALSE! The href property is required only for an anchor to actually be a hyperlink! Read this from w3. So, why not just leave it off for placeholders? Browsers render default styles for elements and will change the default style of an anchor tag that doesn't have the href property. Instead, it will be considered like regular text. It even changes the browser's behavior regarding the element. The status bar (bottom of the screen) will not be displayed when hovering on an anchor without the href property. It is best to use a placeholder href value on an anchor to ensure it is treated as a hyperlink.

请参阅演示样式和行为差异的演示。

它实际上是一个不指向任何地方的链接(它只是在URL上添加了“#”)。它被用于许多不同的原因。例如,如果您正在使用某种JavaScript/jQuery,并且不希望实际的HTML链接到任何地方。

它还用于页面锚,用于重定向到页面的不同部分。

创建无序列表的目的通常是将它们用作菜单,但li列表项是文本。因为列表li项是文本,所以鼠标指针将不是箭头,而是“I光标”。当可以点击某个东西时,用户习惯于看到指向的手指是鼠标指针。在li标记内使用锚标记会使鼠标指针变为指向的手指。如果将列表用作菜单,那么用手指就更好了。

<ul id="menu">
   <li><a href="#">Menu Item 1</a></li>
   <li><a href="#">Menu Item 2</a></li>
   <li><a href="#">Menu Item 3</a></li>
   <li><a href="#">Menu Item 4</a></li>
</ul>

如果列表用于菜单,并且不需要链接,则不需要指定URL。但问题是,如果省略href属性,<a>标记中的文本将被视为文本,因此鼠标指针将返回到I-cursor。i -游标可能会使用户认为菜单项不可点击。因此,您仍然需要一个href,但不需要指向任何地方的链接。

您可以为菜单列表使用许多div或p标记,但鼠标指针也可以作为它们的I-cursor。

您可以使用许多按钮堆叠在彼此的菜单列表,但列表似乎更可取。这可能就是为什么href="#"在列表标记中的锚标记中不指向任何地方的原因。

你可以在CSS中设置指针样式,这是另一种选择。href="#"可能只是设置一些样式的偷懒方式。

正如其他一些回答所指出的,a元素需要href属性,#用作占位符,但它也是一个历史工件。

来自Mozilla开发者网络:

href 这是锚定义的惟一必需属性 超文本源链接,但在HTML5中不再需要。省略 此属性创建一个占位符链接。href属性 链接目标,URL或URL片段。一个URL Fragment是一个名称,前面有一个散列标记(#),它指定了一个 当前文档中的内部目标位置(ID)。

此外,根据HTML5规范:

如果a元素没有href属性,则该元素表示a 占位符,用于链接可能被放置的位置 都是相关的,只包含元素的内容。