¿Cómo aumentar el área en la que se puede hacer clic de un ancla o elemento de botón?

5 minutos de lectura

Avatar de usuario de Ivan Wang
ivan wang

Aprendí de esta publicación que siempre usa elementos de anclaje o botón para hacer botones. Ahora estoy tratando de usar elementos de anclaje.

¿Hay alguna forma de aumentar el área en la que se puede hacer clic en el elemento de anclaje? Digamos que estoy usando un ancla en un cuadro div. Quiero que todo el cuadro div se convierta en un botón. ¿Puedo cambiar el área de clic del ancla a todo el cuadro div? Gracias por tu ayuda.

avatar de usuario de t1m0thy
t1m0thy

Para aumentar el área de un enlace de texto, puede usar el siguiente css;

a {
  display: inline-block;
  position: relative;
  z-index: 1;
  padding: 2em;
  margin: -2em;
}
<a href="">An anchor element</a>
  • Pantalla: se requiere bloque en línea para que se puedan configurar los márgenes y el relleno
  • La posición debe ser relativa para que…
  • El índice z se puede usar para hacer que el área en la que se puede hacer clic permanezca encima de cualquier texto que sigue.
  • El relleno aumenta el área en la que se puede hacer clic
  • El margen negativo mantiene el flujo del texto circundante como debería ser (cuidado con los enlaces superpuestos)

  • esta es la respuesta real en cómo aumentar el área en la que se puede hacer clic en un botón de etiqueta

    – StefansArya

    12 de marzo de 2017 a las 9:05

  • Esta fue la primera receta que encontré que funcionó con un ícono al lado, gracias. Sin embargo, tuve que cambiar: padding: 0 2em; margin: 0 -2em; para evitar que el área en la que se puede hacer clic sea empujada hacia abajo.

    – Gringo Suave

    27 de julio de 2017 a las 18:56

  • También necesitaba configurar box-sizing: content-box que se restableció a border-box por arranque

    – Cirilo Durand

    9 de enero de 2019 a las 18:21

  • ¿Este es un margen negativo en las 4 direcciones?

    – PJ Brunet

    25 de abril de 2019 a las 20:37

  • ¿El índice z no parece ser necesario en Chrome? ¿Quizás en otros navegadores?

    – Protector uno

    14 de diciembre de 2020 a las 14:38

avatar de usuario de sp00m
sp00m

La respuesta de @ t1m0thy es más elegante que la mía. Es mejor seguir su consejo.

Además, bonito enlace propuesto por @aldemarcalazans en los comentarios: https://davidwalsh.name/html5-botones.


Respuesta original:

Usar <a /> cuando necesite un enlace (el a de ancla). Usar <button /> cuando necesitas un botón.

Dicho esto, si realmente necesita ampliar una <a />agregue el atributo CSS display: block; en eso. A continuación, podrá especificar un ancho y/o una altura (es decir, como si fuera un <div />).

  • Esto funciona perfectamente, y su respuesta llegó a la velocidad de la luz. tu roca! Muchas gracias.

    – Iván Wang

    18 de junio de 2012 a las 8:05

  • Si te preocupa la semántica, la respuesta de t1m0thy parece ser la elección correcta. Ver: davidwalsh.name/html5-botones

    – aldemarcalazans

    28 de agosto de 2017 a las 19:38

  • Facebook también usa este enfoque para expandir el objetivo de toque de los enlaces en la navegación de su aplicación web móvil. Prefiero este enfoque, mucho más legible en mi opinión. “// agrandar el destino del enlace del toque”

    –Clifford Fajardo

    23 de julio de 2018 a las 18:32

  • Recuerda hacer display:block tanto el contenedor de la <a /> y también el <a />. Entonces deberías usar padding Para el <a />no para el contenedor de la <a />.

    –Jaime Montoya

    29 de abril de 2020 a las 11:18

Avatar de usuario de Sarfraz
Sarfraz

Sí, puedes si estás usando HTML5este código es válido de otro modo no:

<a href="#foo"><div>.......</div></a>

Si no está usando HTML5, puede hacer su enlace block:

#link {
  display: block;
  width: 100px;
  height: 40px;
}
<a href="#foo" id="link">Click Here</a>

Tenga en cuenta que puede aplicar width, height solo después de hacer su elemento de nivel de bloque de enlace.

Solo haz el ancla display: block y width/height: 100%. P.ej:

.button a {
    display: block;
    width: 100%;
    height: 100%;
}

jsviolín: http://jsfiddle.net/4mHTa/

Avatar de usuario de Inc33
Inc33

Para mí, la solución de relleno no era buena, ya que estaba usando un borde en el botón y hubiera sido difícil modificar el marcado para crear una superposición para el área táctil.

Así que simplemente usé el pseudo elemento :before y creé una superposición, que fue perfecta en mi caso, ya que el evento de clic se propagó de la misma manera.

button.my-button:before {
  content: '';
  position: absolute;
  width: 26px;
  height: 26px;
  top: -6px;
  left: -5px;
  cursor: pointer;
}
<button class="my-button">A button</button>

  • Esta es la mejor solución, merece el cheque. También puedes agregar z-index en caso de que algo se superponga al área táctil

    -Arthur Khazbs

    11 de febrero a las 22:09

Avatar de usuario de Alex
Alex

Si está utilizando HTML 5, es decir, el tipo de documento

<!doctype html>

entonces solo puedes usar enlaces a nivel de bloque.

<a href="https://stackoverflow.com/questions/11078509/google.com">
  <div class="hello">
    ..
  </div>
</a>

  • Esta es la mejor solución, merece el cheque. También puedes agregar z-index en caso de que algo se superponga al área táctil

    -Arthur Khazbs

    11 de febrero a las 22:09

Avatar de usuario de Ramesh
Ramesh

agregar padding a la clase CSS de la etiqueta de anclaje. Si es necesario, agregue padding-top, padding-bottom,… individualmente de acuerdo con el área en la que se puede hacer clic que desee. Funcionó para mí.

¿Ha sido útil esta solución?