2010-05-10 2 views

ответ

89

Это «фрагмент» или «названный якорь». Вы можете использовать для ссылки на часть документа. Обычно, когда вы ссылаетесь на страницу, браузер открывает ее вверху страницы. Но вы ссылаетесь на раздел на полпути вниз, вы можете использовать фрагмент для ссылки на этот заголовок (или что-то еще).

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

Для фрагмента только<a href="#">Link name</a>, то это просто ссылка на начало текущей страницы.

Вы часто видите такую ​​ссылку, используемую при объединении с javascript. Соответствие стандартам HTML требует атрибут href, но если вы планируете обрабатывать запрос с помощью javascript, то «#» служит в качестве разумного владельца места.

+1

+1 Хотя официальный термин является фрагментом URL-адреса, а не «хеш-ссылкой»: http://www.w3.org/TR/WD-html40-970708/htmlweb.html#h-4.1.1 –

+0

Да , Я изменил его на «фрагмент» в своем ответе, потому что это то, что используют большинство людей. Я никогда не знал, что у него было «официальное» имя :) :) –

+2

Почему браузеры рассматривают его как «перейти к началу страницы»: Технически вы изменили страницу. После нажатия ссылки вы заметите, что # фактически добавлен в URL-адрес в адресной строке, и если вы нажмете кнопку «Назад», он снова удалит его. Я бы не сказал, что это ссылка на часть документа, а больше ссылка на место внутри документа. В противном случае, в основном то же самое, что я печатал ... – animuson

2

Это относится к самой странице. Он часто используется со ссылками, которые фактически запускают некоторый JavaScript.

22

... просто добавьте несколько дополнительных полезных советов.

Доступ для пользователя и его изменение можно получить с помощью document.location.hash.

Это может указывать на именованный якорь (например, <a name="top"></a>) или к элементу с соответствующим идентификатором (например, <div id="top"></div>).

Видя одно (например, <a href="#" onclick="pop()">popup</a>), обычно означает, что ссылка используется исключительно для запуска JavaScript. Это плохая практика.

Элемент a должен иметь href, который указывает действительный ресурс. Если этого не существует, используйте другой элемент, например button.

+1

Это хороший момент, но это не очень хорошая практика ... но только потому, что это не хорошо, это не значит, что вы не найдете его таким, как это место :) –

+1

@alex, если это плохая практика, тогда скажите нам, что будет использовать * хорошая * практика. –

+0

@ Kyralessa Это было прямо в следующем абзаце. Во всяком случае, я сделал редактирование так, надеюсь, это яснее. – alex

9

# указывает ссылку на якорь.

Я thougt Я также упомянуть кое-что еще:

Использование «#» как HREF для ссылки, который активирует JavaScript это плохо, потому что он прокручивает страницу в верхней части - которая, вероятно, не то, что вы хотите. Вместо этого используйте javascript:void(0).

+0

+1, отметив, что щелчок по этим ссылкам заставляет страницу прокручивать вверх. –

+4

Вам больше не нужен якорь. Начиная с HTML5 (и, возможно, HTML 4), любой элемент с тегом может быть нацелен на идентификатор фрагмента. См. Документы HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#scroll-to-fragid –

+1

Не используйте 'javascript: void (0)' либо - используйте кнопку 'button', если это не ссылка. – alex

6

Знак фунта (#) указывает на наличие привязки на странице. Например, если включить это где-то на странице:

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

или, совсем недавно:

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

, а затем вы нажимаете на ссылку на странице, которая имеет HREF #foo, он будет перемещаться к якорю с именем или div с идентификатором foo.

Однако, если у вас есть href #, это приведет к началу страницы.

Смежные вопросы