J'essaie de faire une barre de navigation comme exercice.
J'utilise a:hover
pour inclure une bordure pleine autour du bouton survolé. Cependant, cela fait déplacer tous les autres boutons de la taille de la bordure.
Quelle est la bonne solution à ce problème? Je sais qu'il y en a d'autres (discuté ici ), j'ai spécifiquement essayé de rendre la frontière "invisible mais de prendre de la place même lorsqu'elle n'est pas survolée". J'ai mis border:transparent
en espérant qu'il puisse faire ce que je veux, mais cela ne montrait pas du tout prendre de la place.
Je sais que je pourrais choisir à la main la couleur de la bordure pour qu'elle soit égale à l'arrière-plan et la rendre solide, mais ce n'est pas ce que je veux. Existe-t-il une manière saine de résoudre ce problème?
Que diriez-vous border: 10px solid transparent
?
Votre meilleure option serait d'ajouter un remplissage ou des marges à votre élément de la même taille que la bordure et de faire en sorte que la bordure ait une largeur nulle, puis d'afficher la bordure et de supprimer le remplissage avec le a:hover
sélecteur.
Voici un exemple. Vous pouvez aussi souvent le faire avec des marges.
a {
display: inline-block;
height: 2em; width: 100px;
padding: 2px;
background: #0ff;
}
a:hover {
padding: 0;
border :2px solid #000;
}
<a href="#">Hello World</a>
L'une des raisons pour lesquelles cela ne fonctionne pas comme vous vous y attendez est que vous ne postulez que display:block
sur :hover
, il doit être appliqué à l'élément sans le sélecteur: hover ou vous obtiendrez les dimensions "décalées". Peu importe le type d'affichage que vous utilisez, il vous suffit de vous assurer qu'ils sont identiques, et par défaut <a>
est en ligne.
Une autre raison a quelque chose à voir avec vos bordures raccourcies, vous devez ajouter un type de bordure pour la version transparente comme solid
au lieu de none
.
La technique que vous utilisez est totalement légitime, pas besoin de bourrage de hacks ou de contour (ce qui n'ajoute pas de dimension).
http://jsfiddle.net/Madmartigan/kwdDB/
Essaye ça:
#wd-navbar li a {
border: medium solid transparent;
display: block;
margin: 1px;
}
#wd-navbar li a:hover {
background-color: #F5DEB3;
border: medium solid;
}
Vous pouvez utiliser la propriété CSS outline
au lieu de votre bordure, qui agit comme une bordure mais n'est pas prise en compte dans les calculs de dimensionnement.
Cependant, cela a quelques problèmes, non pris en charge par IE 7 ou version antérieure .
border:transparent
veux dire border: transparent 0 none
Si vous ne spécifiez pas de propriété lors de l'utilisation de la syntaxe abrégée, vous réinitialisez toutes les propriétés à leurs valeurs par défaut.
Vous devez lui donner un style de bordure et une largeur de bordure.
Réglage de la couleur de la bordure: transparent; Fait le travail.
a {
border-color : transparent ;
}
a:hover {
border-color : black;
}
utilisez des pseudo-éléments ::after
et ::before
pour créer des frontières invisibles.