Используйте разные @keyframes на основе класса родительского элемента

У меня есть анимация, как показано ниже:

@keyframes pulseColorGreen {
    0% {
        background-color: green;
    }
    97%{
        background-color: green;
    }
    100% {
      background-color: white;
    }
  }

На моем веб-сайте также есть темный режим, в котором фон становится черным. Теперь в анимации я хочу отобразить более темный зеленый цвет, как показано ниже:

@keyframes pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }

Для темного режима я добавляю класс "lightsOff" в тег body. Я управляю всеми другими изменениями цвета, используя комбинацию класса целевого элемента и класса "lightsOff", как:

.lightsOff .someclass{
    color: white
}

Но при определении элемента в файле css как:

@keyframes .lightsOff pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }

Это дает мне ошибку, говоря "ожидаемый идентификатор". Я динамически добавляю свойство animation-name к элементам из javascript. Следовательно, я не буду предпочитать изменять код JS, чтобы определить, какая тема установлена ​​в данный момент, и соответственно установить ключевой кадр. Как я могу этого добиться?

Привет, Кашьяп. Я заметил, что ваши сообщения мы бы назвали "болтливыми". Это означает, что они содержат любезности и тонкости с целью просить о помощи. Здесь мы предпочитаем сообщения без этого, и иногда вы можете обнаружить, что, если читатель считает, что сообщение слишком шумное, он проголосует против и двинется дальше. Таким образом, если вы можете стремиться к краткости, мы будем признательны. Справочные обсуждения Переполнение мета-стека доступны по запросу.

halfer 04.08.2018 20:02
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
4
1
3 594
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать переменную CSS, и вам понадобится только один ключевой кадр, который вам не нужно менять. Просто измените основной класс, определяющий цвет:

.light {
  --c: yellow;
}

.dark {
  --c: darkblue;
}

.box {
  height: 100px;
  margin: 5px;
  box-shadow: 0 0 5px var(--c);
  color:#fff;
  animation: pulseColorGreenMkt 1s infinite linear alternate;
}

@keyframes pulseColorGreenMkt {
  0% {
    background-color: var(--c);
  }
  100% {
    background-color: black;
  }
}
<div class = "box light">
  Class defined on the element
</div>
<div class = "dark">
  <div class = "box">
    Class defined on a parent element
  </div>
</div>

Я исследовал этот вариант ранее, но переменные CSS не поддерживаются в IE (поправьте меня, если ошиблись). Я хотел бы иметь кроссбраузерное решение с поддержкой браузеров как минимум 2-3-летней давности.

Kashyap Kotak 29.07.2018 15:53

@KashyapKotak Ах! если вы ищете поддержку IE, я думаю, что единственный способ сделать, как вы сказали ... изменить свой JS-код, чтобы идентифицировать каждый случай

Temani Afif 29.07.2018 15:58

Я не тестировал свой сайт в IE. прокомментировав здесь, я открыл его в первый раз в IE и обнаружил, что многие вещи не работают: P Так что я могу покинуть IE. Но я вижу на странице caniuse.com/#feat=css-variables сообщение: «В Edge 15 анимация с переменными css может привести к сбою веб-страницы». Хотя я определенно хотел бы поддержать EDGE. Пожалуйста, дайте мне знать, если мне нужно беспокоиться о проблеме, указанной в этой ссылке

Kashyap Kotak 29.07.2018 16:05

@KashyapKotak Да, эта ссылка довольно надежна, поэтому, если вы найдете что-то там, вы должны рассмотреть это, но вы также должны перейти по ссылке с ошибкой, чтобы точно знать, что это за ошибка и ее текущее состояние ... вероятно, это частный случай, когда вы не сталкиваются

Temani Afif 29.07.2018 16:07

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