Подтвердить что ты не робот

Как изменить стиль псевдокласса с помощью JavaScript?

Этот пример, для простоты, просто иллюстрация того, что мне нужно сделать. Скажем, у меня есть элемент, стиль которого установлен в CSS. Стиль задается как для элемента, так и для псевдокласса, например, элемент: hover. Я могу переопределить стиль для элемента со следующим JavaScript: element.style.setProperty('property-name', 'new value', ''). Как изменить стиль псевдокласса с помощью JavaScript?

Спасибо.

<html>
<head>
      <style type='text/css'>
             #myBtn {
                background-color: red;
             }
             #myBtn:hover {
                background-color: blue;
             }
      </style>
</head>
<body>
      <button id='myBtn'>Colored button</button>

      <button onclick="ChangeColor();">Script button</button>

      <script type="application/x-javascript">
              function ChangeColor() {
                 var Btn = document.getElementById('myBtn');
                 Btn.style.setProperty('background-color', 'green', '');
              };
      </script>
</body>
</html>
4b9b3361

Ответ 1

Я бы использовал другой набор правил с дополнительным классом

<html>
<head>
  <style type='text/css'>
    #myBtn {
      background-color: red;
    }
    #myBtn:hover {
      background-color: blue;
    }
    #myBtn.changed {
      background-color: green;
    }
    #myBtn.changed:hover {
      background-color: yellow; /* or whatever you want here */
    }
</head>

И затем

<script type="application/x-javascript">
      function ChangeColor() {
         var btn = document.getElementById('myBtn');
         btn.className = "changed";
      };
</script>

Конечно, это имеет смысл только для одного или нескольких разных значений, которые вы хотите иметь для своего цвета.

Ответ 2

Псевдо-классы CSS и псевдоэлементы не являются частью DOM, поэтому вы не можете изменять их свойства стиля напрямую с помощью JavaScript.

Некоторые динамические псевдоклассы типа :hover могут иметь похожие события JavaScript (onmouseover onmouseout), которые можно использовать для изменения стилей, но это не значит, что существует реальная корреляция между ними.

Ответ 3

Вы не можете изменять их напрямую, но вы можете вставить CSS в головную часть DOM.

Ответ 4

Вы можете поработать с существующими таблицами стилей в IE6 + и большинстве других браузеров.

Редактирование существующих правил возможно, но сложный кросс-браузер.

В этом примере добавляется новое правило (селектор и декларация) к последней таблице стилей в документе.

function addCss(sel, css){
    S= document.styleSheets[document.styleSheets.length-1];
    var r= (S.cssRules!= undefined)? S.cssRules: S.rules;
    if(S.insertRule) S.insertRule(sel+'{'+css+'}',r.length);
    else if(S.addRule)S.addRule(sel,css,r.length);
}

 addCss('button:hover','background-color:blue;');