Как использовать :root вместо класса

Я хочу использовать :root вместо класса, как мне это сделать?

Это то, что я могу сделать?

Это все или все, что я пытаюсь сделать в коде.

Вот что такое :root.

:root {
  }

И это рабочий код, который у меня есть. https://jsfiddle.net/s6xocny3/

Как я смогу это сделать, если это возможно?

Можно ли это обновить и исправить? Можно ли его изменить?

https://stackoverflow.com/a/71656076/17974392

Кроме того, я не использую setInterval.

   (function randomBackground() {
      const classNames = [
        "bg1",
        "bg2",
        "bg3",
        "bg4",
        "bg5",
        "bg6",
        "bg7",
        "bg8",
        "bg9"
      ];
    
      const random = Math.floor(Math.random() * classNames.length);
      document.querySelector("body").classList.add(classNames[random]);
    }());
.bg1 {
  --color-a: linear-gradient(120deg, #155799, #159957);
}

.bg2 {
  --color-a: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
}

.bg3 {
  --color-a: linear-gradient(45deg, #102eff, #d2379b);
}

.bg4 {
  --color-a: linear-gradient(90deg, #360033 30%, #0b8793 100%);
}

.bg5 {
  --color-a: linear-gradient(115deg, #0a0e88, #00b1ce);

}

.bg6 {
  --color-a: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
}

.bg7 {
  --color-a: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
}

.bg8 {
  --color-a: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
}

.bg9 {
  --color-a: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  background-image: var(--color-a);
  background-repeat: no-repeat;
}

Ваш вопрос не имеет особого смысла. Текущий код предопределяет ряд наборов правил с различными селекторами классов для отображения стилей при выполнении различных условий (т. е. когда элемент является членом определенного класса), а затем использует JS, чтобы сделать одно из этих условий истинным случайным образом. :root всегда верно для корневого элемента. Вы не можете динамически превратить элемент в корневой элемент с помощью JS.

Quentin 29.03.2022 15:59

Мне сказали, что это можно сделать.

Erica Levine 29.03.2022 16:00

Тогда человек, который сказал вам, что это возможно, должен быть в состоянии вам помочь. Возможно, вы неверно истолковали то, что они сказали, или они неверно истолковали ваш вопрос.

Quentin 29.03.2022 16:01

Можно ли это обновить и исправить? stackoverflow.com/a/71656076/17974392

Erica Levine 29.03.2022 16:02

Можно ли его изменить?

Erica Levine 29.03.2022 16:06

Можете ли вы показать мне, как это делается в ответе, пожалуйста?

Erica Levine 29.03.2022 16:07

@Lawrence Cherone предоставил ответ, я просто хотел знать, как это сделать в коде.

Erica Levine 29.03.2022 16:10

Ваш вопрос «Как мне создать стиль :root {--color-1: red; --color-2: blue}" из JavaScript»? Объяснение того, что вы пытаетесь сделать, поможет другим понять ваш вопрос.

Juan Mendes 29.03.2022 16:13

Все используют setInterval, я не хочу его использовать.

Erica Levine 29.03.2022 16:14

Я с неудовольствием вижу, что вы не нашли времени, чтобы как следует прочитать мой ответ по ссылке, которую вы сами предоставили. Если вы не заинтересованы в использовании setInterval, игнорируйте его; но распределение случайных переменных --colorX — это ваш ответ.

Mister Jojo 29.03.2022 16:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете переопределить значение пользовательского свойства css, используя setProperty. Например:

document
  .documentElement
  .style
  .setProperty('--dynamic-background', bgs[random]);

Вот фрагмент, похожий на ваш, который использует только 1 пользовательское свойство css и обновляет его значение через javascript:

function randomBackground() {
  const bgs = [
    "linear-gradient(120deg, #155799, #159957)",
    "linear-gradient(0deg, #522db8 0%, #1c7ce0 100%)",
    "linear-gradient(45deg, #102eff, #d2379b)",
    "linear-gradient(90deg, #360033 30%, #0b8793 100%)",
    "linear-gradient(115deg, #0a0e88, #00b1ce)",
    "linear-gradient(0deg, #522db8 0%, #1c7ce0 100%)",
    "linear-gradient(0deg, #522db8 0%, #1c7ce0 100%)",
    "linear-gradient(0deg, #522db8 0%, #1c7ce0 100%)",
    "linear-gradient(0deg, #522db8 0%, #1c7ce0 100%)",
  ]
    
    const random = Math.floor(Math.random() * bgs.length);

    document
      .documentElement
      .style
      .setProperty('--dynamic-background', bgs[random]);
};

  randomBackground();
:root {
  --dynamic-background: linear-gradient(120deg, lime, red);
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  background-image: var(--dynamic-background);
  background-repeat: no-repeat;
}

Я не хочу использовать setInterval.

Erica Levine 29.03.2022 16:14

Я использовал setInterval, чтобы вы могли увидеть код, работающий в действии... Вы можете просто заменить его функцией, которая есть в вашем примере...

user3297291 29.03.2022 16:16

@EricaLevine Ничто не заставляет вас использовать setInterval, это просто показывает вам один из способов циклического переключения цветов. Пожалуйста, будьте более осторожны при объяснении чего-либо: «Я не хочу использовать setInterval» не говорит нам ничего, что помогло бы понять, почему вы не хотите его использовать. См. stackoverflow.com/help/как спросить

Juan Mendes 29.03.2022 16:16
Ответ принят как подходящий

Установите :root, ваш цвет изменится, затем измените background-image: var(--color-a); на случайный цвет.

(function randomBackground() {
  const varNames = [
    "color-a",
    "color-b",
    "color-c"
  ];

  const random = Math.floor(Math.random() * varNames.length);
  document.body.style.backgroundImage = 'var(--' + varNames[random] + ')';
}());
:root {
  --color-a: linear-gradient(120deg, #155799, #159957);
  --color-b: linear-gradient(0deg, #522db8 0%, #1c7ce0 100%);
  --color-c: linear-gradient(45deg, #102eff, #d2379b);
  /* ... */
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  background-image: var(--color-a);
  background-repeat: no-repeat;
}

Другие вопросы по теме