Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не исчезает картинка? (https://javascript.ru/forum/misc/79176-pochemu-ne-ischezaet-kartinka.html)

jaroslav.tavgen 29.12.2019 12:49

Почему не исчезает картинка?
 
Хочу на этом сайте https://zety.com/resume-templates (у себя в браузере) убрать картинку слева (треугольники под словом "zety").

Набираю в консоли
[].forEach.call(document.getElementsByTagName("div"), a=>{a.style.backgroundImage = "none"});

после чего он даже в HTML-коде пишет:

<div class="grid" style="background-image: none;">

однако картинка никуда не исчезает.

И консоль показывает следующий CSS:
.jumbotron>div:before {
    top: 0;
    left: -8rem;
    width: 17.6rem;
    height: 11.3rem;
    background-image: url([url]https://cdn-images.zety.com/images/zety/landings/templates/introduction-left.png);[/url]
    background-size: auto 11.3rem;
}

только все строки, кроме " background-image: url(https://cdn-images.zety.com/images/zety/landings/templates/introduction-left.png);" зачёркнуты.

Почему картинка не исчезает, и инлайновая надпись style="background-image: none;" просто игнорируется?

Aetae 29.12.2019 13:01

Разницу меж div и div:before чуешь?

jaroslav.tavgen 29.12.2019 13:06

Цитата:

Сообщение от Aetae (Сообщение 518160)
Разницу меж div и div:before чуешь?

Теперь да:) И какое тогда может быть решение?

[].forEach.call(document.getElementsByTagName("div:before"), a=>{a.style.backgroundImage = "none"});

не работает

Aetae 29.12.2019 13:35

Из js - добавить на страницу <style>, переписывающий соответствующее правило. Или, если стили грузятся с того же домена, убрать правило напрямую из cssRules.

jaroslav.tavgen 29.12.2019 13:46

Цитата:

Сообщение от Aetae (Сообщение 518162)
Из js - добавить на страницу <style>, переписывающий соответствующее правило. Или, если стили грузятся с того же домена, убрать правило напрямую из cssRules.

Спасибо большое! Получилось следующим кодом:
var style = document.createElement('style');
  style.innerHTML = `
.jumbotron>div:before {
    top: 0;
    left: -8rem;
    width: 17.6rem;
    height: 11.3rem;
    
    background-size: auto 11.3rem;
}  `;
  document.head.appendChild(style);

рони 29.12.2019 13:49

jaroslav.tavgen,
const style = document.createElement('style');
   style.textContent = `.jumbotron>div:before {
    background-image: none;
   }`;
   document.body.append(style);

jaroslav.tavgen 29.12.2019 13:52

Но возник другой вопрос: почему не работает это?
var style = document.createElement('style');
style.innerHTML = `
div:before {
background-image: none;
}`;
document.head.appendChild(style);

и это:
const style = document.createElement('style');
   style.textContent = `div:before {
    background-image: none;
   }`;
   document.body.append(style);

Когда я этот код ввожу, картинка не исчезает. Частное правило (".jumbotron>div:before") имеет приоритет над общим ("div:before") даже если последнее было добавлено позже?

рони 29.12.2019 14:00

jaroslav.tavgen,
читать про веса селекторов.

рони 29.12.2019 14:02

jaroslav.tavgen,
Взвешиваем селекторы CSS

Aetae 29.12.2019 14:15

Ну и если вы делаете какой-то юзерскрипт, а не в прод, то можно не заморачиваться и просто писать !important.
Особый хак, для случаев когда прописан тяжёлый селектор да ещё и с !important и его надо подменить - просто добавьте :not([x]) - столько раз, сколько надо, чтобы перевесило.)


Часовой пояс GMT +3, время: 04:00.