p::before{
content: ' ';
width:5px;
}
Нужно через js задать width yfghbvth 150px;
JavaScript
CSS и JS Как сменить width d псевдоклассe ::before через js
Некоторые недоучки говорят что это невозможно Всё возможно И это лишь один из способов это сделать Все секреты открывать не стану но классы подобны DOM и их напрямую можно изменять!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style id="sty">
p::before {
content: '*';
width: 50px;
padding-left: 50px;
background-color: yellow;
}
</style>
<script>
s_ = document.createElement('style');
s_.id = "sr";
document.head.appendChild(s_);
addEventListener('click', e => {
if (e.target.id == 'w125px') {
s_.innerText = 'p::before{width:125px;padding-left:125px;}';
}
if (e.target.id == 'w5px') {
s_.innerText = 'p::before{width:5px;padding-left:5px;}';
}
});
</script>
</head>
<body>
<p>77777</p>
<p>12354</p>
<p>aaaaa</p>
<button id="w125px">w125px</button>
<button id="w5px">w5px</button>
</body>
</html>
⚤
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style id="sty">
p::before {
content: '*';
width: 50px;
padding-left: 50px;
background-color: yellow;
}
</style>
<script>
s_ = document.createElement('style');
s_.id = "sr";
document.head.appendChild(s_);
addEventListener('click', e => {
if (e.target.id == 'w125px') {
s_.innerText = 'p::before{width:125px;padding-left:125px;}';
}
if (e.target.id == 'w5px') {
s_.innerText = 'p::before{width:5px;padding-left:5px;}';
}
});
</script>
</head>
<body>
<p>77777</p>
<p>12354</p>
<p>aaaaa</p>
<button id="w125px">w125px</button>
<button id="w5px">w5px</button>
</body>
</html>
⚤
Суюн Койчуев
Когда не читая вопроса воруешь суть кода из предыдущего ответа, хотя бы ошибки в нем исправляй...
Оч просто: никак.
Псевдоклассы не являются элементами, и у них нет DOM-объектов.
Единственный способ влиять на свойства в псевдоклассах - через CSS3 переменные (значения свойств должны их использовать. Если не используют, то облом).
Псевдоклассы не являются элементами, и у них нет DOM-объектов.
Единственный способ влиять на свойства в псевдоклассах - через CSS3 переменные (значения свойств должны их использовать. Если не используют, то облом).
let ID = {
current: 0,
getNew: function() {
this.current++;
return this.current;
}
};
HTMLElement.prototype.pseudoStyle = function( el, prop, value ) {
let sheetId = "pseudoStyles",
head = document.head || document.getElementsByTagName( "head" )[ 0 ],
sheet = document.getElementById( sheetId ) || document.createElement( "style" ),
className = sheetId + ID.getNew();
sheet.id = sheetId;
this.className += ` ${ className }`;
sheet.innerHTML += `\n.${ className }:${ el }{${ prop }:${ value }}`;
head.appendChild( sheet );
return this;
}
void function() {
document.styleSheets[ 0 ].insertRule(
`p:before {
background: red;
display: block;
padding: 1rem;
content: 'HELLO';
cursor: pointer;
}`, 0
);
setTimeout(() => {
let p = document.getElementsByTagName( "p" )[ 0 ];
p.pseudoStyle( "before", "background", "green" );
p.pseudoStyle( "before", "color", "#fff" );
}, 2000 );
}();
Код: https://jsfiddle.net/1jdokpzy/1/
p.s Для меня новая фишка js - объект styleSheets ( спасибо автору поста ); Кто нибудь знает, как через него менять свойства???
current: 0,
getNew: function() {
this.current++;
return this.current;
}
};
HTMLElement.prototype.pseudoStyle = function( el, prop, value ) {
let sheetId = "pseudoStyles",
head = document.head || document.getElementsByTagName( "head" )[ 0 ],
sheet = document.getElementById( sheetId ) || document.createElement( "style" ),
className = sheetId + ID.getNew();
sheet.id = sheetId;
this.className += ` ${ className }`;
sheet.innerHTML += `\n.${ className }:${ el }{${ prop }:${ value }}`;
head.appendChild( sheet );
return this;
}
void function() {
document.styleSheets[ 0 ].insertRule(
`p:before {
background: red;
display: block;
padding: 1rem;
content: 'HELLO';
cursor: pointer;
}`, 0
);
setTimeout(() => {
let p = document.getElementsByTagName( "p" )[ 0 ];
p.pseudoStyle( "before", "background", "green" );
p.pseudoStyle( "before", "color", "#fff" );
}, 2000 );
}();
Код: https://jsfiddle.net/1jdokpzy/1/
p.s Для меня новая фишка js - объект styleSheets ( спасибо автору поста ); Кто нибудь знает, как через него менять свойства???
Марина Купрякова
Тогда уж вместо той портянки можно просто
document.head.insertAdjacentHTML('beforeend', `<style>
/* любые CSS-правила */
</style>`);
document.head.insertAdjacentHTML('beforeend', `<style>
/* любые CSS-правила */
</style>`);
Элементарно с помощью jquery $('.before').css('width','150px');
Похожие вопросы
- [HTML/CSS/JS] Как сохранять изменённые в .js данные оффлайн-сервера локально?
- Хочу учить js с нуля, но думаю html и css начать первым, так ли?
- Вам не кажется, что система HTML-CSS-JS избыточна и запутана?
- Помогите определиться с выбором нового языка (JS(TS) vs Java)
- Js фреймворки, что полезного можно для себя найти?
- В чем цель фреймворков js web?
- Почему jQuery методы популярнее js методов при общении с ДоМ?
- ПОЧЕМУ JS ТАКОЙ НЕПОНЯТНЫЙ???
- вопрос по JS. " простой ()";
- Порядок изучени JavaScripta. Путь к Node.js. Нужен совет по обучению от программистов