Ich habe ein horizontales Menü mit HTML-Listen und CSS erstellt. Alles funktioniert wie es sollte, außer wenn Sie mit der Maus über die Links fahren. Sie sehen, ich habe einen fetten Schwebezustand für die Links erstellt, und jetzt verschieben sich die Menü-Links aufgrund des fetten Größenunterschieds.
Ich habe das gleiche Problem wie bei diesem SitePoint-Beitrag . Die Post hat jedoch keine richtige Lösung. Ich habe überall nach einer Lösung gesucht und kann keine finden. Sicher kann ich nicht der einzige sein, der versucht, dies zu tun.
Hat jemand irgendwelche Ideen?
PS: Ich kenne die Breite des Textes in Menüelementen nicht, daher kann ich nicht einfach die Breite der Li-Elemente festlegen.
.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; }
<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>
margin-top: -1px
um:after
zu vermeiden, dass Speicherplatz mit einer Höhe von 1 Pixel erstellt wird.:
vs::
"Jeder Browser, der die Doppelpunkt-::
CSS3-Syntax unterstützt , unterstützt auch nur die:
Syntax, aber IE 8 unterstützt nur den Einzelpunkt. Daher wird empfohlen, für die beste Browserunterstützung nur den Einzelpunkt zu verwenden." css-tricks.com/almanac/selectors/a/after-and-beforeUL
odera::after
, mit anderen Worten, setzen Sie alle Auffüllungen / Ränder / Zeilenhöhen / Schriftgrößen usw. zurückEine kompromittierte Lösung besteht darin, Fett mit Textschatten zu fälschen, z.
Zum besseren Vergleich habe ich folgende Beispiele erstellt:
Wenn Sie auf einen
text-shadow
wirklich niedrigen Wert für übergeben,blur-radius
wird der Unschärfeeffekt nicht so deutlich.Im Allgemeinen wird
text-shadow
Ihr Text umso mutiger, je öfter Sie ihn wiederholen , aber gleichzeitig verlieren Sie die ursprüngliche Form der Buchstaben.Ich sollte Sie warnen, dass das Setzen von
blur-radius
auf Brüche nicht in allen Browsern gleich ist! Safari benötigt zum Beispiel größere Werte, um es genauso zu rendern wie Chrome.quelle
Wenn Sie die Breite nicht einstellen können, ändert sich die Breite, wenn der Text fett wird. Es gibt keine Möglichkeit, dies zu vermeiden, außer durch Kompromisse wie das Ändern der Auffüllung / Ränder für jeden Zustand.
quelle
Eine andere Idee ist die Verwendung
letter-spacing
quelle
Eine Zeile in jquery:
Bearbeiten: Während dies die Lösung bewirken kann, sollte man erwähnen, dass es nicht in Verbindung mit dem Code im ursprünglichen Beitrag funktioniert. "display: inline" muss durch Floating-Parameter ersetzt werden, damit eine Breiteneinstellung effektiv ist und das horizontale Menü wie vorgesehen funktioniert.
quelle
ul.nav li a
durcha
?CSS3-Lösung - experimentell
(Falsche Kühnheit)Dachte, eine andere Lösung zu teilen, die hier niemand vorschlug. Es gibt eine Eigenschaft namens,
text-stroke
die dafür nützlich sein wird.Hier ziele ich auf den Text innerhalb des
span
Tags und wir streichen ihn um ein Pixel, mitblack
dem derbold
Stil für diesen bestimmten Text simuliert wird .Beachten Sie, dass diese Eigenschaft derzeit nicht allgemein unterstützt wird (während Sie diese Antwort schreiben). Dies scheint nur von Chrome und Firefox unterstützt zu werden. Weitere Informationen zur Browserunterstützung für
text-stroke
finden Sie unter CanIUse .Nur um ein paar zusätzliche Dinge zu teilen, können Sie sie verwenden,
-webkit-text-stroke-width: 1px;
wenn Sie keinecolor
für Ihren Schlaganfall festlegen möchten.quelle
Sie könnten etwas wie gebrauchen
und dann in Ihrem CSS einfach den Span-Inhalt fett setzen und ihn mit Sichtbarkeit ausblenden: versteckt, damit er seine Dimensionen behält. Anschließend können Sie die Ränder der folgenden Elemente anpassen, damit sie richtig passen.
Ich bin mir nicht sicher, ob dieser Ansatz SEO-freundlich ist.
quelle
Ich habe das Problem gerade mit der "Schatten" -Lösung gelöst. Es scheint am einfachsten und effektivsten.
Der Schatten muss nicht dreimal wiederholt werden (das Ergebnis war für mich das gleiche).
quelle
Ich hatte ein ähnliches Problem wie Sie. Ich wollte, dass meine Links fett werden, wenn Sie mit der Maus darüber fahren, aber nicht nur im Menü, sondern auch im Text. Wie Sie sich vorstellen können, wäre es eine echte Aufgabe, die verschiedenen Breiten herauszufinden. Die Lösung ist ziemlich einfach:
Erstellen Sie ein Feld, das den Link-Text in Fettdruck enthält, aber farbig wie Ihr Hintergrund und Ihren echten Link darüber. Hier ist ein Beispiel von meiner Seite:
CSS:
Natürlich müssen Sie # FFFFE0 durch die Hintergrundfarbe Ihrer Seite ersetzen. Die Z-Indizes scheinen nicht notwendig zu sein, aber ich setze sie trotzdem ein (da das "Hypo" -Element nach dem "Hyper" -Element im HTML-Code auftritt). Fügen Sie nun Folgendes hinzu, um einen Link auf Ihre Seite zu setzen:
HTML:
Das zweite "hier" wird unsichtbar und unter Ihrem Link versteckt. Da dies ein statisches Feld ist, in dem Ihr Linktext fett gedruckt ist, wird der Rest Ihres Textes nicht mehr verschoben, da er bereits verschoben wird, bevor Sie mit der Maus über den Link fahren.
Hoffe ich konnte helfen :).
So lange
quelle
Sie können mit der Eigenschaft "margin" arbeiten:
Stellen Sie einfach sicher, dass der linke und der rechte Rand groß genug sind, damit der zusätzliche Platz den fetten Text enthalten kann. Für lange Wörter können Sie unterschiedliche Ränder wählen. Es ist nur eine weitere Problemumgehung, aber ich mache den Job für mich.
quelle
Ich verwende stattdessen gerne Textschatten. Vor allem, weil Sie Übergänge verwenden können, um Textschatten zu animieren.
Alles was Sie wirklich brauchen ist:
Eine vollständige Navigation finden Sie in dieser jsfiddle: https://jsfiddle.net/831r3yrb/
Browserunterstützung und weitere Informationen zu Textschatten: http://www.w3schools.com/cssref/css3_pr_text-shadow.asp
quelle
Ich würde davon abraten, beim Hover die Schriftarten (°) zu wechseln. In diesem Fall bewegen sich nur die Menüelemente etwas, aber ich habe Fälle gesehen, in denen der gesamte Absatz neu formatiert wird, weil die Verbreiterung einen zusätzlichen Zeilenumbruch verursacht. Sie möchten nicht, dass dies geschieht, wenn Sie nur den Cursor bewegen. Wenn Sie nichts tun, sollte sich das Seitenlayout nicht ändern.
Die Verschiebung kann auch beim Umschalten zwischen normal und kursiv erfolgen. Ich würde versuchen, die Farben zu ändern oder die Unterstreichung umzuschalten, wenn Sie Platz unter dem Text haben. (Unterstreichung sollte vom unteren Rand frei bleiben)
Ich wäre ausgebuht, wenn ich für meine Form Design-Klasse wechselnde Schriftarten verwenden würde :-)
(°) Das Wort Schriftart wird häufig missbraucht. "Verdana" ist eine Schriftart , "Verdana normal" und "Verdana fett" sind verschiedene Schriftarten derselben Schriftart.
quelle
quelle
Ich verwende eine Textschattenlösung wie einige andere, die hier erwähnt werden:
Der Unterschied besteht darin, dass ich keine Schattenfarbe spezifiziere, daher ist diese Lösung für alle Schriftfarben universell.
quelle
Ein alternativer Ansatz wäre, fett gedruckten Text über Textschatten zu "emulieren". Dies hat den Bonus (/ malus, abhängig von Ihrem Fall), auch auf Schriftsymbolen zu funktionieren.
Ein bisschen hacky, obwohl es Sie vor dem Duplizieren von Text bewahrt (was nützlich ist, wenn es viel ist, wie es in meinem Fall war).
quelle
Dies ist die Lösung, die ich bevorzuge. Es erfordert ein bisschen JS, aber Sie müssen nicht, dass Ihre title-Eigenschaft exakt gleich ist, und Ihr CSS kann sehr einfach bleiben.
quelle
Was ist damit? Eine Javascript - CSS3 freie Lösung.
http://jsfiddle.net/u1aks77x/1/
quelle
Keine sehr elegante Lösung, aber "funktioniert":
quelle
Ich habe eine Reihe der oben genannten Techniken kombiniert, um etwas bereitzustellen, das bei ausgeschaltetem js nicht völlig scheiße ist und mit ein bisschen jQuery sogar noch besser ist. Jetzt, da die Browser-Unterstützung für Subpixel-Buchstabenabstände verbessert wird, ist es wirklich schön, sie zu verwenden.
quelle
Es ist besser, ein :: vor statt ein :: nach wie folgt zu verwenden:
Für weitere Informationen: https://jsfiddle.net/r25foavy/
quelle
a::before
dies besser wäre alsa::after
? Das scheint ein Schlüsselelement Ihrer Antwort zu sein, aber es ist nicht offensichtlich, warum in diesem Fall das eine dem anderen vorzuziehen ist.Ich habe das Menü korrigiert, wenn ich über mutigen Erfolg schwebe. Es unterstützt Responsive, das ist mein Code:
quelle
Wenn Sie die Verwendung von Javascript nicht ablehnen, können Sie die richtige Breite festlegen, sobald die Seite angezeigt wird. So habe ich es gemacht (mit Prototype):
quelle
Ich kann es wirklich nicht ertragen, wenn jemand Ihnen sagt, dass Sie etwas nicht so tun sollen, wenn es eine einfache Lösung für das Problem gibt. Ich bin mir bei li-Elementen nicht sicher, aber ich habe das gleiche Problem behoben. Ich habe ein Menü bestehend aus div-Tags.
Setzen Sie einfach das div-Tag auf "display: inline-block". Inline, damit sie nebeneinander sitzen und blockieren, können Sie eine Breite einstellen. Stellen Sie einfach die Breite so weit ein, dass sie dem fettgedruckten Text entspricht, und richten Sie die Textmitte aus.
(Hinweis: Es scheint, als würde mein HTML-Code [unten] entfernt, aber um jeden Menüpunkt wurde ein div-Tag mit der entsprechenden ID und dem Klassennamen SearchBar_Cateogory gewickelt.
<div id="ROS_SearchSermons" class="SearchBar_Category">
HTML (Ich hatte Ankertags um jeden Menüpunkt gewickelt, konnte sie aber nicht als neuen Benutzer einreichen.)
CSS:
quelle
Versuche dies:
quelle
Sie können auch die negativen Ränder ausprobieren, wenn der fette Text breiter als der normale ist. (nicht immer) Die Idee ist also, stattdessen Klassen zu verwenden, um den Hover-Status zu formatieren.
jQuery:
CSS:
Ich hoffe ich konnte helfen!
quelle