Me gustaría crear un botón HTML que actúe como un enlace. Entonces, cuando haces clic en el botón, redirige a una página. Me gustaría que fuera lo más accesible posible.
También me gustaría que no haya caracteres adicionales o parámetros en la URL.
¿Cómo puedo conseguir esto?
Según las respuestas publicadas hasta ahora, actualmente estoy haciendo esto:
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
pero el problema con esto es que en Safari e Internet Explorer , agrega un signo de interrogación al final de la URL. Necesito encontrar una solución que no agregue ningún carácter al final de la URL.
Hay otras dos soluciones para hacer esto: usar JavaScript o diseñar un enlace para que parezca un botón.
Usando JavaScript:
<button onclick="window.location.href='/page2'">Continue</button>
Pero esto obviamente requiere JavaScript, y por eso es menos accesible para los lectores de pantalla. El punto de un enlace es ir a otra página. Entonces, tratar de hacer que un botón actúe como un enlace es la solución incorrecta. Mi sugerencia es que debe usar un enlace y darle un estilo para que parezca un botón .
<a href="/link/to/page2">Continue</a>
?
de la URL. Esto es causado por el formulariotype="GET"
, cambie esto atype="POST"
y?
al final de la URL desaparece. Esto se debe a que GET envía todas las variables en la URL, de ahí el?
.GET
que falle. Sigo pensando que usar un enlace tiene sentido con la advertencia de que no reaccionará a la "barra espaciadora" cuando se activa como el botón. Además, algunos estilos y comportamientos serán diferentes (como arrastrar). Si desea la verdadera experiencia de "enlace de botón",?
también puede ser una opción tener redireccionamientos del lado del servidor para que la URL termine para eliminarla.Respuestas:
HTML
La forma HTML simple es ponerlo en un lugar
<form>
donde especifique la URL de destino deseada en elaction
atributo.Si es necesario, configure CSS
display: inline;
en el formulario para mantenerlo en el flujo con el texto circundante. En lugar del<input type="submit">
ejemplo anterior, también puede usar<button type="submit">
. La única diferencia es que el<button>
elemento permite niños.De forma intuitiva, esperaría poder usar
<button href="https://google.com">
un<a>
elemento análogo con el elemento, pero desafortunadamente no, este atributo no existe de acuerdo con la especificación HTML .CSS
Si se permite CSS, simplemente use un
<a>
estilo que parezca un botón usando, entre otros, laappearance
propiedad ( solo no es compatible con Internet Explorer ).O elija una de esas muchas bibliotecas CSS como Bootstrap .
JavaScript
Si JavaScript está permitido, configure el
window.location.href
.En lugar del
<input type="button">
ejemplo anterior, también puede usar<button>
. La única diferencia es que el<button>
elemento permite niños.fuente
display: inline
al formulario para mantener el botón en el flujo.Tenga en cuenta que el
type="button"
atributo es importante, ya que el valor predeterminado que falta es el estado del botón Enviar .fuente
Si es la apariencia visual de un botón lo que está buscando en una etiqueta de anclaje HTML básica, puede usar el marco Twitter Bootstrap para formatear cualquiera de los siguientes enlaces / botones de tipo HTML comunes para que aparezcan como un botón. Tenga en cuenta las diferencias visuales entre la versión 2, 3 o 4 del marco:
Apariencia de muestra de Bootstrap (v4) :
Apariencia de muestra de Bootstrap (v3) :
Apariencia de muestra Bootstrap (v2) :
fuente
Utilizar:
Desafortunadamente, este marcado ya no es válido en HTML5 y no validará ni siempre funcionará como se esperaba. Usa otro enfoque.
fuente
target
atributo es imo en el borde.A partir de HTML5, los botones admiten el
formaction
atributo. Lo mejor de todo es que no se necesita Javascript ni trucos.Advertencias
<form>
etiquetas.<button>
type debe ser "submit" (o no especificado), no pude hacerlo funcionar con el tipo "button". Lo que trae el siguiente punto.Referencia: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction Soporte del navegador: https://developer.mozilla.org/en-US/docs/Web/ HTML / Elemento / botón # Compatibilidad del navegador
fuente
formaction
es compatible desde " IE world " desde la versión 10 y superior<button formaction>
===<form action>
?<form>
en cada uno de nuestros ejemplos. Estáformaction
en unabutton
supone que añadir el?
de una presentación GET vacío? En este JSBin parece que el HTML se comporta exactamente igual para ambos.Es realmente muy simple y sin usar ningún elemento de forma. Puede usar la etiqueta <a> con un botón dentro :).
Me gusta esto:
Y cargará el href en la misma página. ¿Quieres una nueva página? Solo úsalo
target="_blank"
.EDITAR
Un par de años más tarde, mientras mi solución aún funciona, tenga en cuenta que puede usar una gran cantidad de CSS para que se vea como quiera. Esto fue solo una manera rápida.
fuente
<button type="button">...
para que no funcione de manera predeterminada como EnviarSi está utilizando un formulario interno, agregue el atributo type = "reset" junto con el elemento del botón. Evitará la acción del formulario.
fuente
type="button"
fuente
input
no tiene una etiqueta final.input
elemento es un elemento vacío. Debe tener una etiqueta de inicio pero no debe tener una etiqueta de finalización.Parece que hay tres soluciones a este problema (todas con ventajas y desventajas).
Solución 1: abotone en un formulario.
Pero el problema con esto es que en algunas versiones de navegadores populares como Chrome, Safari e Internet Explorer, agrega un carácter de signo de interrogación al final de la URL. En otras palabras, para el código que se encuentra arriba de su URL terminará luciendo así:
Hay una forma de solucionar esto, pero requerirá una configuración del lado del servidor. Un ejemplo usando Apache Mod_rewrite sería redirigir todas las solicitudes con un seguimiento
?
a su URL correspondiente sin el?
. Aquí hay un ejemplo usando .htaccess, pero hay una rosca completa aquí :Configuraciones similares pueden variar según el servidor web y la pila utilizada. Entonces, un resumen de este enfoque:
Pros:
Contras:
?
ve feo en algunos navegadores. Esto puede solucionarse mediante un hack (en algunos casos) usando POST en lugar de GET, pero la forma más limpia es tener una redirección del lado del servidor. La desventaja con la redirección del lado del servidor es que causará una llamada HTTP adicional para estos enlaces debido a la redirección 304.<form>
elemento extraSolución 2: uso de JavaScript.
Puede usar JavaScript para activar onclick y otros eventos para imitar el comportamiento de un enlace con un botón. El siguiente ejemplo podría mejorarse y eliminarse del HTML, pero está ahí simplemente para ilustrar la idea:
Pros:
Contras:
Solución 3: Ancla (enlace) con el estilo de un botón.
Diseñar un enlace como un botón es relativamente fácil y puede proporcionar una experiencia similar en diferentes navegadores. Bootstrap hace esto, pero también es fácil de lograr por sí solo usando estilos simples.
Pros:
<form>
para trabajar.Contras:
keypress
eventos en botones.Conclusión
La solución n. ° 1 ( botón en un formulario ) parece la más transparente para los usuarios con un trabajo mínimo requerido. Si su diseño no se ve afectado por esta elección y el ajuste del lado del servidor es factible, esta es una buena opción para los casos en que la accesibilidad es la máxima prioridad (por ejemplo, enlaces en una página de error o mensajes de error).
Si JavaScript no es un obstáculo para sus requisitos de accesibilidad, se preferiría la solución n. ° 2 ( JavaScript ) en lugar de la n. ° 1 y la n. ° 3.
Si por alguna razón, la accesibilidad es vital (JavaScript no es una opción) pero se encuentra en una situación en la que su diseño y / o la configuración de su servidor le impiden usar la opción n. ° 1, entonces la solución n. ° 3 ( Anchor tiene el estilo de un botón ) Es una buena alternativa para resolver este problema con un impacto mínimo de usabilidad.
fuente
¿Por qué no colocar su botón dentro de una etiqueta de referencia, por ejemplo?
Esto parece funcionar perfectamente para mí y no agrega ninguna etiqueta% 20 al enlace, solo como lo desea. He usado un enlace a google para demostrar.
Por supuesto, podría envolver esto en una etiqueta de formulario, pero no es necesario.
Al vincular otro archivo local, simplemente colóquelo en la misma carpeta y agregue el nombre del archivo como referencia. O especifique la ubicación del archivo si in no está en la misma carpeta.
Esto tampoco agrega ningún carácter al final de la URL, sin embargo, tiene la ruta del proyecto de archivos como la URL antes de terminar con el nombre del archivo. p.ej
Si la estructura de mi proyecto era ...
.. denota una carpeta - denota un archivo mientras cuatro | denotar un subdirectorio o archivo en la carpeta principal
..public
|||| ..html
|||| |||| -main.html
|||| |||| -secondary.html
Si abro main.html la URL sería,
Sin embargo, cuando hice clic en el botón dentro de main.html para cambiar a secundario.html, la URL sería,
No se incluyen caracteres especiales al final de la URL. Espero que esto ayude. Por cierto, (% 20 denota un espacio en una URL que está codificado e insertado en su lugar).
Nota: El host local: 0000 obviamente no será 0000, tendrá su propio número de puerto allí.
Además,? _Ijt = xxxxxxxxxxxxxx al final de la URL main.html, x está determinada por su propia conexión, por lo que obviamente no será igual a la mía.
Puede parecer que estoy afirmando algunos puntos realmente básicos, pero solo quiero explicar lo mejor que pueda. Gracias por leer y espero que esto ayude a alguien por lo menos. Feliz programación
fuente
Simplemente puede poner una etiqueta alrededor del elemento:
https://jsfiddle.net/hj6gob8b/
fuente
<button>
interior<a>
.La única forma de hacer esto (¡excepto la ingeniosa idea de formulario de BalusC!) Es agregando un
onclick
evento JavaScript al botón, que no es bueno para la accesibilidad.¿Has considerado diseñar un enlace normal como un botón? No puede lograr botones específicos del sistema operativo de esa manera, pero sigue siendo la mejor manera de IMO.
fuente
Siguiendo lo que otros han agregado, puede volverse loco con solo usar una clase CSS simple sin PHP, sin código jQuery , solo HTML y CSS simples.
Crea una clase CSS y agrégala a tu ancla. El código está abajo.
Eso es. Es muy fácil de hacer y te permite ser tan creativo como quieras. Usted controla los colores, el tamaño, las formas (radio), etc. Para obtener más detalles, consulte el sitio en el que encontré esto .
fuente
Si desea evitar tener que usar un formulario o una entrada y está buscando un enlace de botón, puede crear enlaces de botones atractivos con un envoltorio div, un ancla y una
h1
etiqueta. Es posible que desee esto para poder colocar libremente el botón de enlace alrededor de su página. Esto es especialmente útil para centrar botones horizontalmente y tener texto centrado verticalmente dentro de ellos. Así es cómo:Su botón estará compuesto por tres piezas anidadas: un envoltorio div, un ancla y un h1, así:
Aquí hay un jsFiddle para verlo y jugar con él.
Beneficios de esta configuración: 1. Hacer la pantalla de envoltura div: el bloque facilita el centrado (usando el margen: 0 automático) y la posición (mientras que un <a> está en línea y es más difícil de posicionar y no es posible centrarlo).
Podrías hacer que la pantalla <a>: bloquee, muévelo y dale estilo como un botón, pero luego alinear verticalmente el texto dentro de él se vuelve difícil.
Esto le permite hacer que la <a> pantalla: tabla en línea y la pantalla <h1>: tabla-celda, que le permite usar vertical-align: middle en <h1> y centrarlo verticalmente (lo cual siempre es bueno en un botón). Sí, podría usar relleno, pero si desea que su botón cambie de tamaño dinámicamente, no será tan limpio.
A veces, cuando incrusta un <a> dentro de un div, solo se puede hacer clic en el texto, esta configuración hace que se pueda hacer clic en todo el botón.
No tiene que lidiar con formularios si solo está tratando de pasar a otra página. Los formularios están destinados a ingresar información, y deben reservarse para eso.
Le permite separar limpiamente el estilo del botón y el estilo del texto entre sí (¿ventaja de estiramiento? Seguro, pero CSS puede tener un aspecto desagradable, por lo que es bueno descomponerlo).
Definitivamente me hizo la vida más fácil diseñar un sitio web móvil para pantallas de tamaño variable.
fuente
@ Nicolas, el siguiente trabajo funcionó para mí ya que el tuyo no tenía
type="button"
debido a que comenzó a comportarse como tipo de envío ... ya que ya tengo un tipo de envío. No funcionó para mí ... y ahora puedes agregar clase para abotonar o<a>
para obtener el diseño requerido:fuente
Otra opción es crear un enlace en el botón:
Luego, use CSS para diseñar el enlace y el botón, de modo que el enlace ocupe todo el espacio dentro del botón (para que el usuario no haga clic mal):
He creado una demostración aquí .
fuente
Si desea crear un botón que se utiliza para una URL en cualquier lugar, cree una clase de botón para un ancla.
fuente
Sé que se han enviado muchas respuestas, pero ninguna de ellas parecía realmente resolver el problema. Aquí está mi opinión sobre una solución:
<form method="get">
método con el que está comenzando el OP. Esto funciona muy bien, pero a veces agrega un?
a la URL. El?
es el principal problema.?
no termine agregado a la URL. Se recurrirá sin problemas al<form>
método para la fracción muy pequeña de usuarios que no tienen habilitado JavaScript.<form>
o<button>
siquiera existe. Estoy usando jQuery en este ejemplo, porque es rápido y fácil, pero también se puede hacer en JavaScript 'vainilla'.<form>
action
atributo.Ejemplo de JSBin (el fragmento de código no puede seguir enlaces)
fuente
7 maneras de hacer eso:
window.location.href = 'URL'
window.location.replace('URL')
window.location = 'URL'
window.open('URL')
window.location.assign('URL')
fuente
Para HTML 5 y botón con estilo junto con fondo de imagen
fuente
También puedes usar un botón:
Por ejemplo, en la sintaxis de ASP.NET Core :
fuente
si está utilizando un certificado SSL
fuente
Las personas que respondieron utilizando
<a></a>
atributos en un<button></button>
fueron útiles.PERO , recientemente, encontré un problema cuando utilicé un enlace dentro de a
<form></form>
.El botón ahora se considera como / como un botón de envío (HTML5). He intentado trabajar un poco y he encontrado este método.
Cree un botón de estilo CSS como el siguiente:
O cree uno nuevo aquí: CSS Button Generator
Y luego cree su enlace con una etiqueta de clase con el nombre del estilo CSS que ha creado:
Aquí hay un violín:
JS Fiddle
fuente
¡Utilicé esto para un sitio web en el que estoy trabajando actualmente y funciona muy bien! Si también quieres un estilo genial, pondré el CSS aquí.
Trabajando JSFiddle aquí .
fuente
También puede establecer los botones
type-property
en "botón" (hace que no envíe el formulario) y luego anidarlo dentro de un enlace (hace que redirija al usuario).De esta manera, podría tener otro botón en el mismo formulario que envía el formulario, en caso de que sea necesario. También creo que esto es preferible en la mayoría de los casos en lugar de configurar el método y la acción del formulario como un enlace (a menos que sea un formulario de búsqueda, supongo ...)
Ejemplo:
De esta manera, el primer botón redirige al usuario, mientras que el segundo envía el formulario.
Tenga cuidado de asegurarse de que el botón no active ninguna acción, ya que eso generará un conflicto. Además, como señaló Arius, debe tener en cuenta que, por la razón anterior, esto no se considera estrictamente HTML válido, de acuerdo con el estándar. Sin embargo, funciona como se esperaba en Firefox y Chrome, pero aún no lo he probado para Internet Explorer.
fuente
Puedes usar javascript:
Reemplace
http://www.google.com
con su sitio web, asegúrese de incluirhttp://
antes de la URL.fuente
En JavaScript
En HTML
fuente
Escribe
window.location
y presionaenter
en la consola de tu navegador. Entonces puedes tener una idea clara de lo quelocation
contienePuede establecer cualquier valor desde aquí.
Entonces, para redirigir otra página, puede establecer el
href
valor con su enlace.En tu caso-
fuente
Si lo que necesita es que se verá como un botón, con énfasis en la imagen de degradado , puede hacer esto:
fuente
Si desea redirigir las páginas que residen dentro de su sitio web, entonces este es mi método: agregué el atributo href al botón y onclick asignó this.getAttribute ('href') a document.location.href
** No funcionará si hace referencia a URL fuera de su dominio debido a 'X-Frame-Options' a 'sameorigin'.
Código de muestra:
fuente