Як створити кнопку HTML, яка діє як посилання?


1906

Я хотів би створити кнопку HTML, яка діє як посилання. Отже, натискаючи кнопку, вона перенаправляється на сторінку. Я хотів би, щоб це було якомога доступніше.

Мені б також хотілося, щоб в URL-адресі не було зайвих символів чи параметрів.

Як я можу цього досягти?


На основі відповідей, розміщених на даний момент, я зараз це роблю:

<form method="get" action="/page2">
    <button type="submit">Continue</button>
</form>

але проблема з цим полягає в тому, що в Safari та Internet Explorer він додає символу знака питання в кінці URL-адреси. Мені потрібно знайти рішення, яке не додасть символів до кінця URL-адреси.

Для цього є два інші рішення: Використання JavaScript або стилізація посилання на вигляд кнопки.

Використання JavaScript:

<button onclick="window.location.href='/page2'">Continue</button>

Але для цього, очевидно, потрібен JavaScript, і тому він менш доступний для читачів екранів. Суть посилання - перейти на іншу сторінку. Тож спроба зробити так, щоб кнопка діяла як посилання - це неправильне рішення. Моя пропозиція полягає в тому, що ви повинні використовувати посилання та накреслити його так, щоб виглядати як кнопку .

<a href="/link/to/page2">Continue</a>

38
Змінити GET на POST. Здається, ніхто не вирішив першу проблему ОП, яка була ?за URL-адресою. Це викликано тим, що форма є type="GET", змініть це на, type="POST"а ?в кінці URL-адреси зникне. Це тому, що GET надсилає всі змінні в URL-адресі, звідси і ?.
redfox05

11
@ redfox05 Це працює в контексті, коли ви не суворі щодо того, який метод ви приймаєте для своїх сторінок. У контексті, коли ви відхиляєте публікації на сторінках, які очікують, GETщо не вдасться. Я все ще думаю, що використання посилання має сенс із застереженням, що воно не реагуватиме на «пробіл», коли активована кнопка. Також стиль і поведінка будуть відрізнятися (наприклад, перетягування). Якщо ви хочете справжнього досвіду "кнопкового посилання", перенаправлення на сторону сервера для закінчення URL-адреси ?для його видалення також може бути варіантом.
Nicolas Bouvrette

1
cssbuttongenerator.com може стати в нагоді, якщо ви хочете створити кнопку з css.
сніг

1
Я думаю, що краще iade створити посилання, схоже на кнопку
yasar

1
Лише зауваження, для мене "кнопка діє як посилання" означає, що я можу робити клацання правою кнопкою миші та вирішувати, чи потрібно відкривати в новій вкладці / вікні, яка не працює з рішеннями JS ...
Betlista

Відповіді:


2103

HTML

Простий HTML-спосіб - це ввести його в атрибут, в <form>якому ви вказуєте бажану цільову URL-адресу action.

<form action="https://google.com">
    <input type="submit" value="Go to Google" />
</form>

При необхідності встановіть CSS display: inline;на форму, щоб підтримувати її в потоці з навколишнім текстом. Замість <input type="submit">наведеного вище прикладу ви також можете використовувати <button type="submit">. Різниця лише в тому, що <button>елемент дозволяє дітям.

Ви інтуїтивно очікуєте, що зможете використовувати <button href="https://google.com">аналог з <a>елементом, але, на жаль, ні, цей атрибут не існує відповідно до специфікації HTML .

CSS

Якщо дозволено CSS, просто використовуйте <a>клавішу, якою ви виглядаєте як кнопку, використовуючи серед іншого appearanceвластивість ( вона не підтримується в Internet Explorer ).

<a href="https://google.com" class="button">Go to Google</a>
a.button {
    -webkit-appearance: button;
    -moz-appearance: button;
    appearance: button;

    text-decoration: none;
    color: initial;
}

Або виберіть одну із таких безлічі бібліотек CSS, як Bootstrap .

<a href="https://google.com" class="btn btn-primary">Go to Google</a>

JavaScript

Якщо JavaScript дозволений, встановіть window.location.href.

<input type="button" onclick="location.href='https://google.com';" value="Go to Google" />

Замість <input type="button">наведеного вище прикладу ви також можете використовувати <button>. Різниця лише в тому, що <button>елемент дозволяє дітям.


86
Просте і приємне. Прекрасний розчин. Додайте display: inlineдо форми, щоб зберегти кнопку в потоці.
Пекка

13
у сафарі це додає знак запитання до кінця URL-адреси ... чи є спосіб зробити це, що нічого не додає до URL-адреси?
Андрій

11
@BalusC Приємне рішення, але якщо воно знаходиться в якійсь іншій формі (батьківській формі), то натискання цієї кнопки перенаправляє на адресу в атрибуті дії батьківської форми.
Володимир

100
Це лише у мене або в тезі <button> відсутній очевидний атрибут href?

14
Виглядає просто і приємно, але може мати побічні ефекти, якщо не вважатись належним чином. тобто створення 2-ої форми на сторінці, вкладеної форми тощо
Tejasvi Hegde

596

<button onclick="location.href='http://www.example.com'" type="button">
         www.example.com</button>

Зауважте, що type="button"атрибут є важливим, оскільки його відсутнім значенням за замовчуванням є стан кнопки "Надіслати" .


1
@pinouchon Має працювати. вікно мається на увазі. Може бути помилка IE9, stackoverflow.com/questions/7690645/…
Адам

12
Здається, що якщо не вказати type = "button", це не завжди буде працювати. Схоже, кнопку за замовчуванням "подати"
kenitech

58
Якщо ви хочете відкрити посилання в новому вікні / вкладці, використовуйте: onclick = "window.open (' example.com', '_ blank' );"
bennos

4
@kenitech правильний, відповідно до специфікацій : " Відсутнє значення за замовчуванням - стан кнопки ".
Niels Keurentjes

4
але користувач не може клацнути правою кнопкою миші відкрити в новій вкладці, щоб це працювало, вам потрібен тег прив’язки
Іршу

433

Якщо це візуальний зовнішній вигляд кнопки, яку ви шукаєте, в базовому тезі HTML якоря, тоді ви можете використовувати рамку Twitter Bootstrap для форматування будь-якого з наведених нижче загальних типів HTML-посилань / кнопок, які відображатимуться як кнопки. Зверніть увагу на візуальні відмінності між версіями 2, 3 або 4 рамки:

<a class="btn" href="">Link</a>
<button class="btn" type="submit">Button</button>
<input class="btn" type="button" value="Input">
<input class="btn" type="submit" value="Submit">

Зовнішній вигляд Bootstrap (v4) :

Зразок виводу кнопок Boostrap v4

Зовнішній вигляд зразка Bootstrap (v3) :

Зразок виводу кнопок Boostrap v3

Зовнішній вигляд зразка Bootstrap (v2) :

Зразок виводу кнопок Boostrap v2


46
Здається, трохи надмірності для стилізації однієї кнопки, ні? За допомогою меж, накладки, фону та інших CSS-ефектів ви можете стилізувати кнопки та посилання, щоб вони виглядали схожими, не залучаючи цілі рамки. Методологія, яку використовує Bootstrap, є хорошою, проте використання Bootstrap видається надмірним.
scottkellum

150

Використання:

<a href="http://www.stackoverflow.com/">
    <button>Click me</button>
</a>

На жаль, ця розмітка більше не діє в HTML5 і не буде ні перевірити, ні завжди працювати так, як потенційно очікувалося. Використовуйте інший підхід.



3
@Rob: це не моя проблема :) Киньте це на Meta і подивіться. Однак targetатрибут imo на краю.
BalusC

128

Як і в HTML5, кнопки підтримують formactionатрибут. Найкраще, що Javascript чи хитрість не потрібні.

<form>
  <button formaction="http://stackoverflow.com">Go to Stack Overflow!</button>
</form>

Коваджі

  • Повинно бути оточеним <form>тегами.
  • <button>тип повинен бути "надіслати" (або не вказано), я не міг змусити його працювати з кнопкою типу "." Що підводить нижче.
  • Замінює дію за замовчуванням у формі. Іншими словами, якщо зробити це всередині іншої форми, це спричинить конфлікт.

Довідка: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction Підтримка браузера: https://developer.mozilla.org/en-US/docs/Web/ HTML / елемент / кнопка # сумісність браузера


5
Просто для повної інформації: formactionсумісний з " IE world ", починаючи з версії 10 і вище
Luca Detomi

1
@EternalHour По-справжньому цікаво. На прикладах, які ви та я навели, чи повинна бути помітна різниця між поведінкою цих двох форм? У цьому конкретному випадку це <button formaction>=== <form action>?
псевдосавант

2
@pseudosavant - Різниця полягає в тому, що ваша відповідь покладається на Javascript, щоб працювати. У цьому рішенні не потрібен Javascript, це прямий HTML.
Вічна година

1
@EternalHour Вибачте, я повинен був бути більш чітким. Очевидно, JS робить мою іншою, але це лише прогресивне підвищення. Форма все ще переходить на це посилання без JS. Мені було цікаво передбачувана поведінка лише HTML- <form>кодів у кожному з наших прикладів. Є formactionна buttonпередбачається додати ?до порожнього поданням GET? У цьому JSBin схоже, що HTML поводиться однаково для обох.
псевдосавант

2
Корисно зауважити, що це працює лише тоді, коли загортається тегами форми. Виявив це важким шляхом ...
Adsy2010

57

Це насправді дуже просто і без використання елементів форми. Ви можете просто скористатись тегом <a> із кнопкою всередині :).

Подобається це:

<a href="http://www.google.com" target="_parent"><button>Click me !</button></a>

І він завантажить href на ту саму сторінку. Хочете нову сторінку? Просто використовуйте target="_blank".

EDIT

Через пару років, поки моє рішення все ще працює, майте на увазі, що ви можете використовувати багато CSS, щоб він виглядав все, що завгодно. Це був просто швидкий шлях.


18
Хоча це працює, це не має розглядатися як рішення, а вирішення проблеми, оскільки якщо ви передасте цей код через валідатор W3C, ви отримаєте помилки.
Гайдер Б.

7
Так, Hyder B. Ви маєте рацію, але слід також пам’ятати, що стандарти - це лише сирі настанови. Як програміст, ви завжди повинні думати поза коробкою і спробувати речі, яких немає в книзі;).
Лучан Мінея

НІКОЛИ не загортайте інші якірі або елементи форми дії в якір.
Roko C.

Ага, а чому це?
Lucian Minea

Ви повинні використовувати <button type="button">...так, щоб вона за замовчуванням не функціонувала як Submit
Stephen R

39

Якщо ви використовуєте внутрішню форму, додайте атрибут type = "reset" разом з елементом кнопки. Це запобіжить дії форми.

<button type="reset" onclick="location.href='http://www.example.com'">
    www.example.com
</button>

Тільки якщо ви хочете, щоб вона скинула форму. Використанняtype="button"
Stephen R

27
<form>
    <input TYPE="button" VALUE="Home Page"
        onclick="window.location.href='http://www.wherever.com'"> 
</form>

8
@Robusto, що був химерним коментарем щодо порожнього простору, який раніше там був :) Це не гарне рішення IMO, оскільки воно не спрацює без JavaScript.
Пекка

1
@Pekka: так, а також це навіть не добре сформований xhtml
Шон Патрік Флойд

8
якщо ви використовуєте форму, просто використовуйте подання, якщо ви користуєтесь onclick, чому турбуєтесь із формою. -1
NimChimpsky

Це не добре сформований HTML. Тег inputне має закінчення тегу.
Пітер Мортенсен

9
@PeterMortensen Відповідно до специфікації HTML , inputелемент - це недійсний елемент. Він повинен мати початковий тег, але не повинен мати кінцевий тег.
ghoppe

27

Здається, існує три рішення цієї проблеми (все з плюсами і мінусами).

Рішення 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]

Подібні конфігурації можуть відрізнятися залежно від використовуваного веб-сервера та стека. Отже, підсумок цього підходу:

Плюси:

  1. Це справжня кнопка, і семантично вона має сенс.
  2. Оскільки це реальна кнопка, вона також буде діяти як реальна кнопка (наприклад, поведінка, що перетягується та / або імітує клацання при натисканні клавіші пробілу, коли активна).
  3. Ні JavaScript, не потрібен складний стиль.

Мінуси:

  1. Трейлінг ?виглядає потворно в деяких браузерах. Це може бути виправлено злом (в деяких випадках) за допомогою POST замість GET, але чистим способом є перенаправлення на сторону сервера. Недоліком перенаправлення на сторону сервера є те, що це призведе до додаткового виклику HTTP для цих посилань через переадресацію 304.
  2. Додає додатковий <form>елемент
  3. Позиціонування елементів при використанні декількох форм може бути складним і стає ще гіршим при роботі з чуйними конструкціями. Деякого планування неможливо досягти за допомогою цього рішення залежно від порядку елементів. Це може призвести до зручності використання, якщо ця проблема вплине на дизайн.

Рішення 2: Використання JavaScript.

Ви можете використовувати JavaScript для запуску onclick та інших подій, щоб імітувати поведінку посилання за допомогою кнопки. Наведений нижче приклад можна вдосконалити та видалити з HTML, але це просто для ілюстрації ідеї:

<button onclick="window.location.href='/page2'">Continue</button>

Плюси:

  1. Просте (за базовою вимогою) і зберігає смисловий характер, не вимагаючи додаткової форми.
  2. Оскільки це реальна кнопка, вона також буде діяти як реальна кнопка (наприклад, поведінка, що перетягується та / або імітує клацання при натисканні клавіші пробілу, коли активна).

Мінуси:

  1. Потрібен JavaScript, що означає менш доступний. Це не ідеально для базового (основного) елемента, такого як ланка.

Рішення 3: Прив’язка (посилання) стилізована як кнопка.

Створення посилання, як кнопки, є відносно простим і може забезпечити подібний досвід у різних браузерах. Bootstrap робить це, але це також легко досягти самостійно, використовуючи прості стилі.

Плюси:

  1. Проста (за базовою вимогою) та хороша підтримка крос-браузера.
  2. <form>Для роботи не потрібно .
  3. Для роботи не потрібен JavaScript.

Мінуси:

  1. Семантичний - це на зразок зламаного, тому що ви хочете, щоб кнопка діяла як посилання, а не посилання, яка діє як кнопка.
  2. Він не буде відтворювати всю поведінку рішення №1. Він не підтримуватиме таку саму поведінку, як кнопка. Наприклад, посилання по-різному реагують при перетягуванні. Також тригер посилання "пробіл" не працюватиме без додаткового коду JavaScript. Це додасть великої складності, оскільки браузери не відповідають тому, як підтримують keypressподії на кнопках.

Висновок

Рішення №1 ( Кнопка у формі ) видається найбільш прозорим для користувачів з мінімальними необхідними роботами. Якщо цей вибір не впливає на цей вибір, і налаштування на стороні сервера є можливим, це хороший варіант для тих випадків, коли доступність є основним пріоритетом (наприклад, посилання на сторінці помилок або повідомлення про помилки).

Якщо JavaScript не є перешкодою для ваших вимог щодо доступності, то рішення №2 ( JavaScript ) буде кращим для №1 та №3.

Якщо з якихось причин доступність є життєво важливою (JavaScript не є варіантом), але ви опинилися в ситуації, коли ваш дизайн та / або конфігурація вашого сервера заважає використовувати параметр №1, тоді рішення №3 ( якір стилізований як кнопка ) є хорошою альтернативою вирішити цю проблему з мінімальним впливом на зручність використання.


21

Чому б просто не помістити кнопку в тег посилання, наприклад

<a href="https://www.google.com/"><button>Next</button></a>

Здається, це ідеально працює для мене і не додає до посилання жодних тегів% 20, як саме ви цього хочете. Я використовував посилання на Google для демонстрації.

Можна, звичайно, загорнути це в тег форми, але це не обов'язково.

Під час посилання іншого локального файлу просто покладіть його в ту саму папку та додайте ім'я файлу як посилання. Або вкажіть місце розташування файлу, якщо в ньому немає тієї ж папки.

<a href="myOtherFile"><button>Next</button></a>

Це також не додає жодного символу до кінця URL-адреси, однак у нього є шлях проекту до файлів як URL-адреса, перш ніж закінчуватись ім'ям файлу. напр

Якщо моя структура проекту була ...

.. позначає папку - позначає файл, поки чотири | позначають підкаталог або файл у батьківській папці

..публічний
|||| ..html
|||| |||| -main.html
|||| |||| -secondary.html

Якщо я відкрию main.html URL-адресою,

http://localhost:0000/public/html/main.html?_ijt=i7ms4v9oa7blahblahblah

Однак, коли я натиснув кнопку всередині main.html, щоб змінити на sekundar.html, URL-адреса буде,

http://localhost:0000/public/html/secondary.html 

У кінці URL-адреси немає спеціальних символів. Я сподіваюся, що це допомагає. До речі - (% 20 позначає пробіл у URL-адресі, кодований і вставлений на їх місце.)

Примітка: localhost: 0000, очевидно, не буде 0000, у вас там буде свій номер порту.

Крім того? _Ijt = xxxxxxxxxxxxxx в кінці від main.html URL, x визначається вашим власним з'єднанням, так що очевидно не буде рівним моєму.


Може здатися, що я викладаю деякі дійсно основні моменти, але я просто хочу пояснити якнайкраще. Дякую за прочитання, і я сподіваюся, що це допоможе комусь принаймні. Щасливе програмування.


20

Ви можете просто поставити тег навколо елемента:

<a href="http://google.com" target="_blank">
<button>My Button</button>
</a>

https://jsfiddle.net/hj6gob8b/


10
Ні, ти не можеш. HTML забороняє гніздування <button>всередині <a>.
Квентін

5
Це по суті те саме, що ця відповідь роками раніше .
Квентін

2
Якщо це забороняє, то чому це працює? :) Жоден серйозний розробник не звертає уваги на все, що говорить валідатор W3C ... спробуйте перейти Facebook чи Google або будь-який величезний веб-сайт там ... В Інтернеті ніхто не чекає
Uriahs Victor

3
@UriahsVictor Це може працювати сьогодні, але продавці браузерів на один день можуть вирішити змінити поведінку, оскільки це не дійсно.
Яків Альварес

2
Апплети @UriahsVictor Flash та Java також були досить поширеними.
Яків Альварес,

17

Єдиний спосіб зробити це (за винятком геніальної ідеї форми BalusC!) - додати onclickподії JavaScript до кнопки, що не годиться для доступності.

Чи вважали ви стилізацію нормальною посиланням, як кнопка? Ви не можете досягти певних кнопок для ОС таким чином, але це все-таки найкращий спосіб IMO.


Я думаю, що він говорить про не тільки функціональність (клацання), але і зовнішній вигляд.

1
@Web Logic yup, тому я говорю про стилізацію посилання, щоб виглядати як кнопку.
Пекка

6
@ChrisMarisic Є багато недоліків використання onClick: це не працює з вимкненим JS; користувач не може відкрити посилання на новій вкладці / вікні, а також не скопіювати посилання в буфер обміну для спільного використання; парсери та боти не зможуть розпізнати та перейти за посиланням; браузери з функцією "попереднього вибору" не впізнають посилання; та багато іншого.
Pekka

2
Хоча це дійсні бали, я не думаю, що це дійсно стосується доступності. Ви мали на увазі зручність, а не доступність? У веб-розробці доступність зазвичай зарезервована лише для того, щоб користувачі, які мають вади зору, могли добре працювати з вашою програмою.
Кріс Марісіч

17

Із тим, що додали ще декілька інших, ви можете розійтися, просто використовуючи простий клас CSS без PHP, без коду jQuery , просто простий HTML та CSS.

Створіть клас CSS та додайте його до якоря. Код нижче.

.button-link {
    height:60px;
    padding: 10px 15px;
    background: #4479BA;
    color: #FFF;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    border-radius: 4px;
    border: solid 1px #20538D;
    text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4);
    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2);
}
.button-link:hover {
    background: #356094;
    border: solid 1px #2A4E77;
    text-decoration: none;
}

<HTML>
    <a class="button-link" href="http://www.go-some-where.com"
       target="_blank">Press Here to Go</a>

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


17

Якщо ви хочете уникнути необхідності використання форми або введення, і ви шукаєте посилання на вигляд кнопок, ви можете створити гарні посилання на кнопки за допомогою оболонки, якоря та h1тегу. Ви потенційно хочете цього, щоб ви могли вільно розміщувати кнопку посилання навколо своєї сторінки. Це особливо корисно для кнопок з горизонтальним центром та розміщення тексту з вертикальним центром всередині них. Ось як:

Ваша кнопка буде складатися з трьох вкладених фрагментів: оболонки для дів, якоря та h1, як-от так:

.link-button-wrapper {
    width: 200px;
    height: 40px;
    box-shadow: inset 0px 1px 0px 0px #ffffff;
    border-radius: 4px;
    background-color: #097BC0;
    box-shadow: 0px 2px 4px gray;
    display: block;
    border:1px solid #094BC0;
}
.link-button-wrapper > a {
    display: inline-table;
    cursor: pointer;
    text-decoration: none;
    height: 100%;
    width:100%;
}
.link-button-wrapper > a > h1 {
    margin: 0 auto;
    display: table-cell;
    vertical-align: middle;
    color: #f7f8f8;
    font-size: 18px;
    font-family: cabinregular;
    text-align: center;
}
<div class="link-button-wrapper">
    <a href="your/link/here">
        <h1>Button!</h1>
    </a>
</div>

Ось в jsFiddle , щоб перевірити його і грати з ним.

Переваги цього налаштування: 1. Зробити відображення обгортки дівич: блок полегшує центрацію (з використанням поля: 0 авто) та положення (тоді як <a> є вбудованим і складніше позиціонування та неможливого центрування).

  1. Ви можете просто зробити <a> дисплей: заблокувати, перемістити його та оформити його як кнопку, але потім вертикально вирівнювання тексту всередині нього стає важким.

  2. Це дозволяє зробити екран <a>: вбудована таблиця та <h1> дисплей: комірка таблиці, що дозволяє використовувати вертикальне вирівнювання: посередині на <h1> і по центру по вертикалі (що завжди добре в кнопка). Так, ви можете використовувати прокладки, але якщо ви хочете, щоб ваша кнопка динамічно змінила розмір, це не буде таким чистим.

  3. Іноді, коли ви вставляєте <a> у розділ, на який можна натискати лише текст, ця установка робить можливим натискання всієї кнопки.

  4. Вам не доведеться мати справу з формами, якщо ви просто намагаєтесь перейти на іншу сторінку. Форми призначені для введення інформації, і вони повинні бути зарезервовані для цього.

  5. Дозволяє чітко відокремити стилізацію кнопок та стилювання тексту один від одного (перевагу розтягування? Звичайно, але CSS може отримати неприємний вигляд, тому його добре розкласти).

Це, безумовно, полегшило моє життя для створення мобільного веб-сайту для екранів змінних розмірів.


Ви насправді отримуєте розумну кнопку без будь-якого CSS
Soren

15

@ Nicolas, наступний працював для мене, оскільки у вас не було, type="button"через що він почав поводитись як тип подачі. Так як у мене вже є один тип submit.it для мене не працював .... і тепер ви можете або додати клас щоб натиснути кнопку або <a>отримати потрібний макет:

<a href="http://www.google.com/">
    <button type="button">Click here</button>
</a>

12

Ще один варіант - створити посилання за допомогою кнопки:

<button type="button"><a href="yourlink.com">Link link</a></button>

Потім використовуйте CSS для стилювання посилання та кнопки, щоб посилання займало весь простір усередині кнопки (щоб користувач не пропустив клацання):

button, button a{position:relative;}
button a{top:0;left:0;bottom:0;right:0;}

Я створив тут демонстрацію .


6
Пам'ятайте, що специфікація говорить, що це невірно, оскільки кнопки не повинні містити інтерактивних нащадків. w3.org/TR/2011/WD-html5-20110525/the-button-element.html
lukeocom

1
Ви обоє правильні. VS2015 позначає це попередженням: "Element" a "не може бути вкладений всередині елемента" кнопка "", але він працює з: IE11, Edge, Chrome, Firefox, Safari і принаймні деякими (можливо, всі) мобільними браузерами на даний момент. Тому не використовуйте цю техніку, але якщо ви робили раніше, вона працює зараз;)
Zeek2

8

Якщо ви хочете створити кнопку, яка використовується для URL-адреси будь-де, створіть клас кнопок для прив’язки.

a.button {
    background-color: #999999;
    color: #FFFFFF !important;
    cursor: pointer;
    display: inline-block;
    font-weight: bold;
    padding: 5px 8px;
    text-align: center;
    -webkit-border-radius: 5px;
    border-radius: 5px;
}
.button:hover {
    text-decoration: none;
}

7

Я знаю, що надійшло багато відповідей, але жодна з них, схоже, не справді вирішила проблему. Ось мій погляд на рішення:

  1. Використовуйте <form method="get">метод, з якого починається ОП. Це працює дуже добре, але іноді додає ?до URL-адреси. ?Є основною проблемою.
  2. Використовуйте jQuery / JavaScript, щоб зробити посилання наступним, коли JavaScript увімкнено, щоб ?не в кінцевому підсумку додати до URL-адреси. Це буде безперебійним <form>способом для дуже невеликої частини користувачів, у яких не ввімкнено JavaScript.
  3. Код JavaScript використовує делегування подій, щоб ви могли приєднати слухача подій до <form>або <button>навіть існувати. Я використовую jQuery в цьому прикладі, тому що це швидко і просто, але це можна зробити і в JavaScript "vanilla".
  4. Код JavaScript запобігає дії за замовчуванням, а потім переходить за посиланням, заданим в <form> actionатрибуті.

Приклад JSBin (фрагмент коду не може слідувати посиланнями)

// Listen for any clicks on an element in the document with the `link` class
$(document).on('click', '.link', function(e) {
    // Prevent the default action (e.g. submit the form)
    e.preventDefault();

    // Get the URL specified in the form
    var url = e.target.parentElement.action;
    window.location = url;
});
<!DOCTYPE html>
<html>

    <head>
        <script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
        <meta charset="utf-8">
        <title>Form buttons as links</title>
    </head>

    <body>
        <!-- Set `action` to the URL you want the button to go to -->
        <form method="get" action="http://stackoverflow.com/questions/2906582/how-to-create-an-html-button-that-acts-like-a-link">
            <!-- Add the class `link` to the button for the event listener -->
            <button type="submit" class="link">Link</button>
        </form>
    </body>

</html>


7

7 способів зробити це:

  1. Використання window.location.href = 'URL'
  2. Використання window.location.replace('URL')
  3. Використання window.location = 'URL'
  4. Використання window.open('URL')
  5. Використання window.location.assign('URL')
  6. Використання форми HTML
  7. Використання HTML- тега якоря

<!-- Using window.location.href = 'URL' -->
<button onclick='window.location.href = "https://stackoverflow.com"'>
  Click Me
</button>

<!-- Using window.location.replace('URL') -->
<button onclick='window.location.replace("https://stackoverflow.com")'>
  Click Me
</button>

<!-- Using window.location = 'URL' -->
<button onclick='window.location = "https://stackoverflow.com"'>
  Click Me
</button>

<!-- Using window.open('URL') -->
<button onclick='window.open("https://stackoverflow.com","_self","","")'>
  Click Me
</button>

<!-- Using window.location.assign('URL') -->
<button onclick='window.location.assign("http://www.stackoverflow.com")'>
  Click Me
</button>

<!-- Using HTML form -->
<form action='https://stackoverflow.com' method='get'>
  <input type='submit' value='Click Me'/>
</form>

<!-- Using HTML anchor tag -->
<a href='https://stackoverflow.com'>
  <button>Click Me</button>
</a>


4

Для HTML 5 та стилізованої кнопки разом із фоном зображення

<a id="Navigate" href="http://www.google.com">
  <input 
    type="button"
    id="NavigateButton"
    style="
      background-image: url(http://cdn3.blogsdna.com/wp-content/uploads/2010/03/Windows-Phone-7-Series-Icons-Pack.png);
      background-repeat: no-repeat;
      background-position: -272px -112px;
      cursor:pointer;
      height: 40px;
      width: 40px;
      border-radius: 26px;
      border-style: solid;
      border-color:#000;
      border-width: 3px;" title="Navigate"
    />
</a>


5
Не підтверджує. Вставка в validator.w3.org/nu/#textarea дає помилку: введення елемента не повинно відображатися як нащадок елемента.
Марк Амері

3

Також ви можете використовувати кнопку:

Наприклад, у синтаксисі ASP.NET Core :

// Some other tags
 <form method="post">
      <input asp-for="YourModelPropertyOrYourMethodInputName"
      value="@TheValue" type="hidden" />
      <button type="submit" class="link-button" formaction="/TheDestinationController/TheDestinationActionMethod">
      @(TextValue)
      </button>
  </form>
// Other tags...


<style>
       .link-button {
        background: none !important;
        border: none;
        padding: 0 !important;
        color: #20a8d8;
        cursor: pointer;
    }
</style>

3

якщо ви використовуєте SSL-сертифікат

<a href="https://www.google.com" target="_blank"><button>Click me !</button></a>

2

Користувачам, які відповіли за допомогою <a></a>атрибутів, <button></button>було корисно.

Але потім нещодавно у мене виникла проблема, коли я використовував посилання всередині<form></form> .

Тепер кнопка вважається як / як кнопка для надсилання (HTML5). Я спробував обійти шлях, і знайшов цей метод.

Створіть кнопку стилю CSS, як описано нижче:

.btn-style{
    border : solid 1px #0088cc;
    border-radius : 6px;
    moz-border-radius : 6px;
    -webkit-box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
    -moz-box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
    box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
    font-size : 18px;
    color : #696869;
    padding : 1px 17px;
    background : #eeeeee;
    background : -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(49%,#eeeeee), color-stop(72%,#cccccc), color-stop(100%,#eeeeee));
    background : -moz-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
    background : -webkit-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
    background : -o-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
    background : -ms-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
    background : linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
    filter : progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#eeeeee',GradientType=0 );

}

Або створіть тут новий: Генератор кнопок CSS

А потім створіть своє посилання за допомогою тегу класу, названого за створеним вами стилем CSS:

<a href='link.php' class='btn-style'>Link</a>

Ось загадка:

JS Fiddle


3
Встановіть тип кнопки = "кнопка", що дозволить вам натиснути на неї, не надсилаючи форму.
Блейк А. Нікольс

2

Я використовував це для веб-сайту, над яким я зараз працюю, і він чудово працює !. Якщо ви хочете трохи класної стилізації, я відкладу CSS сюди.

input[type="submit"] {
  background-color: white;
  width: 200px;
  border: 3px solid #c9c9c9;
  font-size: 24pt;
  margin: 5px;
  color: #969696;
}

input[type="submit"]:hover {
  color: white;
  background-color: #969696;
  transition: color 0.2s 0.05s ease;
  transition: background-color 0.2s 0.05s ease;
  cursor: pointer;
}
<input type="submit" name="submit" onClick="window.location= 'http://example.com'">

Робоча JSFiddle тут .


2

Ви також можете встановити кнопки type-propertyна "кнопку" (це робить її не надсилаю форму), а потім вкладіть її всередину посилання (змушує перенаправляти користувача).

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

Приклад:

<form method="POST" action="/SomePath">
  <input type="text" name="somefield" />
  <a href="www.target.com"><button type="button">Go to Target!</button></a>
  <button type="submit">submit form</button>
</form>

Таким чином перша кнопка перенаправляє користувача, а друга подає форму.

Будьте обережні, щоб кнопка не викликала жодної дії, оскільки це призведе до конфлікту. Також, як зазначав Аріус, слід пам’ятати, що з вищезгаданої причини це, відповідно до стандарту, не суворо вважається допустимим HTML. Однак вона працює, як очікувалося в Firefox та Chrome, але я ще не перевіряв її на Internet Explorer.


2
Елемент "кнопка" не може бути вкладений в елемент "a".
Арій

згідно стандарту немає, але, на мій досвід, це працює добре. Ще не пройшли тестування крос-браузера, але принаймні FF та Chrome, здається, добре справляються з очікуваною поведінкою.
Андерс Мартіні

Аріус: Почитайте трохи, поекспериментувавши ще, і виявив, що елемент кнопки насправді може бути вкладений всередині елемента <a>, доки елемент кнопки не застосує власну дію (оскільки це, очевидно, призведе до конфлікт - яку дію буде виконувати браузер - кнопки чи <a> 's?), але якщо ви переконаєтесь, що сам елемент кнопки не викликає жодної дії, натиснувши його, це повинно працювати добре (напевно, не повинно бути' t вважатись найкращою практикою)
Андерс Мартіні

4
Мова не про можливість. Це просто проти специфікації HTML5, і це все.
Арій

1

Ви можете використовувати javascript:

<html>
<button onclick='window.location = "http://www.google.com"'>
            Google
        </button>

</html>

Замініть http://www.google.comсвій веб-сайт, обов’язково введіть його http://перед URL-адресою.



1

Введіть window.locationі натисніть enterна консолі браузера. Тоді ви можете зрозуміти, що locationмістить

   hash: ""
   host: "stackoverflow.com"
   hostname: "stackoverflow.com"
   href: "/programming/2906582/how-to-create-an-html-button- 
   that-acts-like-a-link"
   origin: "https://stackoverflow.com"
   pathname: "/questions/2906582/how-to-create-an-html-button-that-acts-like-a-link"
   port: ""
   protocol: "https:"

Тут можна встановити будь-яке значення.

Отже, для перенаправлення на іншу сторінку ви можете встановити hrefзначення за допомогою свого посилання.

   window.location.href = your link

У вашому випадку -

   <button onclick="window.location.href='www.google.com'">Google</button>

0

Якщо вам потрібно, щоб вона виглядала як кнопка з акцентом на градієнтне зображення , ви можете зробити це:

<a href="www.yourlink.com" class="btn btn-gradient"><i class="fa fa-home"> Button Text</i></a>

0

Якщо ви хочете переспрямувати сторінки, які перебувають на вашому веб-сайті, то ось мій метод - я додав атрибут href до кнопки, а onclick призначив this.getAttribute ('href') до document.location.href

** Він не буде працювати, якщо ви посилаєтесь на URL-адресу для вашого домену через "X-Frame-Options" на "sameorigin".

Приклад коду:

<button onclick="document.location.href=this.getAttribute('href');" href="/">Home</button>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.