2016-06-10 2 views
0

Получил путаницу, связанную с уровнем приоритета классов в css, я знаю, что класс, добавленный последним, имеет наивысший приоритет, но здесь в моем случае я думал, что ошибаюсь. Я динамически добавляю класс div, но классы не работают должным образомПриоритет класса Css при добавлении динамического класса

<p>Click the button to add the "mystyle" class to DIV.</p> 

<script> 
    function myFunction() { 
    document.getElementById("myDIV").classList.add("mystyle","hello"); 
} 
</script> 

<style> 
.hello{ 
background-color: blue; 
} 
.mystyle { 
    background-color: red; 
} 
</style> 

Почему div показывает красный цвет вместо синего?

Working Example

+0

Возможный дубликат http://stackoverflow.com/questions/17727739/precedence-of-multiple-classes-defining-color-property-being-set-by-declaration – Harry

+0

Вы отвечаете на свой вопрос: 'class добавлен в ** последний ** имеет ** наивысший приоритет ** '- ваш последний класс' .myStyle', поэтому ... – somethinghere

+0

Я хочу сказать, что во время использования имени класса, такого как this '

' @somethinghere –

ответ

5

Ваш div красный вместо синего из-за вашего стиля заказа декларации:

.hello { 
    background-color: blue; 
} 

.mystyle { 
    background-color: red; 
} 

CSS специфичность не зависит от порядка, в котором вы применить класс к элементу, а порядок, в котором вы объявляете класс в стиле. В этом случае вы объявили .hello, затем .mystyle, что означает, что .mystyle имеет высокую специфичность по сравнению с .hello и, следовательно, вы получаете красный фон.

+0

Хороший ответ, вы подняли на путаницу, что порядок классов, определенный в HTML, не имеет ничего общего с их значением. Я пропустил это! – somethinghere

+0

Отличный ответ, что среднее объявление классов в HTML не имеет значения? не могли бы вы предоставить любую ссылку, где упоминалось обо всем этом? –

+0

На самом деле нет ссылки, опровергающей это, но начните с чтения CSS-селекторов (https://developer.mozilla.org/en/docs/Web/Guide/CSS/Getting_started/Selectors) и просто имейте в виду что CSS - это документ, определяющий макет. Причина в том, что он отделяет ваш код, поэтому, если вы хотите сделать другой класс более заметным в будущем, вам нужно только изменить свой CSS-файл, а не как JS добавляет его везде или где HTML объявил его. – somethinghere

1

Это проблема иерархии:

function myFunction() { 
 
    document.getElementById("myDIV").classList.add("mystyle","hello", "red-background"); 
 
}
#myDIV.hello{ 
 
background-color: blue; 
 
} 
 
.mystyle { 
 
    background-color: red; 
 
} 
 
.mystyle { 
 
    width: 300px; 
 
    height: 50px; 
 
    background-color: red; 
 
    color: white; 
 
    font-size: 25px; 
 
}
<p>Click the button to add the "mystyle" class to DIV.</p> 
 

 
<button onclick="myFunction()">Try it</button> 
 

 
<p><strong>Note:</strong> The classList property is not supported in Internet Explorer 9 and earlier versions.</p> 
 

 
<div id="myDIV"> 
 
I am a DIV element 
 
</div>

+0

как сказано в примечании @somethinghere в комментариях 'Объявление классов в HTML не связано с их значением или когда они были добавлены, все они оцениваются на основе правил в CSS, а не правил в HTML', чем почему ваш div вместо синего цвета из res, потому что красный определяется после синего цвета в css? что тут происходит ? –

+0

Я сделал скрипку, здесь вы можете найти все объяснения: https://fiddle.jshell.net/zd8mzxg3/4/ –

1

потому, что переводчик в первый класс чтения .hello то класс .myStyle ... , что деление с оба класса ... Когда ваши классы были добавлены приоритет .myStyle класса вверх от .hello ...

<style> 
    .mystyle { 
     background-color: red; 
    } 
    .hello{ 
     background-color: blue; 
    } 

</style> 

here you can see working example

+0

уже ответил тем же контентом, все еще спасибо за ответ –

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