: Активний псевдо-клас не те ж саме , як додавання класу стилю елемента.
Псевдо-клас 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
клас застосовувався б лише тоді, <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>
а не глобально, ми можемо зробити це, використовуючи атрибути active-class
and 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>