Reine CSS-Link-Unterstreichungsanimation

Einer der Vorteile beim Erstellen meiner persönlichen Website von Grund auf neu, anstatt ein vorgefertigtes Thema zu verwenden, besteht darin, dass ich mit den Standard-Browsereinstellungen beginne und nach und nach meine eigenen Farben hinzufüge. Ich versuche, das Aufblähen der Website zu verhindern, aber Personalisierung ist eine wichtige Sache. Wir müssen einen Kompromiss zwischen den spartanischen Seiten von Hacker News und Craigslist einerseits und der Überlastung des alten MySpace andererseits finden.

Irgendwie bin ich auf eine Website mit ausgefallenen animierten Unterstrichen für Links gestoßen, und ich wollte den Effekt realisieren. Für mich ist es jedoch wichtig, reines CSS zu verwenden, da es sich aus Gründen dieser Frivolität nicht lohnt, JavaScript hinzuzufügen, was zu Problemen mit der Leistung oder Benutzerfreundlichkeit der Benutzeroberfläche führen kann (siehe Hijacking der Bildlaufleiste ).

So sieht der Effekt jetzt aus:


Implementierung


Das Zeichnen von Linien unter dem Text ist ein überraschend komplexes Thema . Es hängt alles davon ab, wie weit Sie bereit sind, vom Standard abzuweichen, und welche Details Sie sich Sorgen machen (z. B. das Übergeben entfernter Buchstabenelemente ).

Ich habe zwei Ansätze untersucht . Beide entfernen im Wesentlichen die Standardtextdekoration und fügen mithilfe von Pseudoelementen einen simulierten Rand hinzu. Dieser Rand wird dann durch CSS-Übergänge animiert. Leider haben diese Lösungen einen Nachteil: Sie funktionieren nicht normal, wenn der Link mehr als eine Zeile abdeckt. Die Unterstreichung erscheint nur in der ersten Zeile.


Am Ende fand ich Shaws CodePen ohne diesen Fehler und änderte den Effekt nach meinem Geschmack.


Hier ist der relevante Code. Sie können mit ihm auf repl.it spielen.

a { text-decoration: none; background-image: linear-gradient(currentColor, currentColor); background-position: 0% 100%; background-repeat: no-repeat; background-size: 0% 2px; transition: background-size .3s; } a:hover { background-size: 100% 2px; } 

Lassen Sie uns diese Lösung genauer betrachten.

Schalten Sie zuerst die Standardtextdekoration text-decoration .

Wir müssen ein Hintergrundbild verwenden, da es mehrere Zeilen abdecken kann. Sie können zwar ein echtes Bild aufnehmen, aber es ist nur eine Linie, daher verwenden wir einen linearen Farbverlauf , der ein Bild für uns erzeugt. Normalerweise wird es verwendet, um einen Verlauf zwischen zwei verschiedenen Farben zu erstellen. Die Unterstreichung muss jedoch dieselbe Farbe wie der Link haben. Daher verwenden wir currentColor sowohl für den Anfang als auch für das Ende des Verlaufs. currentColor weist den Browser an, die Farbe des Elements aus der Farbeigenschaft zu verwenden .

Verwenden Sie die Hintergrundposition , um das Bild in der unteren linken Ecke zu platzieren. Ein Wert von 0% entspricht einer horizontalen Position und 100% entspricht einer vertikalen Position.

Deaktivieren Sie die Hintergrundwiederholung , um mehrere Instanzen des Bildes zu vermeiden.

Geben Sie unter Verwendung der Hintergrundgröße die Breite und Höhe von zwei Pixeln auf Null an. Nullbreite bedeutet, dass die Unterstreichung nur beim Schweben angezeigt wird, andernfalls ist das Bild nicht sichtbar.

Stellen Sie den Übergang so ein , dass er zum Hintergrund passt, sodass jede Eigenschaftsänderung 0.3 Sekunden dauert.

Wenn Sie mit der Maus über einen Link fahren, ändern wir die Bildbreite um 100% , wodurch eine vollständige Unterstreichung erstellt wird und der transition eine Animation bietet.

Das ist alles! Ich bin sehr zufrieden mit der Kürze des Codes. Wenn Sie Ihrer Site etwas Ähnliches hinzufügen möchten, können Sie diese Implementierung nutzen oder andere animierte Unterstreichungseffekte sehen .

Source: https://habr.com/ru/post/de434574/


All Articles