LESS의 직계 자식 선택기


112

어쨌든 출력에 직계 자식 선택기 (>)를 ​​덜 적용하게 할 수 있습니까?

내 style.less에서 다음과 같이 작성하고 싶습니다.

.panel {
    ...
    > .control {
        ...
    }
}

다음과 같은 것을 적게 생성하십시오.

.panel > .control { ... }


15
재미있게도 귀하의 질문에있는 스 니펫이 이미 정답이었습니다.
thirtydot 2011

@thirtydot 물론입니다. 작동하지 않는다는 점만 제외하면 ... 공백을 제거하거나 "&"를 추가하지 않으면 작동하지 않습니다. less.js를 사용하고 있습니다. 다른 파서에 대해서는 확실히 말할 수 없습니다.
Dave

2
난 그냥 그것을 테스트했습니다, 그리고 귀하의 질문에서 원래의 코드는 않습니다 less.js.에서 작업을 직접 확인 : jsfiddle.net/thirtydot/vcE8t
thirtydot 2011

1
네, 죄송합니다. 공간에서 매력적으로 작동합니다. 당신을 위해 +1. 어제 몇 시간 동안 어떻게 작동하지 않았는지 모르겠습니다. 그렇지 않으면 질문을 게시하지 않았을 것입니다.
Dave

답변:


144

최신 정보

실제로 원래 질문의 코드는 잘 작동합니다. >자식 선택기를 고수 할 수 있습니다 .


답을 찾았습니다.

.panel {
    ...
    >.control {
        ...
    }
}

">"와 "."사이에 공백이 없습니다. 그렇지 않으면 작동하지 않습니다.


4
특별히 문서화되어 있지 않는 한 거기 공간에서 작동하지 않으면 버그라고 의심하지 않습니다.
BoltClock

이것은 파서를 속이는 것입니다. 단일 선택기로 간주하므로 .panel >.control.
Ricardo Tomasi 2011

나는 그것을 버그 라기보다는 기능으로 받아 들인다. "&"가 아닌 이런 방식으로 사용하면 훨씬 더 일관성이 있습니다. 자식 클래스가 아닌 의사 클래스에만 "&"를 사용하면 더 명확한 코드라고 생각합니다.
Dave

1
CSS의 기능으로 div > pdiv>p. 일관성은 항상 선택자 사이에 공백을 사용합니다 (생성 된 CSS를 살펴보십시오).
Ricardo Tomasi 2011

네,하지만 & 사용의 일관성에 더 관심이있었습니다.
Dave

78

공식적인 방법 :

.panel {
  & > .control {
    ...
  }
}

& 항상 현재 선택기를 참조합니다.

http://lesscss.org/features/#features-overview-feature-nested-rules 참조


1
나는 이것이 또한 파서를 속이는 것이라고 생각합니다 (다른 답변에 대해 느꼈던 것처럼). 설명하겠습니다. 말했듯이 &는 항상 현재 (부모) 선택자를 참조합니다. 그래서 그 이후의 모든 것이 부모에게 적용 되어야 합니다 . 그리고 그것은 의사 클래스의 역할입니다. 직계 자식 클래스는 의사 클래스가 아닌 **** gasp **** 자식 클래스에 더 가깝습니다. 따라서>를 사용하는 것이 더 직관적이고 논리적입니다.
Dave

6
무엇이 더 정확하다고 생각하십니까? div > p또는 div >p? &콤비는 표준 방식이 아닌, LESS에 내 감정을 그것을 할 것입니다. 귀하의 설명은 정당합니다. 어떤 사람들은 CSS를 한 줄로 작성합니다 ...
Ricardo Tomasi 2011

대부분의 사람들은 LESS를 사용하므로 생성되는 실제 CSS에 대해 신경 쓸 필요가 없습니다. 어쨌든> 뒤에 공간을 사용할 수 있다는 것이 밝혀졌습니다. 그래서 &는 순전히 중복됩니다.
Dave

13

올바른 구문은 다음과 같으며 '&'를 사용하면 여기서 중복됩니다.

.panel{
   > .control{
   }
}

더 적은 지침 에 따르면 , '&'는 조상을 매개 변수화하는 데 사용됩니다 (그러나 여기에는 그러한 필요가 없습니다). 에서 이 덜 예를 들어 , & : 호버은 필수 끝난 : 호버 그렇지 않으면 구문 오류가 발생합니다. 그러나 여기에 '&'를 사용하는 데 필요한 구문은 없습니다. 그렇지 않으면 모든 중첩은 본질적으로 부모를 참조하므로 '&'가 필요합니다.


1
@JJF 대답이기 때문에 질문이 없습니까?
Bill Woodger 2015

0

더 많은 선택자를 대상으로해야하는 경우 :

.parent {
    >.first-child,
    >.second-child,
    >.third-child {
    ...
    }
}

-1

당신은 첫 번째로 첫 번째 자식 요소를 대상으로하는 경우 또한, <td>의를 <tr>, 다음과 같이 사용할 수 있습니다 :

tr {
    & > td:first-child {font-weight:bold;}
}

이것은 필요하지 않을 때 클래스 선언을 줄이는 데 도움이됩니다.

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