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.