Как изменить стиль псевдокласса с помощью 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>
Ответы
Ответ 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;');