!important
어쨌든 본질적으로 성능을 방해하는 것을 예측할 수는 없습니다 . 그러나 CSS가에 수수께끼로 !important
표시되어 있으면 셀렉터의 자격을 초과하여 너무 구체적이고 부모 또는 한정자가 부족하여 특이성을 추가했음을 나타냅니다. 결과적으로 CSS가 부풀어지고 ( 성능 을 방해 할 수 있음) 유지 관리가 어려워집니다.
효율적인 CSS를 작성하려면 모듈 식 CSS를 작성하는 데 필요한 만큼만 구체적으로 작성하십시오 . ID (해시 포함), 체인 선택기 또는 적격 선택기를 사용하지 않는 것이 좋습니다.
#
CSS에 접두사가 붙은 ID 는 255 개의 클래스가 ID를 재정의하지 않는 지점 ( @Faust로 바이올린)에 따라 매우 구체적 입니다. ID에는 더 깊은 라우팅 문제가 있지만 고유해야합니다. 즉, 중복 스타일에 재사용 할 수 없으므로 반복 스타일로 선형 CSS를 작성하게됩니다. 이 작업을 수행하면 규모에 따라 프로젝트마다 프로젝트가 달라 지지만 유지 관리성에 막대한 영향을 미치며 성능도 저하됩니다.
어떻게없이 특이성을 추가 할 수 있습니다 !important
, 체인 자격 또는 ID를, (즉 #
)
HTML
<div class="eg1-foo">
<p class="eg1-bar">foobar</p>
</div>
<div id="eg2-foo">
<p id="eg2-bar">foobar</p>
</div>
<div class="eg3-foo">
<p class="eg3-foo">foobar</p>
</div>
CSS
.eg1-foo {
color: blue;
}
.eg1-bar {
color: red;
}
[id='eg2-foo'] {
color: blue;
}
[id='eg2-bar'] {
color: red;
}
.eg3-foo {
color: blue;
}
.eg3-foo.eg3-foo {
color: red;
}
JSFiddle
좋아, 어떻게 작동합니까?
첫 번째와 두 번째 예제는 동일하게 작동하고 첫 번째 예제는 문자 그대로 클래스이고 두 번째 예제는 속성 선택기입니다. 클래스와 속성 선택기의 고유성은 동일합니다. 자체 규칙이 있기 때문에 .eg1/2-bar
색상을 상속하지 않습니다 .eg1/2-foo
.
세 번째 예는 한정자 또는 체인 선택기처럼 보이지만 둘 다 아닙니다. 체인은 선택자 앞에 부모, 조상 등을 붙일 때입니다. 이것은 특이성을 추가합니다. 한정은 비슷하지만 선택자가 적용 할 요소를 정의합니다. 자격 : ul.class
및 체인 :ul .class
이 기술을 무엇이라고할지 잘 모르겠지만이 동작은 의도적이며 W3C에 의해 문서화되어 있습니다.
동일한 단순 선택기의 반복 발생이 허용되며 특이성이 증가합니다.
두 규칙 간의 특이성이 동일하면 어떻게됩니까?
으로 @BoltClock 지적 여러 있다면,하세요 것을 다음 중요한 선언 사양 지시 대부분 특정의 일이 우선해야합니다.
아래의 예에서, 모두 .foo
와 .bar
동일한 특이성을 가지고 있으므로 마지막 규칙은 CSS 주장 우선 순위, 즉 선언함으로써 CSS의 계단식 자연에 대한 행동 fallsback .foo
.
HTML
<div>
<p class="foo bar">foobar</p>
</div>
CSS
.bar {
color: blue !important;
}
.foo {
color: red !important;
}
JSFiddle