<button> vs <a>
<button> wykonuje akcję na stronie, np. wysyła formularz. <a> nawiguje: zmienia adres albo otwiera zasób. Oba od razu działają z klawiaturą.
Porównanie w tabeli
#Główne zastosowanie
Wymagany atrybut, by działał
Zmienia adres URL
Można otworzyć w nowej karcie
Dopisuje wpis do historii przeglądania
Kiedy użyć
Przykład
#<button type="button" onclick="alert('Zapisano zmiany')">Zapisz zmiany</button>
<a href="/cennik">Przejdź do cennika</a>Definicja i zastosowanie
#<button> wykonuje akcję w obrębie bieżącej strony: wysyła formularz, czyści pola albo uruchamia Twój kod JavaScript, gdy ma type="button". Sam z siebie nie zmienia adresu strony, poza formularzem wysłanym metodą get.
<a> służy do nawigacji: zmienia adres, przechodzi do kotwicy na tej samej stronie albo otwiera plik do pobrania. Bez atrybutu href jest tylko zaślepką, nieklikalną i niefokusowalną. Może otworzyć się w nowej karcie (target="_blank") i, inaczej niż przycisk, dopisuje wpis do historii przeglądania, więc przycisk "wstecz" ma sens.
Prosta zasada: jeśli kliknięcie tylko coś robi na tej samej stronie, to <button>. Jeśli przenosi gdzie indziej, to <a>. Nigdy nie buduj klikalnego <div> do żadnej z tych ról, bo stracisz za darmo dostępną obsługę klawiatury i czytników ekranu.
Składnia
#<button type="button">...</button>
<a href="adres">...</a>Więcej przykładów
#<form onsubmit="event.preventDefault(); this.querySelector('output').textContent = 'Wysłano!'">
<button>Wyślij</button>
<output></output>
</form>Przycisk bez type="button" ma w formularzu domyślny typ submit.
<a href="https://developer.mozilla.org" target="_blank" rel="noopener noreferrer">
Dokumentacja MDN (nowa karta)
</a>Dobre praktyki
#- Jeśli kliknięcie tylko coś robi na tej samej stronie, użyj
<button>. Jeśli przenosi gdzie indziej, użyj<a>. - Nie buduj klikalnych
<div>na potrzeby żadnego z nich. Stracisz obsługę klawiatury dostępną w nich za darmo. - Link bez
hrefnie jest fokusowalny ani klikalny. To tylko zaślepka.
Powiązane hasła
#- <button>Klikalny przycisk: wysyła formularz, czyści go albo uruchamia akcję na stronie.
- <a>Odnośnik do innej strony, pliku, adresu e-mail albo miejsca na tej samej stronie.
- <form>Formularz, który zbiera dane od użytkownika i wysyła je pod wskazany adres.
- onclickUruchamia kod JavaScript po kliknięciu elementu. Najprostszy, ale nie najlepszy sposób obsługi zdarzeń.
- <nav>Blok głównych linków nawigacyjnych: menu, spis treści, okruszki.
Widzisz błąd albo brakuje przykładu? Napisz do nas.