Ma page contient actuellement le composant Navigation.vue. Je veux que chaque navigation soit stationnaire et active. Le survol fonctionne, mais pas le mode actif.
Voici à quoi ressemble le fichier Navigation.vue:
<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>
Et ce qui suit est le style.
<style>
nav li:hover,
nav li:active{
background-color: indianred;
cursor: pointer;
}
</style>
Voici à quoi ressemble le survol maintenant et on s'attend à ce qu'il soit exactement pareil en mode actif.
Je vous serais reconnaissant si vous me donnez un conseil pour le style des travaux actifs routeur-lien. Merci.
La : pseudo-classe active n'est pas la même chose que d'ajouter une classe pour styler l'élément.
La pseudo-classe CSS active représente un élément (tel qu'un bouton) activé par l'utilisateur. Lors de l'utilisation d'une souris, "l'activation" commence généralement lorsque le bouton de la souris est enfoncé et se termine lorsque vous la relâchez.
Nous cherchons une classe, telle que _.active
_, que nous pouvons utiliser pour styler l'élément de navigation.
Pour obtenir un exemple plus clair de la différence entre _:active
_ et _.active
_, voir l'extrait de code suivant:
_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
_ applique automatiquement deux classes actives, _.router-link-active
_ et _.router-link-exact-active
_, au composant <router-link>
.
router-link-active
Cette classe est appliquée automatiquement au composant <router-link>
lorsque son itinéraire cible est mis en correspondance.
Cela fonctionne en utilisant un comportement de correspondance inclusif. Par exemple, <router-link to="/foo">
appliquera cette classe tant que le chemin actuel commencera par _/foo/
_ ou sera _/foo
_.
Donc, si nous avions <router-link to="/foo">
et <router-link to="/foo/bar">
, les deux composants obtiendront le _router-link-active
_ class lorsque le chemin est _/foo/bar
_.
router-link-exact-active
Cette classe est appliquée automatiquement au composant <router-link>
lorsque son itinéraire cible est un exact rencontre. Tenez compte du fait que les deux classes, _router-link-active
_ et _router-link-exact-active
_, seront appliquées au composant dans ce cas.
En utilisant le même exemple, si nous avions <router-link to="/foo">
et <router-link to="/foo/bar">
, la classe _router-link-exact-active
_ serait seulement appliqué à <router-link to="/foo/bar">
lorsque le chemin est _/foo/bar
_.
Disons que nous avons <router-link to="/">
, ce qui va arriver, c’est que ce composant sera actif pour chaque itinéraire. Cela peut ne pas être quelque chose que nous voulons, nous pouvons donc utiliser la propriété exact
comme suit: <router-link to="/" exact>
. Désormais, le composant ne sera appliqué à la classe active que s'il correspond exactement à _/
_.
Nous pouvons utiliser ces classes pour styler notre élément, comme ceci:
_ nav li:hover,
nav li.router-link-active,
nav li.router-link-exact-active {
background-color: indianred;
cursor: pointer;
}
_
La balise _<router-link>
_ a été modifiée à l'aide de la variable tag
prop, _<router-link tag="li" />
_.
Si nous souhaitons changer les classes par défaut fournies par _vue-router
_ globalement, nous pouvons le faire en transmettant certaines options à l'instance _vue-router
_ comme suit:
_const router = new VueRouter({
routes,
linkActiveClass: "active",
linkExactActiveClass: "exact-active",
})
_
<router-link>
)Si au lieu de cela nous voulons changer les classes par défaut par <router-link>
et non globalement, nous pouvons le faire en utilisant le active-class
et exact-active-class
attributs comme ceci:
_<router-link to="/foo" active-class="active">foo</router-link>
<router-link to="/bar" exact-active-class="exact-active">bar</router-link>
_
Lors de la création du routeur, vous pouvez spécifier la propriété linkExactActiveClass
pour définir la classe à utiliser pour le lien de routeur actif.
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
const router = new VueRouter({
routes,
linkActiveClass: "active", // active class for non-exact links.
linkExactActiveClass: "active" // active class for *exact* links.
})
Ceci est documenté ici .
https://router.vuejs.org/en/api/router-link.html ajouter l'attribut active-class = "active", par exemple:
<ul class="nav navbar-nav">
<router-link tag="li" active-class="active" to="/" exact><a>Home</a></router-link>
<router-link tag="li" active-class="active" to="/about"><a>About</a></router-link>
<router-link tag="li" active-class="active" to="/permission-list"><a>Permisison</a></router-link>
</ul>