CSS 선택기에서 클래스와 ID를 결합하는 방법은 무엇입니까?


221

다음 div가있는 경우 :

<div class="sectionA" id="content">
    Lorem Ipsum...
</div>

" id='content'AND를 가진 div"라는 아이디어를 표현하는 스타일을 정의하는 방법이 class='myClass'있습니까?

또는 단순히 다음과 같이 한 가지 또는 다른 방법으로 가셨습니까?

<div class="content-sectionA">
    Lorem Ipsum...
</div>

또는

<div id="content-sectionA">
    Lorem Ipsum...
</div>

2
id로 선택하려는 경우 id도 고유하므로 하나의 요소 만 일치하므로 클래스별로 선택할 필요가 없습니다. 따라서 클래스를 동일한 선택기에 추가하면 추가로 입력하는 것입니다
TStamper

20
@TStamper : 반드시 그런 것은 아닙니다. 정적 문서 측면에서만 생각하고 있습니다. 예를 들어, img#Inbox페이지에 일반적으로 50 % 불투명도로 설정된 아이콘 이있을 수 있습니다 . 그러나 사용자에게 메시지가있는 경우 메시지를 100 % 불투명도로 설정하려고하면 백엔드 active에서 요소에 클래스를 추가하여이를 나타냅니다 . 이러한 시나리오에서는 ID와 클래스 이름을 모두 결합하는 선택기를 사용하는 것이 좋습니다.
Lèse majesté

@ TStamper : 또한 더 구체적인 id + class 콤보 선택기가 없으면 id 버전보다 더 많은 무게 / 우선 순위를 제공합니까? AFAIK입니다. (IOW, id + class 콤보 선택기의 규칙은 id 콤보 선택기의 규칙보다 우선합니다. (이것이 바로 지금이 스레드를 찾는 이유입니다.)
govinda

그래서 비슷한 상황에 처해 있습니다. 예를 들어 설명이 있지만 개별 제품에 대한 특정 제어를 원하는 많은 제품이 있으므로 code<p id = Product_1 class = Product> Product 1 </ p> <p id = Product_2 class = Product> Product 2 </ p> code 모든 제품의 일반적인 스타일링을 허용하지만 특정 제품의 개별 스타일링도 허용합니까?
Tamer Ziady

답변:


327

스타일 시트에서 :

div#content.myClass

편집 : 이것도 도움이 될 수 있습니다.

div#content.myClass.aSecondClass.aThirdClass /* Won't work in IE6, but valid */
div.firstClass.secondClass /* ditto */

그리고 당신의 예에 따라 :

div#content.sectionA

4 년 후 편집 : 이 기능은 매우 오래되어 사람들이 계속 찾아 냅니다. 선택기에서 tagNames를 사용 하지 마십시오 . tagName이 필요하지 않은 필터링 단계를 추가하기 때문에 #content.myClass보다 빠릅니다 div#content.myClass. 선택기에서만 tagNames를 사용해야합니다!


31
ID가 div에 속하도록 지정하면 ID가 이미 고유하므로 아무런 이점없이 렌더링 성능에 해를 끼칠 수 있습니다 (거의 무시할 수는 없지만). 대신 # content.myClass를 사용하여 정리했습니다.
mystrdat

3
div.class#id덜 권장되지만 동등해야합니다. 선택기의 고유 한 부분을 먼저 사용하십시오.
SF.

1
몇 년이 지난 후에도 노력해 주셔서 감사합니다. :). 여전히 나 같은 사람을 돕고 있습니다. 내 프로젝트에 사용했습니다. 확실하게 공감했다.
C4d

76

차이가 있습니다 #header .callout#header.calloutCSS에서이.

다음은 "일반 영어"입니다 #header .callout.
클래스 이름 callout이 ID 인 요소의 자손 인 모든 요소를 ​​선택하십시오 header.

그리고 #header.callout의미 :
ID header와 클래스 이름 을 가진 요소를 선택하십시오 callout.

CSS 트릭을 더 읽을 수 있습니다.


공백 으로이 실수를했습니다 : #id .class vs # id.class
ERJAN

5

하나의 요소에 ID와 클래스를 결합하는 데 아무런 문제가 없지만 하나의 규칙에 대해 둘 다로 식별 할 필요는 없습니다. 정말로 원한다면 할 수 있습니다 :

#content.sectionA{some rules}

div다른 사람들이 제안한 것처럼 ID 앞에는 필요하지 않습니다 .

일반적으로 해당 요소에 고유 한 CSS 규칙은 ID로 설정해야하며 규칙보다 클래스의 가중치가 더 높습니다. 클래스에 의해 지정된 규칙은 조정해야 할 때마다 여러 곳에서 변경하지 않으려는 여러 항목에 적용되는 속성입니다.

이것으로 요약됩니다.

 .sectionA{some general rules here}
 #content{specific rules, and overrides for things in .sectionA}

말이 되나요?


4

id는 항상 고유하기 때문에 일반적으로 id로 지정된 요소를 분류 할 필요는 없지만 실제로 필요한 경우 다음이 작동해야합니다.

div#content.sectionA {
    /* ... */
}

1

당신은 할 수 있습니다 CSS의 ID 및 클래스를 결합하지만 ID는 그래서 그것을 넘어서 자격을 것 CSS 셀렉터에 클래스를 추가, 고유하기위한 것입니다.


그건 좋은 지적이야. 아마도 당신이 매우 일반적인 클래스 세트 (float, height / width, 아마도 font와 같은 것들을 설정)를 가지고 있고이 독특한 예외에서 그것들을 무시하고 싶습니까?
ajm

5
다른 페이지에서 동일한 스타일 시트를 사용하지 않는 한. :-)
Patrick McElhaney 2016 년

5
또 다른 예 : 클래스가 자바 스크립트 (# optionalFields.enabled)로 동적으로 추가 된 경우
Patrick McElhaney 2016 년

페이지가 다른 동일한 스타일 시트를 사용하더라도 본문에 클래스를 배치하거나 ID에 하나의 스타일을 지정한 다음 클래스에 대한 클래스 정의를 적절한 대체 스타일로 분리하는 것이 좋습니다.
Eric Wendelin

네, 이렇게하는 것이 일반적이라고 생각합니다. 예 : li # SomeTab.state-selected
Yablargo

1

사용 : tag.id ; tag#class당신의 CSS에서 태그 변수.


1
나는 당신이 그것을 tag.class와 tag # id로 조금 섞어 놓았다고 생각한다.
Harijs Krūtainis

0

ID는 문서 전체에 걸쳐 고유해야하므로 둘 다를 기준으로 선택할 필요는 없습니다. 요소를 여러 클래스에 할당 할 수 있습니다.class="class1 class2"


1
수업은 변경 될 수 있습니다. 예를 들어 div # id.active 및 div # id.inactive를 가질 수 있습니다.
Daniel Moura

충분히 공정하고, 생각해 보니,이 기능을 사용했지만 원하는 동작이 무엇인지 오해했습니다.
벤 휴즈

0

나는 당신이 모두 틀렸다고 생각합니다. ID 대 클래스는 특이성의 문제가 아닙니다. 그것들은 완전히 다른 논리적 용도를 가지고 있습니다.

페이지의 특정 부분 (예 : 헤더, 탐색 모음, 주요 기사, 작성자 속성, 바닥 글)을 식별하려면 ID를 사용해야합니다.

페이지에 스타일을 적용하려면 클래스를 사용해야합니다. 일반 잡지 사이트가 있다고 가정 해 봅시다. 사이트의 모든 페이지에는 제목, 탐색 메뉴, 주요 기사, 사이드 바, 바닥 글과 같은 요소가 있습니다. 그러나 잡지에는 경제학, 스포츠, 엔터테인먼트 등 다양한 섹션이 있습니다. 당신은 세 부분이 서로 다른 외모를 갖기를 원합니다-경제학 보수적이며 정사각형, 스포츠 액션, 엔터테인먼트 밝고 젊음.

당신은 그것을 위해 수업을 사용합니다. # economics-article 및 # sports-article 및 # entertainment-article과 같은 여러 ID를 만들 필요는 없습니다. 말이되지 않습니다. 오히려 .economics, sports 및 .entertainment의 세 가지 클래스를 정의한 다음 각각에 대해 #nav, #article 및 #footer id를 정의하십시오.


언급 한 대부분의 요소에 대해 ID 대신 시맨틱 HTML 태그를 실제로 사용할 수 있습니다. 헤더, 바닥 글, 탐색 메뉴, 섹션 등 태그는 이유가 있습니다.
Walter Schwarz

그러나 실제로 고유 한 단일 요소 인 요소의 ID 만 사용해야합니다. 그러나 ID를 사용하면 CSS가 너무 구체적이어서 나중에 다른 CSS 및 / 또는 HTML과 병합하기가 어렵 기 때문에 JavaScript를 통해 해당 요소에 액세스 해야하는 경우에만 유용합니다. ID가 클래스보다 빠르다는 주장도 있지만 그 차이는 무시할 만하다.
Walter Schwarz

-1
.sectionA[id='content'] { color : red; }

doctype이 html 4.01 인 경우 작동하지 않습니다 ...

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