Що це таке, коли в посиланні є знак фунта "#"


93

Я перевірив деякі сайти, і на них є знак фунта (#) в URL-адресі. Що це робить?

 <a href="#" >Link name</a>

Відповіді:


105

Це "фрагмент" або "іменований якір". Ви можете використовувати для посилання на частину документа. Як правило, коли ви посилаєтесь на сторінку, браузер відкриває її у верхній частині сторінки. Але ви посилаєтесь на розділ на півдорозі, ви можете використовувати фрагмент для посилання на цей заголовок (або що завгодно).

Якщо <a name="whatever"/>на сторінці немає тегу, браузер просто перейде до верхньої частини сторінки. Якщо фрагмент порожній, він також буде просто посилатися на верх сторінки.

Лише для фрагмента <a href="#">Link name</a>це лише посилання на верх поточної сторінки.

Ви часто бачите такий тип посилань, який використовується разом із javascript. HTML, що відповідає стандартам, вимагає hrefатрибуту, але якщо ви плануєте обробляти запит за допомогою JavaScript, тоді "#" служить розумним власником місця.


1
+1 Хоча офіційним терміном є фрагмент URL-адреси, а не "посилання на хеш": w3.org/TR/WD-html40-970708/htmlweb.html#h-4.1.1
Джейсон Холл,

Так, я змінив його на "фрагмент" у своїй відповіді, бо саме цим користується більшість людей. Я ніколи не знав, що у нього є "офіційне" ім'я :)
Дін Хардінг,

2
Чому браузери сприймають це як „перейти на початок сторінки“: технічно ви змінили сторінку. Натиснувши посилання, ви помітите, що # фактично додано до URL-адреси в адресному рядку, і якщо ви натиснете кнопку "Назад", його буде знову видалено. Я б не сказав, що це посилання на частину документа, більше посилання на місце всередині документа. В іншому випадку, в основному те саме, що я друкував ...
animuson

URI, який закінчується на #, дозволений загальним синтаксисом і може розглядатися як свого роду порожній фрагмент. У типах документів MIME, таких як text / html або будь-який тип XML, порожні ідентифікатори, які відповідають цій синтаксично законній конструкції, не дозволяються. Веб-браузери зазвичай відображають у верхній частині документа порожній фрагмент. - en.wikipedia.org/wiki/Fragment_identifier
IcyBrk

Також за словами "Якщо такого представлення не існує, то семантика фрагмента вважається невідомою і фактично необмеженою". Від rfc3986 ( tools.ietf.org/html/rfc3986#page-24 )
IcyBrk,

23

... просто додати кілька додаткових корисних порад.

Ви можете отримати доступ та змінити його за допомогою document.location.hashJavaScript.

Він може вказувати на іменований якір (наприклад <a name="top"></a>) або на елемент з відповідним ідентифікатором (наприклад <div id="top"></div>).

Бачити його самостійно (наприклад <a href="#" onclick="pop()">popup</a>), як правило, означає, що посилання використовується виключно для запуску JavaScript. Це погана практика.

Будь-який aелемент повинен мати a, hrefщо вказує на дійсний ресурс. Якщо такого не існує, розгляньте можливість використання іншого елемента, наприклад button.


1
Це хороший момент з цього приводу, не особливо хороша практика ... але те, що це не добре, не означає, що ви не знайдете, щоб його використовували повсюдно :)
Дін Хардінг,

1
@alex, якщо це погана практика, то скажи нам, якою найкращою практикою було б використовувати її замість цього.
Райан Ланді,

@Kyralessa Це було саме там, у наступному абзаці. У будь-якому випадку, я зробив редагування, так що, сподіваюся, це зрозуміліше.
alex

2
@alex, мабуть, однією з причин, що люди використовують посилання замість кнопок, є те, що вони хочуть виглядати посилання. Як щодо посилання на сторінку, що описує, як зробити кнопку схожою на посилання? Наприклад, перевірка кнопок HTML
Райан Ланді,

1
@alex, не більше ніж стверджує, що використання # у посиланні є поганою практикою. Все, що запитував ОП, це те, що він робить.
Райан Ланді,

11

# позначає посилання на якір.

Я хотів би також згадати щось інше:

Використовувати "#" як href для посилання, яке активує JavaScript, погано, оскільки воно прокручує сторінку до початку - що, мабуть, не те, що ви хочете. Натомість використовуйте javascript:void(0).


+1 за згадку, що натискання на ці посилання змушує сторінку прокручуватись до початку.
Chris Calo

4
Вам більше не потрібен якір. Починаючи з HTML5 (і, можливо, HTML 4), будь-який елемент з тегом <id> може бути націлений ідентифікатором фрагмента. Див. Документи HTML5: whatwg.org/specs/web-apps/current-work/multipage/…
Василь

2
Не використовуйте javascript:void(0)ні те, ні інше - використовуйте, buttonякщо це не посилання.
alex

10

Знак фунта ( #) вказує на знаходження якоря на сторінці. Наприклад, якщо ви включите це десь на сторінці:

<a name="foo"></a>

або, нещодавно:

<div id="foo">*part of page*</div>

а потім клацніть на посилання на сторінці, що має href #foo, воно перейде до якоря з іменем або divз ідентифікатором foo.

Однак, якщо у вас просто є href #, це призведе до початку сторінки.


2

Це посилання на саму сторінку. Він часто використовується із посиланнями, які насправді запускають деякий JavaScript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.