Задать вопрос
@lillianfisher

Как присвоить динамическому компоненту класс если scoped?

Создавая слайдер, мне нужно динамически создавать div и присваивать ему стили. Однако, так как scss scoped стили не применяются - можно ли решить это при scss scoped?
<template>
  <div class="slider" ref="slider"></div>
</template>
<style lang="scss" scoped>
.slider {
  width: 100%;
  height: 100%;
background: green;
}
.frame {
    width: 100%;
  height: 100%;
background: blue;
}
</style>
<script>
export default {
  name: "Slider",
  mounted() {
    for (let i = 0; i < 3; i++) {
      let frame = document.createElement("div");
      frame.classList.add("frame"); //класс присваивается но стили не применяются
      this.$refs.slider.appendChild(frame);
    }
  },
};
</script>
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Stepik
    Основы HTML и CSS
    2 недели
    Далее
  • OTUS
    HTML/CSS
    3 месяца
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега CSS
Инкапсуляция стилей реализуется путём добавления уникального (в пределах компонента) атрибута элементам и, соответственно, селекторам в css-коде. Вы создаёте элементы вручную, так что нужный атрибут у них отсутствует - поэтому стили не применяются. Чтобы применились, можно воспользоваться т.н. глубоким селектором - для этого замените .frame { на .slider /deep/ .frame {.

А вообще,...

...неплохо было бы вам руки оборвать за подобный код:

mounted() {
  for (let i = 0; i < 3; i++) {
    let frame = document.createElement("div");
    frame.classList.add("frame"); //класс присваивается но стили не применяются
    this.$refs.slider.appendChild(frame);
  }
},

Считаете, что читать документацию не надо? Если ваша цель - пополнить ряды говнокодеров, то путь выбрали верный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
FoodSoul Калининград
от 180 000 до 250 000 ₽