Кажется, есть три решения этой проблемы (все с плюсами и минусами).
Решение 1: Кнопка в форме.
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
Но проблема заключается в том, что в некоторых версиях популярных браузеров, таких как Chrome, Safari и Internet Explorer, он добавляет знак вопроса в конце URL. Другими словами, код выше вашего URL будет выглядеть так:
http://someserver/pages2?
Есть один способ исправить это, но это потребует настройки на стороне сервера. Одним из примеров использования Apache Mod_rewrite будет перенаправление всех запросов с конечным ?
на их соответствующие URL-адреса без ?
. Вот пример использования .htaccess, но здесь есть полный поток :
RewriteCond %{THE_REQUEST} \?\ HTTP [NC]
RewriteRule ^/?(index\.cfm)? /? [R=301,L]
Подобные конфигурации могут различаться в зависимости от веб-сервера и используемого стека. Итак, краткое изложение этого подхода:
Плюсы:
- Это настоящая кнопка, и семантически это имеет смысл.
- Так как это настоящая кнопка, она также будет действовать как настоящая кнопка (например, перетаскиваемое поведение и / или имитировать щелчок при нажатии пробела, когда он активен).
- Нет JavaScript, не требуется сложный стиль.
Минусы:
- Трейлинг
?
выглядит некрасиво в некоторых браузерах. Это может быть исправлено хаком (в некоторых случаях), использующим POST вместо GET, но чистый способ - перенаправление на стороне сервера. Недостатком перенаправления на стороне сервера является то, что он вызовет дополнительный HTTP-вызов для этих ссылок из-за перенаправления 304.
- Добавляет дополнительный
<form>
элемент
- Позиционирование элементов при использовании нескольких форм может быть сложным и становится еще хуже при работе с адаптивными дизайнами. Некоторое расположение может стать невозможным для этого решения в зависимости от порядка элементов. Это может в конечном итоге повлиять на удобство использования, если на эту задачу повлияет дизайн.
Решение 2. Использование JavaScript.
Вы можете использовать JavaScript для запуска onclick и других событий, чтобы имитировать поведение ссылки с помощью кнопки. Приведенный ниже пример можно улучшить и удалить из HTML, но он просто иллюстрирует идею:
<button onclick="window.location.href='/page2'">Continue</button>
Плюсы:
- Простой (для базовых требований) и сохраняющий семантику, не требующий дополнительной формы.
- Поскольку это настоящая кнопка, она также будет действовать как настоящая кнопка (например, перетаскиваемое поведение и / или имитация щелчка при нажатии клавиши пробела, когда она активна).
Минусы:
- Требуется JavaScript, что означает менее доступный. Это не идеально для базового (основного) элемента, такого как ссылка.
Решение 3. Якорь (ссылка) в стиле кнопки.
Стилизовать ссылку, например, кнопку , относительно просто и может обеспечить одинаковый опыт в разных браузерах. Bootstrap делает это, но этого также легко достичь самостоятельно, используя простые стили.
Плюсы:
- Простой (для базовых требований) и хорошая кросс-браузерная поддержка.
- Не нужно
<form>
для работы.
- Для работы не требуется JavaScript.
Минусы:
- Семантика не работает, потому что вам нужна кнопка, которая действует как ссылка, а не ссылка, которая действует как кнопка.
- Он не будет воспроизводить все варианты поведения решения № 1. Он не будет поддерживать то же поведение, что и кнопка. Например, ссылки перетаскиваются по-разному при перетаскивании. Также триггер ссылки «пробел» не будет работать без дополнительного кода JavaScript. Это добавит много сложности, так как браузеры не согласуются с тем, как они поддерживают
keypress
события на кнопках.
Заключение
Решение № 1 ( Кнопка в форме ) кажется наиболее прозрачным для пользователей с минимальными затратами труда. Если этот выбор не влияет на ваш макет и возможна настройка на стороне сервера, это хороший вариант для случаев, когда доступность является главным приоритетом (например, ссылки на странице ошибок или сообщения об ошибках).
Если JavaScript не является препятствием для ваших требований к доступности, то решение № 2 ( JavaScript ) предпочтительнее, чем № 1 и № 3.
Если по какой-то причине доступность является жизненно важной (JavaScript не является опцией), но вы находитесь в ситуации, когда ваш дизайн и / или конфигурация вашего сервера не позволяют использовать опцию № 1, тогда решение № 3 ( Якорь в стиле кнопки ) - хорошая альтернатива, решающая эту проблему с минимальным влиянием на удобство использования.