: активный псевдокласс - это не то же самое, что добавление класс для стилизации элемента.
Псевдокласс: active 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-Router
vue-router
автоматически применяет два активных класса, .router-link-active
и .router-link-exact-active
, к компоненту <router-link>
.
Этот класс автоматически применяется к компоненту <router-link>
при совпадении его целевого маршрута.
Это работает с использованием инклюзивного поведения сопоставления. Например, <router-link to="/foo">
будет применять этот класс, пока текущий путь начинается с /foo/
или /foo
.
Итак, если бы у нас были <router-link to="/foo">
и <router-link to="/foo/bar">
, оба компонента получили бы класс router-link-active
, когда путь равен /foo/bar
.
Этот класс автоматически применяется к компоненту <router-link>
, когда его целевой маршрут является точным совпадением. Учтите, что в этом случае к компоненту будут применены оба класса router-link-active
и router-link-exact-active
.
Используя тот же пример, если бы у нас были <router-link to="/foo">
и <router-link to="/foo/bar">
, router-link-exact-active
class только применялся бы к <router-link to="/foo/bar">
, когда путь /foo/bar
.
Допустим, у нас есть <router-link to="/">
, произойдет то, что этот компонент будет активен для каждого маршрута. Возможно, это не то, что нам нужно, поэтому мы можем использовать свойство exact
так: <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>
, а не глобально, мы можем сделать это с помощью _ 41_ и 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>
Vue Router 3.1.0+ предлагает низкоуровневую настройку с помощью слота с ограниченной областью действия. Это удобно, когда мы хотим стилизовать элемент оболочки, например элемент списка <li>
, но при этом сохранить логику навигации в элементе привязки <a>
.
<router-link
to="/foo"
v-slot="{ href, route, navigate, isActive, isExactActive }"
>
<li
:class="[isActive && 'router-link-active', isExactActive && 'router-link-exact-active']"
>
<a :href="href" @click="navigate">{{ route.fullPath }}</a>
</li>
</router-link>
person
Ricky
schedule
06.09.2017
linkExactActiveClass
как свойство вашего маршрутизатора (где вы добавляетеroutes
). - person Bert   schedule 06.09.2017