다른 CSS 클래스를 사용하여 CSS 클래스의 속성을 재정의하는 방법


95

저는 CSS3를 처음 접했으며 다음을 수행 할 수 있기를 원합니다.

요소에 클래스를 추가하면이 특정 요소에 사용 된 다른 클래스의 속성이 무시됩니다.

내가 가지고 있다고하자

<a class="left carousel-control" href="#carousel" data-slide="prev">

클래스 bakground-none의 기본 배경을 재정의 하는 클래스를 추가 할 수 있기를 원합니다 left.

감사!

답변:


90

속성을 재정의하는 방법에는 여러 가지가 있습니다. 당신이 가지고 있다고 가정

.left { background: blue }

예를 들어 다음 중 하나가이를 재정의합니다.

a.background-none { background: none; }
body .background-none { background: none; }
.background-none { background: none !important; }

처음 두 개는 선택자 특이성에 의해 "승리"합니다. 세 번째 !important는 뭉툭한 악기로 이깁니다 .

스타일 시트를 구성하여 예를 들어 규칙

.background-none { background: none; }

있는 것만으로 즉 순서에 의해 승리 달리 똑같이 "강력한"규칙입니다. 그러나 이것은 제한을 부과하고 스타일 시트를 재구성 할 때주의해야합니다.

이것들은 모두 중요하지만 널리 오해되고있는 개념 인 CSS Cascade의 예입니다 . 스타일 시트 규칙 간의 충돌을 해결하기위한 정확한 규칙을 정의합니다.

PS 내가 사용 left했고 background-none질문에 사용되었습니다. 구조적 또는 의미 론적 역할이 아닌 특정 렌더링을 반영하므로 사용 해서는 안되는 클래스 이름의 예입니다 .


당신이 쓴 그들이 특정 렌더링이 아니라 구조적 또는 의미 론적 역할을 반영하기 때문에 그들은, 사용하지 않아야 클래스 이름의 예입니다. 자세히 설명해 주시겠습니까? 왜 피해야 left하고 background-none피해야합니까?
Socrates

1
@Socrates : 일부 사람들은 CSS 클래스 만이 적용되고있는 요소 (예를 들어, 또는 무엇을 식별하는 이름을 부여해야한다고 생각 button, name-label등). 다른 사람들은이 방법을 사용하여 클래스 속성 값 (예에 해당 위치를 "유틸리티 우선"또는 "기능"CSS를 사용하는 경우는 그 CSS가 관리하기 어려운되고 기분 margin-top-4, width-10등). 역사적으로 "의미 적"접근 방식이 우세한 반면 최근에는 "기능적"접근 방식이 지지자를 얻고 있습니다. 중간 크기의 프로젝트에서 두 가지를 모두 시도한 다음 어느 것이 더 우수한지 스스로 결정하십시오.
Mattia


25

important키워드 대신 선택기를 더 구체적으로 만들 수 있습니다. 예를 들면 다음과 같습니다.

.left.background-none { background:none; }

(참고 : 클래스 이름 사이에는 공백이 없습니다.)

이 경우 규칙은 순서 또는 근접성에 관계없이 클래스 속성에 .left및 둘 다 .background-none나열 될 때 적용됩니다 .


25

스타일의 특이성 을 높여 재정의해야 합니다. 특이성을 높이는 방법에는 여러 가지가 있습니다. !important어떤 효과 특이성을 사용 하는 것은 스타일 시트에서 자연스러운 계단식을 깨뜨리기 때문에 나쁜 습관 입니다.

css-tricks.com 에서 가져온 다음 다이어그램 은 포인트 구조를 기반으로 요소에 대한 올바른 특이성을 생성하는 데 도움이됩니다. 더 높은 점수를 가진 특이성이 승리합니다. 게임처럼 들리지 않습니까?

여기에 이미지 설명 입력

css-tricks.com 에서 샘플 계산을 확인하세요 . 이것은 개념을 아주 잘 이해하는 데 도움이되며 2 분 밖에 걸리지 않습니다.

다른 특이성을 직접 생성 및 / 또는 비교 하려면 https://specificity.keegan.st/의 특이성 계산기를 사용하거나 전통적인 종이 / 연필을 사용할 수 있습니다.

자세한 내용은 MDN Web Docs를 참조하십시오 .

사용하지 않는 것이 가장 좋습니다 !important.


9

bakground-none다른 클래스 다음에 클래스 를 나열하면 해당 속성이 이미 설정된 속성을 재정의합니다. !important여기서는 사용할 필요가 없습니다 .

예를 들면 :

.red { background-color: red; }
.background-none { background: none; }

<a class="red background-none" href="#carousel">...</a>

링크에는 빨간색 배경이 없습니다. 이는 덜 또는 동등하게 구체적인 선택기가있는 속성 만 재정의합니다.


답장을 보내 주셔서 감사합니다! 나는 이것을 첫 번째 해결책으로 시도했지만 어떤 이유로 작동하지 않았습니다!
user3075049 2014 년

스타일이 .form-horizontal .form-group {margin-left : -15px}와 같은 특정 방식으로 정의 된 경우 CSS 클래스를 재정의하는이 방법은 작동하지 않습니다. 여기 사용해야합니다 중요!
DanKodi

.background-none에! important 추가 {background : none! importatn; } 이것은 잘 작동합니다
santhosh

1

LIFO는 브라우저가 CSS 속성을 구문 분석하는 방법입니다. Sass를 사용하는 경우 다음과 같은 변수를 선언합니다.

"$ header-background : 빨간색;"

빨강 또는 파랑과 같은 값을 직접 할당하는 대신 사용하십시오. 재정의하려면 값을 다음에 다시 할당하십시오.

"$ header-background : blue"

그때

background-color : $ header-background;

부드럽게 재정의해야합니다. "! important"를 사용하는 것이 항상 올바른 선택은 아닙니다 .. 그냥 핫픽스 일뿐입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.