(CSS)! important에 대해 알아보기

CSS(Cascading Style Sheets)

  • HTML 요소는 하나 이상의 스타일의 영향을 받을 수 있는 대문에 적용할 스타일에 대한 우선순위를 결정해야 합니다.
    (이것을 캐스케이딩이라고 한다.
    )

Cascading

  • CSS Cascading은 CSS가 요소에 적용하는 스타일의 우선 순위를 결정하는 데 사용하는 알고리즘
  • CSS Cascade는 어떤 스타일을 적용할지를 결정하기 위해 몇 가지 기준을 고려합니다.
    그 기준은 다음과 같습니다.
  1. Relevance
  2. Origin and Importance
  3. Specificity(특이성)
  4. Order of Apperance(작성 순서)
  • 일반적으로 CSS를 만들 때 3번과 4번을 신중하게 고려해야 합니다.
  • !
    important는 두 번 고려하는 순서와 관련이 있습니다.

자세한 내용은 아래 링크를 참조하십시오.

Introducing the CSS Cascade – CSS: Cascading Style Sheets | MDN

!
important란?

css 적용시, !
important 가 붙으면 Cascading 선택할 때 우선순위에 둔다.

!
important 가 붙은 스타일은 important 선언으로 해, 그 외의 스타일은 normal 선언이라고 한다.

p {
  color: red !
important; } p { color: blue; }

위의 예에 이런 식으로 important 선언을 적용하면 p 태그에는 빨간색이 적용됩니다.

!
importnant 가 붙으면(자), Cascade 는 기준의 2 번째의 기준인 Origin 기준을 평가할 때, 다음의 순서로 평가한다.

  1. Transition
  2. Important User-Agent
  3. Important User
  4. Important Author
  5. 애니메이션
  6. 작성자
  7. 사용자
  8. User-Agent

보면 !
important가 선언되었지만 Cascade에서 가중치가 증가하고 우선 순위가 반전되는 것을 확인할 수 있습니다.

!
important 작성해야합니까?

  • !
    important는 가능한 한 사용하기 어렵다.
    important 선언은 다시 스타일을 덮어쓰기 위해서도 important 선언을 사용해야 하기 때문에 important 수가 점점 늘어날 수 있기 때문이다.
  • !
    important 를 사용하는 경우에는, 재정의하지 않게 주석을 붙이는 것이 좋다고 한다.

그래도 사용하는 경우?

1. 기존 스타일을 변경할 수 없는 상태에서 새 스타일을 덮어써야 할 때

  • 어쨌든 Cascading의 순서를 잘 고려하여 스타일을 적용하는 것이 가장 좋지만 이전 코드를 수정하는 것은 어려운 상황이있을 수 있습니다.
  • 그럴 때 important 선언을 사용할 수 있다.
    그러나 앞서 언급했듯이 가능한 한 적게 사용하는 것이 좋습니다.
    Important를 다시 Important로 덮어 쓰는 상황은 가능한 한 피하는 것이 좋습니다.

2. utility class

  • 버튼을 예로 들어 보겠습니다.
<!
DOCTYPE html> <html> <head> <title>Title of the Document</title> <style> .button { background: #1c87c9; color: white; font-weight: bold; padding: 5px; border-radius: 4px; border: 1px solid #666; text-decoration: none; } </style> </head> <body> <a href="#" class="button">BUTTON</a> </body> </html>

  • 위와 같이 버튼의 스타일을 한 번에 지정해 두고, 어느 요소를 배치해도 같은 스타일이 나오게 하는 경우를 예로 들어 보면, 이하와 같이 보다 높은 특이성을 가지는 스타일이 있을 때에 문제가 있을 수 있습니다.

<!
DOCTYPE html> <html> <head> <title>Title of the Document</title> <style> #mybutton a { border-bottom: 3px dashed #8ebf42; } .button { background: #1c87c9; color: white; font-weight: bold; padding: 5px; border-radius: 4px; border: 3px solid #666; text-decoration: none; } </style> </head> <body> <section id="mybutton"> <p>This is a <a href="#" class="button">BUTTON</a> </p> </section> </body> </html> 직접 해보기 »

  • button 클래스를 가지는 요소라면, 반드시 같은 스타일을 적용하고 싶은 경우는!
    important 를 사용할 수 있습니다.

<!
DOCTYPE html> <html> <head> <title>Title of the Document</title> <style> #mybutton a { border-bottom: 3px dashed #8ebf42; } .button { background: #1c87c9; color: white; font-weight: bold; padding: 5px; border-radius: 4px; border: 3px solid #666 !
important; text-decoration: none; } </style> </head> <body> <section id="mybutton"> <p>This is a <a href="#" class="button">BUTTON</a> </p> </section> </body> </html>

3. 사용자 스타일 시트

  • !
    important는 원래 거의 사용자 스타일 시트를 위해 사용되었다고 한다.
  • 사용자 스타일시트는 사용자가 직접 스타일링하여 방문하는 모든 페이지에 적용하도록 웹 브라우저에 지시합니다.
  • 주석을 숨기거나 광고를 숨기거나 글꼴을 올리는 등 사용자 본인이 좋아하는 스타일을 어느 정도 바꿀 수 있다.
  • 그래서 지금은 사용자 스타일 시트를 거의 사용하지 않으므로 큰 의미가없는 것 같습니다.
    (Chrome은 사용자 스타일 시트를 사용하기 위해 확장 기능이 필요하며 Firefox는 개발자 도구에서 옵션을 사용 설정하면 사용할 수 있습니다.
    Safari는 간단히 사용할 수 있습니다.
    )