Как использовать/deep/или >>> в Vue.js?

Итак, я прочитал здесь, что в Vue.js вы можете использовать /deep/ или >>> в селекторе, чтобы создавать правила стиля, которые применяются к элементам внутри дочерних компонентов. Однако, попытка использовать это в моих стилях, будь то в SCSS или в простом старом CSS, не работает. Вместо этого они отправляются в браузер дословно, и, следовательно, не имеют никакого эффекта. Например:

home.vue:

<style lang="css" scoped>
    .autocomplete >>> .autocomplete-input
    {
    // ...
    }
</style>

сгенерированный css:

<style type="text/css">
.autocomplete >>> .autocomplete-input[data-v-2bda0c9a]
{
//...
}
</style>

что я хочу:

<style type="text/css">
.autocomplete[data-v-2bda0c9a] .autocomplete-input
{
//...
}
</style>

Моя конфигурация webpack, относящаяся к vue-loader выглядит следующим образом:

// ...
{
    test: /\.vue$/,
    loader: "vue-loader",
    options: {
        loaders: {
            scss: "vue-style-loader!css-loader!sass-loader"
        }
    }
}
// ...

Итак, мой вопрос, как мне заставить этот оператор >>> работать?

Я уже нашел этот ответ, но я делаю именно это, и он не работает...

Ответ 1

Я успешно использовал /deep/в таблицах стилей SCSS Vue со следующей структурой:

.parent-class {
  & /deep/ .child-class {
    background-color: #000;
  }
}

Изменить: /deep/устарела, если он больше не работает для вас, пожалуйста, обратитесь к другому ответу, который объясняет :: v-deep

Ответ 2

Используйте :: v-deep

Принятый ответ не работал для меня в SCSS с определенными областями, но иногда это сработало:

.parent-class {
  &::v-deep .child-class {
    background-color: #000;
  }
}

И это обычно так (без учета родительского класса):

::v-deep .child-class {
  background-color: #000;
}

РЕДАКТ. (01.10.2009): дополнительная информация :

  • sass и dart-sass не поддерживают /deep/, только node-sass поддерживает
  • Vuetify 2 не поддерживает /deep/ (так как он не поддерживает node-sass)

Ответ 3

Теперь раньше /deep/ устареет

Ссылка на Vue Github - https://github.com/vuejs/vue-loader/issues/913

Любая область действия component css может быть изменена с помощью deep selector

В этом случае используйте ::v-deep, так как /deep/ устареет.

Справочник - Deep Selector

Просто проверьте класс визуализированного element, который вы хотите изменить, используя devtools в chrome или любой консоли браузера.

Затем, если вы потребляете component, измените его

<style scoped>
::v-deep .custom-component-class {
   background: red; //
}
</style>