한 태그에 대한 선택기 바로 뒤에 다른 태그


88

<B>태그 바로 앞에 오는 모든 태그를 선택 <A>합니다.

A+B {
    /* styling */
}

모든 선택기 무엇 <A>직접 태그 다음 에 의해 <B>태그는?

내 질문에 맞는 샘플 HTML은 다음과 같습니다.

<a>some text</a>
<b>some text</b>

3
피스는 우리에게 어떻게 DOM 예제 제공 AB관련됩니다.
Gumbo

2
그들은 형제이고 B 뒤에 A가 있다는 점에서 관련이 있습니다. OP는 바로 앞에 오는 모든를 선택할 수 있는 곳 과 유사하게 s b다음에 오는 모든 s 를 선택하려고합니다 . aa+bba
안토니

2.5 년 후,이 답변에 대한 업데이트가 있습니까? 나는 또한 대상 a와 b를 찾고 있습니다.
chovy

답변:


29

CSS에서는 할 수 없습니다.

편집 : 좀 더 도움이되도록 jQuery (JavaScript 라이브러리)를 사용하는 경우 .prev().


그것은 유일한 솔루션의 사용 자바 스크립트 솔기
모스 타파 Farghaly

2
제로 엔 감사합니다! 내 문제가 해결되었습니다. 내 "A"가 왼쪽과 "B"가 바로 수레 수레 때문에, 내가 마크 업을 넣어 주문 중요하지 않았다.
BobRodes

53

내부에 직접 B 요소가 있거나 뒤에 B 요소가 있다는 점을 감안할 때 스타일 A를 의미합니까? 이렇게 :

<A>
    <B>
    </B>
</A>

// OR

<A>
</A>
<B>
</B>

CSS에서는 (아직) 그런 일을 할 수 없습니다. Eric Meyer는 이러한 종류의 선택자가 CSS 메일 링리스트에서 꽤 많이 논의되었으며 실행 불가능하다고 말합니다. 핵심 WebKit 개발자 중 한 명인 Dave Hyatt는 이것이 불가능한 이유에 대한 좋은 설명과 함께 논평합니다.

확인 : Shaun Inman의 블로그 게시물Eric Meyer댓글 .
David Hyatt 도.


내가 두 번째 의미, 내가 문제를 이해 : 당신에게 닉 감사합니다
모스 타파 Farghaly

17

반대로 만 수행 할 수 있습니다. 이렇게하면 태그 바로 앞에 오는 모든 태그가 선택됩니다.

이것은 논리적으로 귀하의 요청과 동일합니다.

라벨이있는 여러 체크 박스 행의 스타일을 지정하는 데 자주 사용합니다.

CSS :

label+input {
    margin-left: 4px;
}

DOM :

<input id="a" name="a" type="checkbox"/><label for="a">...</label>
<input id="b" name="b" type="checkbox"/><label for="b">...</label>
<input id="c" name="c" type="checkbox"/><label for="c">...</label>

3
CSS에 "input + label"을 입력하여 margin-left가 레이블에 적용되도록 의도 한 것 같습니다.
CAK2

1
@ CAK2-그가 옳은 의미라고 생각합니다. 이렇게 하면 두 번째 요소 부터label+input 모든 input요소에 여백이 적용됩니다 . 그것은 그들 사이에 공간을 만드는 창의적인 방법이지만 행의 시작이나 끝에서가 아닙니다. 이 경우 . input:not(:first-child)
David

1

그렇지 않은 매우 편리합니다하지만, 요즘 당신이 당신의 요소의 순서를 반대로하여이 동작을 달성 할 수 모두 당신이 HTML과 CSS 규칙을 적용하여를 생성 할 때 display: flexflex-direction: column-reverse

ul {
  display: flex;
  flex-direction: column-reverse;
}

.b ~ .a {
  color: red;
}
<ul>
    <li class="a">A 3</li>
    <li class="c">C 2</li>
    <li class="c">C 1</li>
    <li class="b">B 1</li>
    <li class="a">A 2</li>
    <li class="a">A 1</li>
</ul>

또한 2 개 이상의 인라인 요소 float: right가있는 경우 역순으로 표시 되므로을 적용하여 얻을 수 있습니다.

ul {
  float: left;
  list-style-type: none;
}

li {
  float: right;
}

li:not(:first-child) {
  margin-right: 20px;
}

.b ~ .a {
  color: red;
}
<ul>
    <li class="a">A 3</li>
    <li class="c">C 2</li>
    <li class="c">C 1</li>
    <li class="b">B 1</li>
    <li class="a">A 2</li>
    <li class="a">A 1</li>
</ul>

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