[Html] What is href=“#” and why is it used?
Putting the "#" symbol as the href for something means that it points not to a different URL, but rather to another id or name tag on the same page. For example:
<a href="#bottomOfPage">Click to go to the bottom of the page</a> blah blah blah blah ... <a id="bottomOfPage"></a>
However, if there is no id or name then it goes "no where."
Here's another similar question asked HTML Anchors with 'name' or 'id'?
On many websites I see links that have
href="#". What does it mean? What is it used for?
Unordered lists are often created with the intent of using them as a menu, but an
li list item is text. Because the list
li item is text, the mouse pointer will not be an arrow, but an "I cursor". Users are accustomed to seeing a pointing finger for a mouse pointer when something is clickable. Using an anchor tag
a inside of the
li tag causes the mouse pointer to change to a pointing finger. The pointing finger is a lot better for using the list as a menu.
<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>
If the list is being used for a menu, and doesn't need a link, then a URL doesn't need to be designated. But the problem is that if you leave out the
href attribute, text in the
<a> tag is seen as text, and therefore the mouse pointer is back to an I-cursor. The I-cursor might make the user think that the menu item is not clickable. Therefore, you still need an
href, but you don't need a link to anywhere.
You could use lots of
p tags for a menu list, but the mouse pointer would be an I-cursor for them also.
You could use lots of buttons stacked on top of each other for a menu list, but the list seems to be preferable. And that's probably why the
href="#" that points to nowhere is used in anchor tags inside of list tags.
You can set the pointer style in CSS, so that is another option. The
href="#" to nowhere might just be the lazy way to set some styling.
As some of the other answers have pointed out, the
a element requires an
href attribute and the
# is used as a placeholder, but it is also a historical artifact.
This was the single required attribute for anchors defining a hypertext source link, but is no longer required in HTML5. Omitting this attribute creates a placeholder link. The href attribute indicates the link target, either a URL or a URL fragment. A URL fragment is a name preceded by a hash mark (#), which specifies an internal target location (an ID) within the current document.
Also, per the HTML5 spec:
If the a element has no href attribute, then the element represents a placeholder for where a link might otherwise have been placed, if it had been relevant, consisting of just the element's contents.
Unfortunately, the most common use of
cursor: pointer; or
:hover styles to a class for their non-hyperlink elements, and are additionally too lazy to set
The problem with this is that one
href. Normally this ends up being an annoying jump to the top of the page, but in the case of sites using
<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.
If an anchor element is used as a non-anchor it should have its
href set to
I just wasted two days debugging a random unexpected page redirect that should have simply refreshed the page, and finally tracked it down to a function raising the click event of an
<a href="#">. Replacing the
The first thing I'm doing Monday is purging the project of all instances of