Comment puis-je rendre toute la zone d'un élément de liste dans ma barre de navigation cliquable en tant que lien?

J'ai une barre de navigation horizontale faite à partir d'une liste non ordonnée, et chaque élément de liste a beaucoup de remplissage pour le rendre agréable, mais la seule zone qui fonctionne comme un lien est le texte lui-même. Comment puis-je permettre à l'utilisateur de cliquer n'importe où dans l'élément de liste pour activer le lien?

#nav {
  background-color: #181818;
  margin: 0px;
  overflow: hidden;
}

#nav img {
  float: left;
  padding: 5px 10px;
  margin-top: auto;
  margin-bottom: auto;
  vertical-align: bottom;
}

#nav ul {
  list-style-type: none;
  margin: 0px;
  background-color: #181818;
  float: left;
}

#nav li {
  display: block;
  float: left;
  padding: 25px 10px;
}

#nav li:hover {
  background-color: #785442;
}

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <li><a href="#">One1</a></li>
    <li><a href="#">Two</a></li>
    <li><a href="#">Three</a></li>
    <li><a href="#">Four</a></li>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>
77
demandé sur j08691 2010-06-19 09:22:07

9 réponses

Ne mettez pas de remplissage dans l'élément 'li'. Au lieu de cela, définissez la balise d'ancrage sur display:inline-block; et appliquez-y un remplissage.

92
répondu Stussa 2010-07-09 02:36:38

Définissez votre propriété CSS de balise d'ancrage comme suit:

{display:block}

Ensuite, l'ancre occupera toute la zone de liste, de sorte que votre clic fonctionnera dans l'espace vide à côté de votre liste.

40
répondu suren 2012-10-11 11:31:29

Faire en sorte que la balise d'ancrage contienne le remplissage plutôt que le li. De cette façon, il prendra toute la région.

12
répondu Aaron Harun 2010-06-19 05:36:33

Super, Super tard à cette fête, mais de toute façon: vous pouvez également styliser l'ancre comme un élément flexible. Ceci est particulièrement utile pour les éléments de liste de taille dynamique/arrangés.

a {
  /* This flexbox code stretches the link's clickable 
   * area to fit its parent block. */
  display:        flex;
  flex-grow:      1;
  flex-shrink:    1;
  justify-content: center;
}

(Mise en garde: les flexboxes sont toujours mal supportés. Autoprefixer à la rescousse!)

6
répondu crisis.sheep 2015-06-13 12:13:46

Utiliser ce qui suit:

a {
  display: list-item;
  list-style-type: none;
}
6
répondu Sabby62 2016-07-20 15:31:38

Ou vous pouvez utiliser jQuery:

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});
4
répondu Kieran 2014-04-15 14:36:24

Vous devez utiliser cette propriété et cette valeur CSS dans votre li:

pointer-events:all;

Ainsi, vous pouvez gérer le lien avec jQuery ou JavaScript, ou utiliser une balise a, mais tous les autres éléments de balise à l'intérieur de li devraient avoir la propriété CSS:

pointer-events:none;
1
répondu dnvtrn 2016-05-12 20:54:16

Vous pouvez toujours envelopper toute la balise li avec la balise hiperlink Voici ma solution:

#nav {
  background-color: #181818;
  margin: 0px;
  overflow: hidden;
}

#nav img {
  float: left;
  padding: 5px 10px;
  margin-top: auto;
  margin-bottom: auto;
  vertical-align: bottom;
}

#nav ul {
  list-style-type: none;
  margin: 0px;
  background-color: #181818;
  float: left;
}

#nav li {
  display: block;
  text-align: center;
  float: left;
  width: 40px;
  padding: 25px 10px;
}

#nav li:hover {
  background-color: #785442;
}

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <a href="#"><li>One1</li></a>
    <a href="#"><li>Two</li></a>
    <a href="#"><li>Three</li></a>
    <a href="#"><li>Four</li></a>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>
-1
répondu Marcello Perri 2018-07-25 15:03:06

Placez l'élément de liste dans le lien hypertexte au lieu de l'inverse.

, Par exemple, avec votre code:

<a href="#"><li>One</li></a>
-3
répondu Spudious 2016-07-20 15:32:33