Gostaria de criar um botão HTML que funciona como um link. Então, quando você clica no botão, ele é redirecionado para uma página. Eu gostaria que fosse o mais acessível possível.
Também gostaria que não houvesse caracteres extras ou parâmetros no URL.
Como posso conseguir isso?
Com base nas respostas postadas até agora, atualmente estou fazendo o seguinte:
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
mas o problema é que, no Safari e no Internet Explorer , ele adiciona um caractere de ponto de interrogação ao final do URL. Preciso encontrar uma solução que não adicione caracteres ao final da URL.
Existem duas outras soluções para fazer isso: usar JavaScript ou estilizar um link para parecer um botão.
Usando JavaScript:
<button onclick="window.location.href='/page2'">Continue</button>
Mas isso obviamente requer JavaScript e, por esse motivo, é menos acessível aos leitores de tela. O objetivo de um link é ir para outra página. Portanto, tentar fazer um botão agir como um link é a solução errada. Minha sugestão é que você use um link e estilize-o para parecer um botão .
<a href="/link/to/page2">Continue</a>
?
no URL. Isso é causado pelo formuláriotype="GET"
, altere paratype="POST"
e?
no final do URL desaparece. Isso ocorre porque o GET envia todas as variáveis na URL, daí o?
.GET
que ela falhe. Eu ainda acho que usar um link faz sentido com a ressalva de que ele não reagirá à "barra de espaço" quando ativo, como o botão. Além disso, alguns estilos e comportamentos serão diferentes (como arrastáveis). Se você deseja a experiência "link do botão" verdadeira, ter redirecionamentos do lado do servidor para concluir o URL?
para removê-lo também pode ser uma opção.Respostas:
HTML
A maneira simples de HTML é colocá-lo em um local em
<form>
que você especifica o URL de destino desejado noaction
atributo.Se necessário, defina CSS
display: inline;
no formulário para mantê-lo no fluxo com o texto ao redor. Em vez do<input type="submit">
exemplo acima, você também pode usar<button type="submit">
. A única diferença é que o<button>
elemento permite filhos.Você esperaria intuitivamente poder usar
<button href="https://google.com">
analogicamente com o<a>
elemento, mas infelizmente não, esse atributo não existe de acordo com a especificação HTML .CSS
Se o CSS for permitido, basta usar um
<a>
estilo para parecer um botão, usando, entre outros, aappearance
propriedade ( ela não é suportada apenas no Internet Explorer ).Ou escolha uma dessas muitas bibliotecas CSS como o Bootstrap .
Javascript
Se o JavaScript for permitido, defina o
window.location.href
.Em vez do
<input type="button">
exemplo acima, você também pode usar<button>
. A única diferença é que o<button>
elemento permite filhos.fonte
display: inline
ao formulário para manter o botão no fluxo.Observe que o
type="button"
atributo é importante, pois seu valor ausente padrão é o estado do botão Enviar .fonte
Se for a aparência visual de um botão que você está procurando em uma tag âncora HTML básica, poderá usar a estrutura do Twitter Bootstrap para formatar qualquer um dos seguintes links / botões comuns do tipo HTML para aparecer como um botão. Observe as diferenças visuais entre as versões 2, 3 ou 4 da estrutura:
Aparência da amostra do Bootstrap (v4) :
Aparência da amostra do Bootstrap (v3) :
Aparência da amostra do Bootstrap (v2) :
fonte
Usar:
Infelizmente, essa marcação não é mais válida no HTML5 e nem será validada nem sempre funcionará como o potencial esperado. Use outra abordagem.
fonte
target
atributo é imo na borda.No HTML5, os botões suportam o
formaction
atributo. O melhor de tudo é que não é necessário Javascript ou truque.Ressalvas
<form>
tags.<button>
tipo deve ser "enviar" (ou não especificado), não consegui fazê-lo funcionar com o tipo "botão". O que traz o ponto abaixo.Referência: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction Suporte ao navegador: https://developer.mozilla.org/en-US/docs/Web/ HTML / elemento / botão # Browser_compatibility
fonte
formaction
é compatível desde " IE mundo " desde a versão 10 e acima<button formaction>
===<form action>
?<form>
s em cada um dos nossos exemplos. Éformaction
sobre umbutton
suposto adicionar o?
a uma submissão GET vazio? Neste JSBin , parece que o HTML se comporta exatamente da mesma forma para ambos.É realmente muito simples e sem usar nenhum elemento de formulário. Você pode simplesmente usar a tag <a> com um botão dentro :).
Como isso:
E ele carregará o href na mesma página. Quer uma nova página? Basta usar
target="_blank"
.EDITAR
Alguns anos depois, enquanto minha solução ainda funciona, lembre-se de que você pode usar muito CSS para fazer com que ela pareça o que quiser. Esta foi apenas uma maneira rápida.
fonte
<button type="button">...
para que ele não funcione por padrão como um envioSe você estiver usando um formulário interno, adicione o atributo type = "reset" junto com o elemento button. Isso impedirá a ação do formulário.
fonte
type="button"
fonte
input
não possui uma tag final.input
elemento é um elemento nulo. Ele deve ter uma tag inicial, mas não deve ter uma tag final.Parece haver três soluções para esse problema (todas com prós e contras).
Solução 1: Botão em um formulário.
Mas o problema é que, em algumas versões de navegadores populares como Chrome, Safari e Internet Explorer, ele adiciona um caractere de ponto de interrogação ao final do URL. Portanto, em outras palavras, o código acima do seu URL terá a seguinte aparência:
Há uma maneira de corrigir isso, mas isso exigirá configuração do lado do servidor. Um exemplo usando o Apache Mod_rewrite seria redirecionar todas as solicitações com uma trilha
?
para a URL correspondente sem a?
. Aqui está um exemplo usando .htaccess, mas há um tópico completo aqui :Configurações semelhantes podem variar dependendo do servidor da web e da pilha usada. Portanto, um resumo dessa abordagem:
Prós:
Contras:
?
parece feio em alguns navegadores. Isso pode ser corrigido por um hack (em alguns casos) usando POST em vez de GET, mas a maneira mais limpa é ter um redirecionamento do servidor. A desvantagem com o redirecionamento do lado do servidor é que ele causará uma chamada HTTP extra para esses links devido ao redirecionamento 304.<form>
elemento extraSolução 2: usando JavaScript.
Você pode usar o JavaScript para acionar o onclick e outros eventos para imitar o comportamento de um link usando um botão. O exemplo abaixo pode ser aprimorado e removido do HTML, mas existe apenas para ilustrar a ideia:
Prós:
Contras:
Solução 3: Anchor (link) estilizado como um botão.
Criar um link como um botão é relativamente fácil e pode fornecer uma experiência semelhante em diferentes navegadores. O Bootstrap faz isso, mas também é fácil de conseguir sozinho, usando estilos simples.
Prós:
<form>
para trabalhar.Contras:
keypress
eventos nos botões.Conclusão
A solução 1 ( botão em um formulário ) parece ser a mais transparente para usuários com o mínimo de trabalho necessário. Se o seu layout não for impactado por essa opção e o ajuste do servidor for possível, essa é uma boa opção para os casos em que a acessibilidade é a principal prioridade (por exemplo, links em uma página de erro ou mensagens de erro).
Se o JavaScript não for um obstáculo para os seus requisitos de acessibilidade, a solução 2 ( JavaScript ) será preferida às 1 e 3.
Se, por algum motivo, a acessibilidade for vital (JavaScript não é uma opção), mas você estiver em uma situação em que seu design e / ou a configuração do servidor o impedem de usar a opção 1, a solução 3 ( Anchor no estilo de um botão ) é uma boa alternativa resolver esse problema com o mínimo impacto na usabilidade.
fonte
Por que não colocar o botão dentro de uma etiqueta de referência, por exemplo
Isso parece funcionar perfeitamente para mim e não adiciona% 20 tags ao link, exatamente como você deseja. Eu usei um link para o Google para demonstrar.
Obviamente, você pode agrupar isso em uma tag de formulário, mas não é necessário.
Ao vincular outro arquivo local, basta colocá-lo na mesma pasta e adicionar o nome do arquivo como referência. Ou especifique o local do arquivo se in não estiver na mesma pasta.
Isso também não adiciona nenhum caractere ao final da URL; no entanto, ele possui o caminho do projeto de arquivos como o URL antes de terminar com o nome do arquivo. por exemplo
Se a estrutura do meu projeto fosse ...
.. indica uma pasta - indica um arquivo enquanto quatro | denotar um subdiretório ou arquivo na pasta pai
..public
|||| ..html
|||| |||| -main.html
|||| |||| -secondary.html
Se eu abrir main.html, o URL será,
No entanto, ao clicar no botão dentro de main.html para mudar para secundário.html, o URL seria:
Nenhum caractere especial incluído no final do URL. Eu espero que isso ajude. A propósito - (% 20 indica um espaço em um URL codificado e inserido no lugar deles).
Nota: O localhost: 0000 obviamente não será 0000, você terá seu próprio número de porta lá.
Além disso, o? _Ijt = xxxxxxxxxxxxxx no final do URL main.html, x é determinado por sua própria conexão, portanto, obviamente, não será igual ao meu.
Pode parecer que estou afirmando alguns pontos realmente básicos, mas só quero explicar da melhor maneira possível. Obrigado pela leitura e espero que isso ajude alguém, no mínimo. Feliz programação.
fonte
Você pode simplesmente colocar uma tag em torno do elemento:
https://jsfiddle.net/hj6gob8b/
fonte
<button>
interno<a>
.A única maneira de fazer isso (exceto a idéia engenhosa do BalusC!) É adicionar um
onclick
evento JavaScript ao botão, o que não é bom para a acessibilidade.Você já pensou em criar um link normal como um botão? Você não pode obter botões específicos do SO dessa maneira, mas ainda é a melhor maneira de IMO.
fonte
Seguindo o que algumas outras pessoas adicionaram, você pode ir à loucura usando apenas uma classe CSS simples, sem PHP, sem código jQuery , apenas HTML e CSS simples.
Crie uma classe CSS e adicione-a à sua âncora. O código está abaixo.
É isso. É muito fácil de fazer e permite que você seja tão criativo quanto quiser. Você controla as cores, o tamanho, as formas (raio) etc. Para obter mais detalhes, consulte o site em que encontrei isso .
fonte
Se você quiser evitar ter que usar um formulário ou uma entrada e estiver procurando por um link com aparência de botão, poderá criar links de aparência com um wrapper div, uma âncora e uma
h1
tag. Você poderia querer isso potencialmente para poder colocar livremente o botão de link em sua página. Isso é especialmente útil para centralizar botões horizontalmente e ter um texto centralizado verticalmente dentro deles. Aqui está como:Seu botão será composto de três partes aninhadas: um invólucro div, uma âncora e um h1, da seguinte forma:
Aqui está um jsFiddle para verificá-lo e brincar com ele.
Benefícios desta configuração: 1. Tornar o invólucro div exibido: o bloco facilita o centro (usando a margem: 0 automático) e a posição (enquanto um <a> está embutido e é mais difícil de posicionar e não é possível centralizar).
Você pode simplesmente fazer a <a> exibição: bloquear, movê-la e estilizá-la como um botão, mas o alinhamento vertical do texto dentro dela fica difícil.
Isso permite que você faça o <a> display: inline-table e o <h1> display: table-cell, que permite usar o alinhamento vertical: meio no <h1> e centralizá-lo na vertical (o que é sempre bom em um botão). Sim, você pode usar o preenchimento, mas se quiser que o botão seja redimensionado dinamicamente, isso não será tão limpo.
Às vezes, quando você insere um <a> em uma div, apenas o texto é clicável, essa configuração torna o botão inteiro clicável.
Você não precisa lidar com formulários se estiver apenas tentando mudar para outra página. Os formulários destinam-se a inserir informações e devem ser reservados para isso.
Permite separar de maneira limpa o estilo dos botões e o texto (vantagem de alongamento? Claro, mas o CSS pode ter uma aparência desagradável, por isso é bom decompô-lo).
Definitivamente, tornou minha vida mais fácil criar um site móvel para telas de tamanho variável.
fonte
@ Nicolas, o seguinte funcionou para mim, pois o seu não tinha,
type="button"
devido ao qual começou a se comportar como tipo de envio ... uma vez que eu já tenho um tipo de envio. Não funcionou para mim .... e agora você pode adicionar classe botão ou<a>
para obter o layout necessário:fonte
Outra opção é criar um link no botão:
Em seguida, use CSS para estilizar o link e o botão, para que o link ocupe todo o espaço dentro do botão (para que o usuário não faça nenhum erro ao clicar):
Eu criei uma demonstração aqui .
fonte
Se você deseja criar um botão usado para uma URL em qualquer lugar, crie uma classe de botão para uma âncora.
fonte
Sei que muitas respostas foram enviadas, mas nenhuma delas parecia realmente resolver o problema. Aqui está a minha opinião sobre uma solução:
<form method="get">
método que o OP está começando. Isso funciona muito bem, mas às vezes anexa?
a ao URL. O?
é o principal problema.?
não seja anexado ao URL. Ele utilizará o<form>
método para uma fração muito pequena de usuários que não têm o JavaScript ativado.<form>
ou<button>
até exista. Estou usando o jQuery neste exemplo, porque é rápido e fácil, mas também pode ser feito no JavaScript 'vanilla'.<form>
action
atributo.Exemplo JSBin (o snippet de código não pode seguir os links)
fonte
7 maneiras de fazer isso:
window.location.href = 'URL'
window.location.replace('URL')
window.location = 'URL'
window.open('URL')
window.location.assign('URL')
fonte
Para HTML 5 e botão estilizado, juntamente com o plano de fundo da imagem
fonte
Além disso, você pode usar um botão:
Por exemplo, na sintaxe do ASP.NET Core :
fonte
se você estiver usando certificado SSL
fonte
As pessoas que responderam usando
<a></a>
atributos em um<button></button>
foi útil.MAS , recentemente, encontrei um problema quando usei um link dentro de um
<form></form>
.O botão agora é considerado como / como um botão de envio (HTML5). Eu tentei trabalhar uma maneira de contornar, e encontrei este método.
Crie um botão de estilo CSS como o abaixo:
Ou crie um novo aqui: CSS Button Generator
E, em seguida, crie seu link com uma tag de classe com o nome do estilo CSS que você criou:
Aqui está um violino:
JS Fiddle
fonte
Eu usei isso em um site no qual estou trabalhando atualmente e funciona muito bem! Se você quiser um estilo legal também, colocarei o CSS aqui.
Trabalhando JSFiddle aqui .
fonte
Você também pode definir os botões
type-property
para "botão" (não envia o formulário) e depois aninha-lo em um link (redireciona o usuário).Dessa forma, você pode ter outro botão no mesmo formulário que envia o formulário, caso necessário. Também acho que isso é preferível na maioria dos casos, em vez de definir o método e a ação do formulário como um link (a menos que seja um formulário de pesquisa, eu acho ...)
Exemplo:
Dessa forma, o primeiro botão redireciona o usuário, enquanto o segundo envia o formulário.
Tenha cuidado para garantir que o botão não desencadeie nenhuma ação, pois isso resultará em conflito. Além disso, como Arius apontou, você deve estar ciente de que, pelo motivo acima, isso não é estritamente considerado HTML válido, de acordo com o padrão. No entanto, funciona como esperado no Firefox e Chrome, mas ainda não o testei para o Internet Explorer.
fonte
Você pode usar o javascript:
Substitua
http://www.google.com
pelo seu site, incluahttp://
antes do URL.fonte
Em JavaScript
Em HTML
fonte
Digite
window.location
e pressioneenter
no console do navegador. Então você pode ter uma idéia clara do quelocation
contémVocê pode definir qualquer valor a partir daqui.
Então, para redirecionar outra página, você pode definir o
href
valor com o seu link.No seu caso-
fonte
Se o que você precisa é que ele se pareça com um botão, com ênfase na imagem gradiente , você pode fazer o seguinte:
fonte
Se você deseja redirecionar para páginas que residem no seu site, eis o meu método - adicionei o atributo href ao botão e clique em atribuir this.getAttribute ('href') a document.location.href
** Não funcionará se você consultar URLs fora do seu domínio por causa de 'X-Frame-Options' para 'sameorigin'.
Código de amostra:
fonte