селектор атрибута всегда будет меньше, чем конкретный селектор ID; его значение специфичности не изменяется в зависимости от имени атрибута. Селекторы отображают только определенные имена атрибутов для селекторов классов и идентификаторов; селектор атрибутов является общим понятием и не содержит таких отображений.
только способ для сложного селектора иметь спецификацию идентификатора, если он содержит один или несколько идентификаторов. Ограничения реализации в сторону, теоретически невозможно переопределить даже один селектор ID с любым количеством селекторов атрибутов или любым другим типом простого селектора.
Вот как ваши два селекторы сравнения:
/* 1 attribute, 2 types -> specificity = 0-1-2 */
html div[id^="blue"] {
background-color: blue
}
/* 1 ID -> specificity = 1-0-0 */
#blue4 {
background-color: red
}
Даже добавление html
не помогает, потому что это только селектор типа. Измените его на :root
, и вы получите псевдокласс, который в равной степени относится к селектору атрибутов, и, таким образом, все еще менее конкретный, чем идентификатор.
Это вопрос о том, как разработан CSS. [Селектор ID (#) имеет более высокую специфичность] (https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity), чем селектор классов и атрибутов. –
Итак, хотя он выбирает идентификаторы, на самом деле он не зачисляется как идентификатор? * И теперь я просматриваю вашу ссылку * –
'div [id^=" blue "]' является селектором атрибутов. вы также можете обращаться к '[data-something]' таким же образом. Также, если вы укажете идентификатор в своем примере, вы не используете выделенный селектор id. –