Как VueJS маршрутизатор-ссылка активный стиль
Моя страница в настоящее время имеет навигацию.компонент вю.
Я хочу сделать каждую навигацию hover и active. "Hover" работает, но "active" - нет.
Вот как работает навигация.файл 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>
и следующий стиль.
<style>
nav li:hover,
nav li:active{
background-color: indianred;
cursor: pointer;
}
</style>
вот как hover выглядит сейчас и ожидается точно так же на active.
Я был бы признателен, если бы вы дали мне совет по стилизации маршрутизатора-ссылка активна завод. Спасибо.
3 ответов
:active pseudo-class !== .active class
на :активный псевдо-класс не то же самое, что добавление класса для стиля элемента.
: активный псевдокласс CSS представляет элемент (например, кнопку) это активируется пользователем. При использовании мыши "активация" обычно начинается, когда кнопка мыши нажата и заканчивается, когда он освобожден.
то, что мы ищем-это класс, такие как .active
, который мы можем стиль элемента навигации.
для более ясного примера разницы между :active
и .active
посмотреть следующий фрагмент:
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-Маршрутизатор
vue-router
автоматически применяет два активных классов, .router-link-active
и .router-link-exact-active
до <router-link>
компонент.
router-link-active
этот класс применяется автоматически к <router-link>
компонент, когда его целевой маршрут согласован.
как это работает, используя инклюзивное поведение соответствия. Например, <router-link to="/foo">
будет применяться этот класс, пока текущий путь начинается с /foo/
или /foo
.
Итак, если бы мы имели <router-link to="/foo">
и <router-link to="/foo/bar">
, оба компонента получат router-link-active
класс, когда путь /foo/bar
.
router-link-exact-active
этот класс автоматически применяется к <router-link>
компонент, когда его цель маршрута-это точно матч. Примите во внимание, что оба класса, router-link-active
и router-link-exact-active
, будет применяться к компоненту в этом случае.
используя тот же пример, если бы у нас было <router-link to="/foo">
и <router-link to="/foo/bar">
, the router-link-exact-active
класс только применяется к <router-link to="/foo/bar">
когда путь /foo/bar
.
точная опора
допустим, у нас есть <router-link to="/">
, произойдет то, что этот компонент будет активен для каждого маршрута. Это может быть не то, что мы хотим, поэтому мы можем использовать exact
prop так:<router-link to="/" exact>
. Теперь компонент будет применять активный класс только тогда, когда он точно соответствует /
.
в CSS
мы можем использовать эти классы для стиля нашего элемента, например:
nav li:hover,
nav li.router-link-active,
nav li.router-link-exact-active {
background-color: indianred;
cursor: pointer;
}
на <router-link>
тег был изменен с помощью tag
проп <router-link tag="li" />
.
изменить классы по умолчанию глобально
если мы хотим изменить классы по умолчанию vue-router
глобально мы можем сделать это, передав некоторые параметры в vue-router
например вот так:
const router = new VueRouter({
routes,
linkActiveClass: "active",
linkExactActiveClass: "exact-active",
})
изменить классы по умолчанию для каждого экземпляра компонента (<router-link>
)
если вместо этого мы хотим изменить классы по умолчанию в <router-link>
и не глобально, мы можем сделать это с помощью active-class
и exact-active-class
атрибуты, как так:
<router-link to="/foo" active-class="active">foo</router-link>
<router-link to="/bar" exact-active-class="exact-active">bar</router-link>
при создании маршрутизатора можно указать linkExactActiveClass
как свойство для установки класса, который будет использоваться для активной ссылки маршрутизатора.
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.
})
Это документировано здесь.
https://router.vuejs.org/en/api/router-link.html добавить атрибут active-class= " active" например:
<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>