Ссылки в HTML и его атрибуты

Ссылка в HTML - это не просто синий подчёркнутый текст, а тег <a> с адресом внутри атрибута href. От того, как записан этот адрес и какие ещё атрибуты стоят у ссылки, зависит и куда она ведёт, и что происходит при переходе. Разберём разные типы ссылок и одну особенность, о которой часто забывают.

Нажми на ссылку в предпросмотре справа - страница внутри рамки проскроллит саму себя, без перехода куда-либо ещё.

Абсолютные и относительные ссылки

Абсолютная ссылка - это полный адрес с протоколом и доменом, он сработает откуда угодно. Относительная ссылка короче и не содержит домен - но здесь важна одна деталь: если она начинается со слэша, браузер считает путь от корня сайта; если слэша нет - от папки, в которой лежит текущая страница.

<a href="/p/html.html">Все уроки по HTML</a> - слэш в начале означает «от корня сайта», сработает с любой страницы.

<a href="p/html.html">Все уроки по HTML</a> - без слэша браузер ищет адрес рядом с текущей страницей: на странице урока с датированным адресом ссылка сломается.

Ссылка на часть текущей страницы

Чтобы перейти не на другую страницу, а к конкретному месту этой же страницы, в href пишут # и значение атрибута id нужного элемента. Ты уже видел этот приём в оглавлении «В этом уроке» в начале статьи - каждый пункт там устроен именно так. Важная деталь: значение после # должно совпадать с id буква в букву, включая регистр.

<a href="#itogi">К разделу «Итоги»</a> ... <h2 id="itogi">Итоги</h2> - значения совпадают полностью.

<a href="#Itogi">К разделу «Итоги»</a> ... <h2 id="itogi">Итоги</h2> - «Itogi» и «itogi» для браузера разные значения, переход не сработает.

Ссылка, которая открывается в новой вкладке

Атрибут target="_blank" открывает ссылку в новой вкладке, не закрывая текущую. Дополнительный атрибут rel="noreferrer" всё ещё имеет смысл для ссылок на чужие сайты: он скрывает заголовок Referer, из которого принимающий сайт мог бы узнать, с какой страницы к нему пришёл посетитель.

<a href="https://example.com" target="_blank" rel="noreferrer">Внешний сайт</a> - скрывает Referer там, где это действительно имеет смысл.

<a href="/p/html.html" target="_blank" rel="noreferrer">Все уроки по HTML</a> - это ссылка на свою же страницу, скрывать Referer здесь не от кого, атрибут только загромождает разметку.

Из истории Раньше ссылка с target="_blank" без rel="noopener" была реальной уязвимостью: открытая страница получала доступ к window.opener и могла незаметно подменить адрес в исходной вкладке - например, на фишинговую копию сайта, пока человек смотрит в новую вкладку. Приём назвали tabnabbing. Около 2016-2017 годов браузеры добавили rel="noopener" как защиту, а в 2021 году сама спецификация изменилась так, что браузеры стали применять эту защиту автоматически для любой ссылки с target="_blank" - без необходимости дописывать атрибут вручную.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Писать внутреннюю ссылку без начального слэша на сайте с датированными адресами постов На разных страницах ссылка ведёт в разные (часто несуществующие) места, потому что браузер достраивает путь от текущей папки Начинать внутренние ссылки со слэша («/p/html.html»), чтобы путь всегда считался от корня сайта
Указывать в href="#id" значение не в том регистре, что реальный id элемента Переход не срабатывает - id и значение после # регистрозависимы Копировать id элемента точно как он написан, включая регистр
Дописывать rel="noopener noreferrer" к каждой ссылке target="_blank" «на всякий случай» Современные браузеры уже защищают такие ссылки автоматически - лишний атрибут только загромождает разметку Добавлять rel="noreferrer" только там, где действительно нужно скрыть Referer (например, ссылка на чужой сайт)
Считать относительную и абсолютную ссылку просто «короткой и длинной записью одного и того же» На самом деле они по-разному вычисляют путь и могут повести себя по-разному при переносе страницы в другую папку сайта Понимать разницу: абсолютная ссылка всегда полная, относительная - зависит от текущего расположения страницы или считается от корня сайта

Шпаргалка

ТерминЗначение
Абсолютная ссылкаПолный адрес с протоколом и доменом (https://...)
Относительная ссылкаПуть без домена; со слэша в начале - от корня сайта, без слэша - от текущей папки
Якорная ссылка (#id)Переход к элементу с таким же id на этой же странице, без перезагрузки
target="_blank"Открывает ссылку в новой вкладке
rel="noreferrer"Скрывает заголовок Referer при переходе - актуально для ссылок на чужие сайты

Коротко: отвечаем на вопросы

В чём разница между абсолютной и относительной ссылкой?

Абсолютная ссылка содержит полный адрес с протоколом и доменом (https://сайт.ru/страница) и работает откуда угодно. Относительная ссылка короче и не содержит домен: браузер достраивает её либо от корня сайта (если она начинается со слэша), либо от папки текущей страницы (если слэша нет).

Обязательно ли сегодня вручную дописывать rel="noopener" у ссылки с target="_blank"?

Нет. Раньше это было важно из-за уязвимости (страница, открытая через target="_blank", могла получить доступ к исходной вкладке через window.opener), но с 2021 года спецификация изменилась, и браузеры применяют эту защиту автоматически для любой ссылки с target="_blank" - дописывать rel="noopener" вручную больше не обязательно.

Как сделать ссылку, которая просто прокручивает страницу к нужному блоку, а не переходит на другую страницу?

Нужна якорная ссылка: в href пишут # и значение id того элемента, к которому нужно прокрутить страницу, например href="#itogi" при наличии элемента с id="itogi". Никакого перехода на другую страницу не происходит - браузер просто прокручивает текущую.

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×