2013-05-29 4 views
57

У меня есть разметка, которая использует встроенные стили, но у меня нет доступа к изменению этой разметки. Как переопределить встроенные стили в документе, используя только CSS? Я не хочу использовать jQuery или JavaScript.Как я могу переопределить встроенные стили с помощью внешнего CSS?

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

Зачем использовать встроенные стили, если вы хотите, чтобы переопределить их ? – BFWebAdmin

+18

@BFDatabaseAdmin Возможно, он не сможет получить доступ к разметке, где объявляются встроенные стили. – TylerH

+0

Да, хороший момент. – BFWebAdmin

ответ

120

To единственный способ переопределить встроенный стиль с помощью ключевого слова !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 Specificity by MDN

+1

ну, что стиль, это ему, на самом деле, не нужно, чтобы он использовал только для переопределения inline css –

+1

Я знаю, но тот же я говорю! важно будет только увеличить оценку для конкретной собственности, он может использовать другие свойства (не для переопределения) в некотором блоке –

+0

Почему важная плохая практика? – BFWebAdmin

21

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-attr CSS 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; 
} 

Demo

Примечание: Использование !important ТОЛЬКО будет работать здесь, но я использовал div[style] селектор конкретно выбрать div имеющий style атрибут

+2

Итак, следует ли использовать встроенные стили? Ответ - ** НЕТ ** :-) – PeeHaa

+0

«Итак, я должен использовать jQuery/Javascript? - Ответ НЕТ» Почему? Если я работаю в среде (например, Sharepoint), где встроенные стили добавляются к элементам неконтролируемой сущностью, почему бы мне не использовать JQuery для удаления оскорбительных встроенных стилей, чтобы показать мою внешнюю тему на сайтах? Кажется, что это более предварительное решение, чем взрывная обработка! Важное значение для черты, которую я могу переопределить в конкретном экземпляре позже. – Neberu

+2

@Neberu - Потому что JS можно заблокировать/отключить в браузере. Использование '! Important' не может AFAIK. – Tony

8

Вы можете легко переопределить встроенный стиль, за исключением встроенного !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

Как это отличается от ответов, которые были добавлены несколько месяцев назад? – BFWebAdmin

+3

@BFDatabaseAdmin В этом ответе описывается поведение, когда встроенный стиль имеет значение '! Important', точка, не охваченная никакими другими ответами. Это не может быть полностью автономным ответом, но это отличается от других предоставленных ответов. – grgarside

+0

, но опять же с использованием встроенного стиля с важными действительно переполняет, так как он по умолчанию имеет наивысший приоритет. – My1

2
<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

Как это отличается от ответов, которые были добавлены несколько месяцев назад? – BFWebAdmin

+1

, может быть, нет никакой разницы, если вы уже знали ответ ... но для некоторых новичков я надеюсь, что это может помочь им ... особенно ссылку, где она более подробно ... в любом случае спасибо за комментирование. –

Смежные вопросы