Meine Seite enthält derzeit die Navigation.vue-Komponente. Ich möchte jede Navigation schweben und aktiv machen. Der "Schwebeflug" funktioniert, "aktiv" jedoch nicht.
So sieht die Datei Navigation.vue aus:
<template>
<div>
<nav class="navbar navbar-expand-lg fixed-top row">
<router-link tag="li" class="col" class-active="active" to="/" exact>TIME</router-link>
<router-link tag="li" class="col" class-active="active" to="/CNN" exact>CNN</router-link>
<router-link tag="li" class="col" class-active="active" to="/TechCrunch" exact>TechCrunch</router-link>
<router-link tag="li" class="col" class-active="active" to="/BBCSport" exact>BBC Sport</router-link>
</nav>
</div>
</template>
Und das Folgende ist der Stil.
<style>
nav li:hover,
nav li:active{
background-color: indianred;
cursor: pointer;
}
</style>
So sieht der Schwebeflug jetzt aus und wird auf Aktiv genau genauso erwartet.
Ich würde mich freuen, wenn Sie mir einen Rat für das Styling von Router-Link-aktiven Werken geben. Vielen Dank.
vue.js
vue-router
routerlink
doobean
quelle
quelle
linkExactActiveClass
als Eigenschaft Ihres Routers an (wo Sie die hinzufügenroutes
).Antworten:
Die : aktive Pseudoklasse ist nicht dasselbe wie das Hinzufügen einer Klasse, um das Element zu formatieren.
Was wir suchen, ist eine Klasse wie
.active
, mit der wir das Navigationselement formatieren können.Ein klareres Beispiel für den Unterschied zwischen
:active
und.active
siehe den folgenden Ausschnitt:Code-Snippet anzeigen
li:active { background-color: #35495E; } li.active { background-color: #41B883; }
<ul> <li>:active (pseudo-class) - Click me!</li> <li class="active">.active (class)</li> </ul>
Vue-Router
vue-router
Wendet automatisch zwei aktive Klassen.router-link-active
und.router-link-exact-active
auf die<router-link>
Komponente an.router-link-active
Diese Klasse wird automatisch auf die
<router-link>
Komponente angewendet, wenn ihre Zielroute übereinstimmt.Dies funktioniert mithilfe eines inklusiven Übereinstimmungsverhaltens. Zum Beispiel
<router-link to="/foo">
wird diese Klasse , solange der Strompfad beginnt angelegt bekommen/foo/
oder ist/foo
.Wenn wir also
<router-link to="/foo">
und hätten<router-link to="/foo/bar">
, würden beide Komponenten dierouter-link-active
Klasse erhalten, wenn der Pfad ist/foo/bar
.router-link-exact-active
Diese Klasse wird automatisch auf die
<router-link>
Komponente angewendet, wenn ihre Zielroute genau übereinstimmt. Beachten Sie, dass in diesem Fall beide Klassenrouter-link-active
undrouter-link-exact-active
auf die Komponente angewendet werden.Wenn wir im selben Beispiel
<router-link to="/foo">
und hätten<router-link to="/foo/bar">
, würde dierouter-link-exact-active
Klasse nur angewendet,<router-link to="/foo/bar">
wenn der Pfad ist/foo/bar
.Die genaue Stütze
Nehmen wir an
<router-link to="/">
, wir haben , was passieren wird, ist, dass diese Komponente für jede Route aktiv ist. Dies ist möglicherweise nicht das, was wir wollen, also können wir dieexact
Requisite wie folgt verwenden :<router-link to="/" exact>
. Jetzt wird auf die Komponente die aktive Klasse nur angewendet, wenn sie genau übereinstimmt/
.CSS
Wir können diese Klassen verwenden, um unser Element wie folgt zu gestalten:
Das
<router-link>
Tag wurde mit dertag
Requisite geändert<router-link tag="li" />
.Ändern Sie die Standardklassen global
Wenn Sie die von
vue-router
global bereitgestellten Standardklassen ändern möchten , können Sie dazu einige Optionen an dievue-router
Instanz übergeben:Standardklassen pro Komponenteninstanz ändern (
<router-link>
)Wenn wir stattdessen die Standardklassen pro
<router-link>
und nicht global ändern möchten , können wir dies mithilfe der Attributeactive-class
undexact-active-class
wie folgt tun:v-slot API
Vue Router 3.1.0+ bietet eine einfache Anpassung über einen Steckplatz mit Gültigkeitsbereich . Dies ist praktisch, wenn Sie das Wrapper-Element wie ein Listenelement formatieren möchten
<li>
, die Navigationslogik jedoch im Ankerelement beibehalten möchten<a>
.quelle
Wenn Sie den Router erstellen, können Sie die
linkExactActiveClass
als Eigenschaft angeben , um die Klasse festzulegen, die für die aktive Router-Verbindung verwendet wird.Dies ist hier dokumentiert .
quelle
/
als aktiv betrachtet (da URLs wie es/about
enthalten).https://router.vuejs.org/en/api/router-link.html Attribut hinzufügen active-class = "active" zB:
quelle
exact
Attribut ist relevant, um eine falsche Auslösung zu vermeidenWie oben von @Ricky erwähnt, wendet der Vue-Router automatisch zwei aktive Klassen
.router-link-active
und.router-link-exact-active
auf die Komponente an.Um den aktiven Link CSS zu ändern, verwenden Sie:
quelle
Fügen Sie einfach die Lösung von @ Bert hinzu, um es klarer zu machen:
Wie man sehen kann, sollte diese Zeile entfernt werden:
Auf diese Weise wird NUR der aktuelle Link beleuchtet. Dies sollte in den meisten Fällen gelten.
David
quelle