30 votes

Le survol dépend de la taille de la police dans Chrome

Ce que j'essaie...

J'essaie de créer un menu avec un effet de survol. Si vous survolez un lien, sa couleur de fond doit changer. Si vous passez au lien suivant, la couleur de fond doit changer en douceur.


Problème

Lorsque vous survolez un lien et que vous passez au suivant, il y a un petit espace entre les éléments. Si votre souris se trouve à cet endroit précis, rien ne se passe.


Exemple de travail

.menu-item {
  list-style: none;
  float: left;
  text-transform: uppercase;
  font-size: 21px;
  line-height: 30px;
}

a {
  padding: 20px;
}

a:hover {
  background-color: green;
}

<div id="menu">
  <ul class="menu-list">
    <li class="menu-item"><a href='#'>Menü #1</a></li>
    <li class="menu-item"><a href='#'>Menü #2</a></li>
    <li class="menu-item"><a href='#'>Menü #3</a></li>
  </ul>
</div>

Exemple de non-fonctionnement

.menu-item {
  list-style: none;
  float: left;
  text-transform: uppercase;
  font-size: 20px;
  line-height: 30px;
}

a {
  padding: 20px;
}

a:hover {
  background-color: green;
}

<div id="menu">
  <ul class="menu-list">
    <li class="menu-item"><a href='#'>Menü #1</a></li>
    <li class="menu-item"><a href='#'>Menü #2</a></li>
    <li class="menu-item"><a href='#'>Menü #3</a></li>
  </ul>
</div>

Mon observation

Si vous modifiez le font-size d'un seul pixel, cela fonctionne. Si j'utilise IE, les deux exemples fonctionnent, mais dans Chrome, seul celui qui fonctionne fonctionne :D


Ce que je demande...

S'agit-il d'un bug de Chrome ou existe-t-il une possibilité de faire fonctionner le "non fonctionnel".

1 votes

C'est un extrait très intéressant - j'ai expliqué le problème dans ma réponse, mais en bref, c'est essentiellement à cause de la propriété d'affichage intégrée de la balise a associée à un style par défaut dans le navigateur Chrome. Bien vu. Et +1 pour une question très bien écrite.

1 votes

Mon upvote à une très belle question

1 votes

Les deux fonctionnent bien ici dans Chrome 57 et Opera 44 sur macOS. Les exemples ont-ils changé ou s'agit-il d'un problème avec les anciennes versions de Chrome ?

28voto

Frits Points 4065

C'est une question intéressante. Le "problème" est causé par le CSS du navigateur qui lit le fichier display:inline; de la a et qu'il ne remplisse pas la totalité de la balise display:block; de la li étiquette.

Vous pouvez remédier à ce problème en utilisant la règle CSS suivante

.menu-item a {
    display:block;
}

0 votes

Ce n'est pas un bogue, c'est le résultat attendu et souhaité. Les éléments en ligne fonctionnent ainsi. Ne dites pas que c'est un bogue, car ce n'en est pas un.

1 votes

Bonjour @MarcosPérezGude - Merci pour vos commentaires :) Je n'ai pas mentionné qu'il s'agissait d'un bug - je ne sais pas d'où vient la confusion, car je suis d'accord qu'il ne s'agit pas d'un bug ? D'où mon explication sur le style par défaut...

1 votes

Oh, mon Dieu ! Désolé pour mon incompréhension. J'ai lu You can fix this bug... et votre écriture You can fix this by... Je suis vraiment désolée pour la confusion. Il faut que je me remette à lire les cours sur l'école. Peut-être que ma langue maternelle n'est pas l'anglais... :(

8voto

Cyril Points 351

Ajouter display: block aux liens. Le lien est plus petit que le li

-5voto

cloned Points 534

Supprimer la taille de police et l'épaisseur de ligne de l'élément de menu, styliser le lien directement. Ce comportement est probablement dû à des erreurs d'arrondi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X