Как изменить цвет ссылок Navbar в Bootstrap - vue - PullRequest
2 голосов
/ 04 апреля 2020

Я понимаю, как это делается в Bootstrap4, но тот же метод не работает в Bootstrap - vue

Это код на моей домашней странице. vue file:

<template>
  <div class="forVue">
    <div>
        <b-navbar toggleable="sm" type="dark" variant="dark">

            <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>

            <b-collapse id="nav-collapse" is-nav>

                <b-navbar-nav class="mx-auto">
                    <b-nav-item href="/home">Home</b-nav-item>
                    <b-nav-item href="/home">Services</b-nav-item>
                    <b-nav-item href="/home">Contact</b-nav-item>
                    <b-nav-item href="/about">About Us</b-nav-item>
                </b-navbar-nav>

            </b-collapse>

        </b-navbar>
    </div>
  </div>
</template>

Ниже приведены мои CSS внутренние теги стиля в том же файле

<style>
    .nav-item {
        color: red !important;
    }
</style>

Это не работает, и цвет остается по умолчанию. Я также не могу понять, как указать панель навигации для изменения цвета всей панели навигации без использования тега! Important. Он работает со следующим кодом:

.navbar {
        background-color: red !important;
    }

Как заставить это работать без тега! Important?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Чтобы избавиться от !important, вам просто нужно написать более конкретный c селектор, чем тот, который в настоящее время применяется.

.nav-link цвета, похоже, имеют специфичность 3 × class в Boostrap Vue, что означает, что 3 × class + 1 × el будет достаточно:

.nav-item.nav-item.nav-item a {
  color: red;
}

Примечание: если вы обнаружите необходимость повторить селектор классов, несколько раз громоздкий и генерирующий слишком много стандартного кода в вашем CSS, один часто используемый трюк - это искусственное завышение специфичности моих селекторов с помощью 1 × id:

#app .nav-item a { color: red }

Еще одно замечание по этому поводу что вам даже не нужно иметь идентификатор предка, потому что это также будет работать:

body:not(#_) .nav-item a {
  color: red;
}

... при условии, что ваш элемент <body> не имеет id="_".

В scss это становится еще проще, так как все, что вам нужно сделать, это обернуть ваш текущий код в body:not(#_) { ...current code ... }.

Со временем я получил некоторые комментарии по поводу этой техники, которая столь же плоха, как и использование !important, потому что она также объединяет специфику, и вы в конечном итоге играете все сложнее писать даже более сильные селекторы, когда текущие требуют перезаписи.

Мой ответ на это заключается в том, что правила игры фактически устанавливаются тем, как работает CSS. Я не установил правила, я только играю в игру. Но самая важная часть заключается в том, что, не используя !important, я позволяю JavaScript стилевому оформлению иметь приоритет, что является наиболее важной причиной, по которой использование !important является плохой практикой.


Более общий ответ на этот тип вопросов будет следующим: проверьте ваш элемент, выясните, какое правило применяет текущее значение, и напишите немного более конкретное c (или точно такое же c, если вы поместите его в тег <style> вашего компонента, поскольку он применяется последним).


Также обратите внимание, что ваш код должен быть в теге <style>, который не scoped. Если это scoped, префикс с /deep/, ::v-deep или >>> должен работать, но недавняя ошибка в Vue, которая еще не устранена, разбивает пробивающие селекторы в тегах <style> с lang="scss", если ваш sass-loader выше 7.* (текущий последний: 8.0.2). Фактически это означает, что будет работать следующее:

<style scoped lang="css">
  /deep/ .nav-item.nav-item.nav-item a {
     color: red;
  }
</style>

... (где lang="css" является необязательным, потому что это значение по умолчанию), тогда как

<style scoped lang="scss">
   /deep/ .nav-item.nav-item.nav-item a {
     color: red;
  }
</style>

... будет не работает .

Однако это (другая) ошибка, и она, вероятно, будет исправлена ​​в ближайшее время, после чего я удалю эту часть своего ответа.

0 голосов
/ 04 апреля 2020

Если вы хотите изменить цветовую схему на вариант red, вы можете просто использовать variant="danger", например:

<b-navbar toggleable="sm" type="dark" variant="danger">

<b-navbar> поддерживает стандартные Bootstrap v4 доступные варианты цвета фона. Установите variant prop на одно из следующих значений, чтобы изменить цвет фона: primary, success, info, warning, danger, dark или light.

new Vue({
  el: '#app'
})
#app { padding: 20px;}.navbar{margin-bottom:10px}
<!-- Load required Bootstrap and BootstrapVue CSS -->
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.css" />
<script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CIntersectionObserver" crossorigin="anonymous"></script>
<script src="//unpkg.com/vue@latest/dist/vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.min.js"></script>
<script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue-icons.min.js"></script>

<div id="app">
  <b-navbar toggleable="sm" type="dark" variant="dark">
    <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
    <b-collapse id="nav-collapse" is-nav>
      <b-navbar-nav class="mx-auto">
        <b-nav-item href="/home">Home</b-nav-item>
        <b-nav-item href="/home">Services</b-nav-item>
        <b-nav-item href="/home">Contact</b-nav-item>
        <b-nav-item href="/about">About Us</b-nav-item>
      </b-navbar-nav>
    </b-collapse>
  </b-navbar>
  <b-navbar toggleable="sm" type="dark" variant="danger">
    <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
    <b-collapse id="nav-collapse" is-nav>
      <b-navbar-nav class="mx-auto">
        <b-nav-item href="/home">Home</b-nav-item>
        <b-nav-item href="/home">Services</b-nav-item>
        <b-nav-item href="/home">Contact</b-nav-item>
        <b-nav-item href="/about">About Us</b-nav-item>
      </b-navbar-nav>
    </b-collapse>
  </b-navbar>
  <b-navbar toggleable="sm" type="dark" variant="primary">
    <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
    <b-collapse id="nav-collapse" is-nav>
      <b-navbar-nav class="mx-auto">
        <b-nav-item href="/home">Home</b-nav-item>
        <b-nav-item href="/home">Services</b-nav-item>
        <b-nav-item href="/home">Contact</b-nav-item>
        <b-nav-item href="/about">About Us</b-nav-item>
      </b-navbar-nav>
    </b-collapse>
  </b-navbar>
</div>
...