Les éléments en ligne passe lorsqu'il est mis en gras sur le vol stationnaire
J'ai créé un menu horizontal à l'aide d'une des listes HTML et CSS. Tout fonctionne comme il se doit, sauf lorsque vous passez la souris sur les liens. Vous voyez, j'ai créé un audacieux état de pointage pour les liens, et maintenant les liens du menu shift en raison de l'audacieux différence de taille.
Je rencontre le même problème que cette SitePoint post. Toutefois, le poste n'est pas la bonne solution. J'ai cherché partout une solution et ne peut pas en trouver un.
Certes, je peux pas être le seul à essayer de faire ça.
Quelqu'un a une idée?
P. S: je ne connais pas la largeur du texte dans les éléments de menu donc je ne peux pas il suffit de régler la largeur de la li éléments.
CSS:
.nav { margin: 0; padding: 0; }
.nav li {
list-style: none;
display: inline;
border-left: #ffffff 1px solid;
}
.nav li a:link, .nav li a:visited {
text-decoration: none;
color: #000;
margin-left: 8px;
margin-right: 5px;
}
.nav li a:hover{
text-decoration: none;
font-weight: bold;
}
.nav li.first { border: none; }
HTML:
<ul class="nav">
<li class="first"><a href="#">item 0</a></li>
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
<li><a href="#">item 4</a></li>
</ul>
Vous devez vous connecter pour publier un commentaire.
CSS:
HTML:
Vérifiez l'exemple de travail sur JSfiddle.
L'idée est de réserver l'espace pour le gras (ou tout
:hover
état styles) contenu dans:after
pseudo-élément et en utilisant la balise title comme une source de contenu.margin-top: -1px
à:after
pour éviter la création de l'espace de 1px de hauteur.::
"Chaque navigateur qui prend en charge les deux points::
CSS3 syntaxe prend également en charge juste le:
la syntaxe, mais IE 8 prend en charge uniquement la seule virgule, donc pour l'instant, il est recommandé de n'utiliser que le seul colon pour une meilleure prise en charge du navigateur." css-tricks.com/almanac/selectors/a/after-and-beforebackground-color: #ff0000;
àli
, puis mettre un élément (comme unhr
sans marges) directement en dessous pour le voir. Je reçois un ~5px écart sur Firefox et de 1px sur Chrome. Se débarrasser de la::after
et que le fossé ne se referme. Quiconque obtenir ce? Je ne vois pas quelle en est la cause.UL
oua::after
, en d'autres termes — pour rétablir tous les padding/marging/ligne-heights/polices etc.font-size: 0
sur::after
fait::after
de la même largeur quea
bien que, ainsi en niant ce correctif.font-size
poura
, je ne comprends pas votre idéeUne solution de compromis est-à-faux gras avec text-shadow, e.g:
Pour une meilleure comparaison que j'ai créé ces exemples:
CSS:
HTML:
De passer à
text-shadow
vraiment faible valeur pourblur-radius
fera de l'effet de brouillage pas si évident.En général, le plus votre répéter
text-shadow
le plus audacieux de votre texte mais dans le même temps de perdre de la forme originale de ces lettres.Je dois vous avertir que la définition de la
blur-radius
les fractions ne va pas rendre le même dans tous les navigateurs! Safari par exemple besoin de plus grandes valeurs pour la rendre de la même façon Chrome ne.Si vous ne pouvez pas définir la largeur, cela signifie que la largeur de changer à mesure que le texte est en gras. Il n'y a aucun moyen de l'éviter, sauf par des compromis de telles que la modification de la marge intérieure/marges pour chaque état.
Une autre idée est d'utiliser
letter-spacing
Un ligne en jquery:
edit:
Alors que cela peut apporter à propos de la solution, on se doit de mentionner qu'il n'a pas de travail en collaboration avec le code dans le post original. "display:inline" doit être remplacé par de la variable de paramètres, pour une largeur d'établissement pour être efficace et que le menu horizontal à fonctionner comme prévu.
ul.nav li a
aveca
œuvres?Vous pouvez utiliser somehting comme
et puis dans votre css, il suffit de régler la durée de teneur en gras et de le cacher avec visibility: hidden, de sorte qu'il conserve ses dimensions. Ensuite, vous pouvez ajuster les marges des éléments suivants pour le faire rentrer correctement.
Je ne suis pas sûr si cette approche est SEO friendly si.
Je viens de résoudre le problème avec "l'ombre" de la solution.
Il semble que le plus simple et efficace.
Pas besoin de répéter l'ombre à trois reprises (le résultat était le même pour moi).
CSS3 Solution Expérimentale
(Faux audace),
Pensé à partager une autre solution à laquelle personne n'a suggéré ici. Il y a une propriété appelée
text-stroke
qui seront utiles pour cela.CSS:
HTML:
Ici, je suis ciblant le texte à l'intérieur de la
span
balise et nous caresser par un pixel avecblack
qui permettra de simulerbold
de style pour le texte.Noter que cette propriété n'est pas largement pris en charge, dès maintenant (alors que la rédaction de cette réponse), seuls Chrome et Firefox semble à l'appui de cette. Pour plus d'informations sur la prise en charge du navigateur pour
text-stroke
, vous pouvez vous référer à CanIUse.Juste pour partager quelques trucs supplémentaires, vous pouvez utiliser
-webkit-text-stroke-width: 1px;
si vous n'êtes pas à la recherche pour définir uncolor
pour votre course.J'ai eu un problème similaire au vôtre. Je voulais que mes liens en gras lorsque vous passez la souris au-dessus d'eux, mais pas seulement dans le menu, mais aussi dans le texte. Comme vous le cen suppose que ce serait une vraie corvée de déterminer toutes les différentes largeurs. La solution est assez simple:
Créer une zone qui contient le lien du texte en gras, mais de la même couleur que votre fond et mais votre lien réel au-dessus d'elle. Voici un exemple de ma page:
CSS:
Bien sûr, vous avez besoin de remplacer #FFFFE0 par la couleur de fond de votre page. Le z-indices ne semblent pas être nécessaire, mais je les mets quand même (comme le "hypo" élément se fera après les "hyper" de l'élément dans le Code HTML). Maintenant, pour mettre un lien sur votre page, sont les suivants:
HTML:
Le deuxième "ici" sera invisible et caché en dessous de votre lien. Comme c'est une boite fixe avec
votre lien texte en gras, le reste de votre texte ne passe pas en plus comme c'est déjà déplacé avant vous passez la souris sur le lien.
Espère que j'ai été en mesure d'aider :).
Si longtemps
Je voudrais des conseils à l'encontre de la commutation de polices(°) sur le vol stationnaire. Dans ce cas, c'est juste les éléments de menu en déplaçant un peu, mais j'ai vu des cas où le paragraphe complet obtient reformaté en raison de l'élargissement entraîne un supplément de retour. Vous ne voulez pas voir cela se produire lorsque la seule chose que vous avez à faire est de déplacer le curseur; si vous ne faites rien de la mise en page ne doit pas changer.
Le changement peut également se produire lors de la commutation entre le mode normal et en italique. Je voudrais essayer de changer les couleurs ou d'alterner souligner si vous avez de la place en dessous du texte. (le soulignement doit rester à l'écart à partir de la bordure inférieure)
Je serais boo préfère, si j'ai utilisé la commutation des polices pour mon Formulaire de classe de Conception 🙂
(°) La police du mot est souvent utilisé à mauvais escient. "Verdana" est un police, "Verdana normal" et "Verdana bold" sont différents polices de la même police de caractères.
Vous pouvez travailler avec la "marge" de la propriété:
Assurez-vous juste que les marges gauche et droite sont suffisamment gros pour l'espace supplémentaire peut contenir le texte en gras. Pour les mots longs, vous pouvez choisir des marges différentes.
C'est juste une autre solution, mais fait le travail pour moi.
J'aime utiliser text-shadow à la place. Surtout que vous pouvez utiliser les transitions pour animer le texte de l'ombre.
Tous vous avez vraiment besoin est:
Pour une navigation complète découvrez ce jsfiddle:
https://jsfiddle.net/831r3yrb/
Prise en charge du navigateur et plus d'infos sur text-shadow:
http://www.w3schools.com/cssref/css3_pr_text-shadow.asp
C'est la solution que je préfère. Il nécessite un peu de JS, mais vous n'avez pas besoin de votre titre de propriété à l'exact même et votre CSS peut rester très simple.
JS:
CSS:
HTML:
Quoi à ce sujet? Un javascript, CSS3 gratuit solution.
http://jsfiddle.net/u1aks77x/1/
Pas très élégant, mais les "œuvres":
J'ai combiné un tas de techniques ci-dessus pour fournir quelque chose qui n'est pas totalement sucer avec js désactivé et c'est encore mieux avec un peu de jQuery. Maintenant que les navigateurs prennent en charge pour les sous-letter-spacing s'améliore, elle est vraiment agréable à utiliser.
JS:
CSS:
HTML:
CSS:
HTML:
- Je utiliser text-shadow solution comme certains autres mentionnés ici:
la différence est que je n'ai pas de spécifier la couleur de l'ombre, de sorte que cette solution est universel pour toutes les couleurs de police.
Une approche alternative consisterait à "émuler" le texte en gras par text-shadow. Cela a le bonus/malus, selon votre cas) à travailler aussi sur des polices d'icônes.
Un peu hacky, bien qu'il vous permet d'économiser de reproduire le texte (ce qui est utile si c'est un lot, comme il était dans mon cas).
Il est préférable d'utiliser un::avant au lieu un::après comme ceci:
CSS:
HTML:
Pour plus de détails: https://jsfiddle.net/r25foavy/
Si vous n'êtes pas opposés à l'utilisation de Javascript, vous pouvez définir la largeur appropriée une fois que la page est affichée. Voici comment j'ai fait (à l'aide de Prototype):
Je ne peux vraiment pas le supporter quand quelqu'un vous dit de ne pas faire quelque chose de cette façon quand il y a une solution simple à ce problème. Je ne suis pas sûr de li éléments, mais j'ai résolu le même problème. J'ai un menu composé de balises div.
Viens de mettre la balise div pour être "display: inline-block". En ligne, de sorte qu'ils s'assoient les uns à côté des autres et bloc que vous pouvez définir une largeur. Il suffit de régler la largeur assez large pour accueillir pour le texte en gras et le texte centre alignés.
(Note: Il semble être le décapage de mon html [ci-dessous], mais chaque élément de menu a une balise div enroulé autour d'elle avec les corrasponding ID et le nom de la classe SearchBar_Cateogory. c'est à dire:
<div id="ROS_SearchSermons" class="SearchBar_Category">
HTML
(J'avais d'ancrage des balises enroulé autour de chaque élément de menu, mais je n'étais pas en mesure de les présenter en tant que nouvel utilisateur)
CSS:
essayez ceci:
Vous pouvez essayer les marges négatives trop si le texte en gras est plus large que la normale. (pas toujours)
Donc, l'idée est d'utiliser des classes plutôt de style le :hover état.
jQuery:
CSS:
J'espère que je pourrais vous aider!