Як я можу замінити вбудовані стилі за допомогою зовнішнього CSS?


99

У мене є розмітка, яка використовує вбудовані стилі, але у мене немає доступу для зміни цієї розмітки. Як я можу замінити вбудовані стилі в документі, використовуючи лише CSS? Я не хочу використовувати jQuery чи JavaScript.

HTML:

<div style="font-size: 18px; color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

CSS:

div {
   color: blue; 
   /* This Isn't Working */
}

2
Навіщо використовувати вбудовані стилі, якщо ви хочете їх замінити?
Зловісна борода

36
@BFDatabaseAdmin Він може не мати доступу до розмітки, де оголошені вбудовані стилі.
TylerH

Відповіді:


176

Єдиний спосіб замінити вбудований стиль - це використання !importantключового слова поряд із правилом CSS. Нижче наведено приклад цього.

div {
        color: blue !important;
       /* Adding !important will give this rule more precedence over inline style */
    }
<div style="font-size: 18px; color: red;">
    Hello, World. How can I change this to blue?
</div>

Важливі примітки:

  • Використання !importantне вважається доброю практикою . Отже, слід уникати як !importantвбудованого, так і вбудованого стилю.

  • Додавання !importantключового слова до будь-якого правила CSS дозволяє правилу з силою передувати всі інші правила CSS для цього елемента.

  • Це навіть замінює вбудовані стилі з розмітки.

  • Єдиний спосіб замінити - це використання іншого !importantправила , оголошеного або з вищою специфічністю CSS в CSS, або рівною специфічністю CSS пізніше в коді.

  • Потрібно прочитати - Специфіка CSS за MDN 🔗


1
добре, що цей стиль його розкладає, насправді не обов'язково, що він використовує лише для перевизначення вбудованого css
Рохіт Агравал

1
я знаю, але те саме, що я кажу! важливе лише збільшить оцінку для конкретного майна, можливо, він використовує інші властивості (не для заміни) у якомусь блоці
Рохіт Агравал,

Чому! Важлива погана практика?
Зловісна борода

1
@BFDatabaseAdmin, тому що ви не зможете перевизначити це пізніше, якщо вам знадобиться якийсь особливий випадок
Rohit Agrawal

1
@BFWebAdmin проблема полягає в тому, що іноді у вас немає вибору. наприклад, "бейдж" з нової невидимої рекапчі може бути стилізований, але має частково вбудовані стилі, тому вам доведеться перевизначити їх, як це, або js, і віддайте перевагу чистому CSS-рішенню.
My1

26

inline-stylesв документі , мають найвищий пріоритет, тому, наприклад , кажуть , що якщо ви хочете змінити колір divелемента до blue, але ви inline styleз colorнабором властивостей дляred

<div style="font-size: 18px; color: red;">
   Hello World, How Can I Change The Color To Blue?
</div>
div {
   color: blue; 
   /* This Won't Work, As Inline Styles Have Color Red And As 
      Inline Styles Have Highest Priority, We Cannot Over Ride 
      The Color Using An Element Selector */
}

Отже, чи слід використовувати jQuery / Javascript? - Відповідь НІ

Ми можемо використовувати element-attrCSS Selector з !important, зауважте, !importantтут важливо, інакше він не перевершить вбудовані стилі ..

<div style="font-size: 30px; color: red;">
    This is a test to see whether the inline styles can be over ridden with CSS?
</div>
div[style] {
   font-size: 12px !important;
   color: blue !important;
}

Демо

Примітка: Використання !importantтільки буде працювати тут, але я використав div[style]селектор спеціально вибрати divмає style атрибут


2
Отже, чи слід використовувати вбудовані стилі? - Відповідь НІ :-)
PeeHaa

"Отже, чи слід використовувати jQuery / Javascript? - відповідь НІ" Чому? Якщо я працюю в середовищі (наприклад, Sharepoint), де вбудовані стилі додаються до елементів некерованою суттю, чому б я не використовував Jquery для видалення порушувальних вбудованих стилів, щоб зовнішня тема моїх сайтів відображалася? Здається, це більш прецесійне рішення, ніж вибух! Важливим для ознаки, яку я, можливо, захочу замінити в певному випадку пізніше.
Неберу 06.03.15

2
@Neberu - Оскільки JS можна заблокувати / вимкнути у браузері. Використання !importantне може AFAIK.
Тоні

1
також js взагалі погано, я маю на увазі, чи відкриваєте Ви виконувані файли, надіслані Вами від невідомої особи?
Здається,

11

Ви можете легко перевизначити вбудований стиль , за винятком вбудованого !importantстилю

так

<div style="font-size: 18px; color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
   color: blue !important; 
   /* This will  Work */
}

але якщо у вас є

<div style="font-size: 18px; color: red !important;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
   color: blue !important; 
   /* This Isn't Working */
}

тепер це буде redлише .., і ви не можете його замінити


1
Чим це відрізняється від відповідей, доданих місяцями раніше?
Зловісна борода

4
@BFDatabaseAdmin Ця відповідь описує поведінку, коли вбудований стиль має !important, пункт, не охоплений жодною з інших відповідей. Це може бути не повністю самостійною відповіддю, але це відрізняється від інших наданих відповідей.
grg

але знову ж таки використання вбудованого стилю з важливим дійсно є надмірним, оскільки він за замовчуванням має найвищий пріоритет.
My1

6
<div style="background: red;">
    The inline styles for this div should make it red.
</div>

div[style] {
   background: yellow !important;
}

Нижче наведено посилання для більш докладної інформації: http://css-tricks.com/override-inline-styles-with-css/


5
Чим це відрізняється від відповідей, доданих місяцями раніше?
Зловісна борода

1
можливо, немає різниці, якщо ви вже знали відповідь ... але для деяких початківців я сподіваюся, що це може їм допомогти ... особливо посилання, де воно докладніше ... у будь-якому випадку дякую за коментар.
jroi_web

1

використовується !importantу властивості CSS

<div style="color: red;">
    Hello World, How Can I Change The Color To Blue?
</div>

div {
        color: blue !important;
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.