2014-12-05 2 views
3

나는이 기본 HTML 구조가 있습니다사용 ':: 후'즉시 형제와 선택 '+'선택

<div class="cotnainer"> 
    <div class="left"> 1 </div> 
    <div class="right"> 2 </div> 
    <div class="right"> 3 </div> 
    <div class="left"> 4 </div> 
    <div class="right"> 5 </div> 
    <!-- continuing on in a variable order --> 
</div> 

내가 클래스가 측면을 변경하기 전에 각 유형의 마지막 요소에 ::after 스타일을 적용 할 필요를 . 나는 위의 예에서 1, 3, 4에 스타일을 적용 할 필요가 즉

이러한 요소는 동적으로 생성됩니다

내가 좋아하는 CSS 선택기를 시도 :

.right + .right::after, .left + .left::after { ... } 
//this misses the individual elements 

.right::after, .left::after { ...apply style... } 
.right::after + .right, .left::after + .left { ...remove ::after style from preceeding elements... } 
//this was an attempt to remove the generally applied style from preceeding elements 


모든 도움, 아이디어 또는 제안에 감사드립니다.

편집 :이 질문은 나에게 문제가 남아있다으로 내가 더 원하는 결과를 달성하기 위해 솔루션과 아이디어를 요청하기 위해 현상금을 시작했다.

+0

참고 :'.left + left :: after'를 사용하면 다음과 같이 사용할 수 있습니다 :'.left + .left :: after' (누락 된 점) –

+0

'.left + '와 같이 사용할 수 없습니다. right :: before {}'? – Boris

+0

각 타입의 마지막 요소에':: after'을 적용하는 대신, 변경 후 첫 번째 것에':: before'을 적용 할 수 있습니까? –

답변

1

CS S는 이것을 할 수 없습니다. 적절한 해결책은 행을 그룹화하는 것입니다. 가능한 경우 상식 의미 론적 HTML을 사용하십시오.

ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style-type: none; 
 
} 
 
.left { 
 
    background: #6AF; 
 
} 
 
.right { 
 
    background: #6CF; 
 
} 
 
.left > li:last-child::after { 
 
    content: " (last child of .left)"; 
 
} 
 
.right > li:last-child::after { 
 
    content: " (last child of .right)"; 
 
}
<div class="cotnainer"> 
 
    <ul class="left"> 
 
    <li>1</li> 
 
    </ul> 
 
    <ul class="right"> 
 
    <li>2</li> 
 
    <li>3</li> 
 
    </ul> 
 
    <ul class="left"> 
 
    <li>4</li> 
 
    </ul> 
 
    <ul class="right"> 
 
    <li>5</li> 
 
    </ul> 
 
</div>
제가

상기 예에서 UL/리튬을 사용했지만 의미와 일치하는 요소가 더 있는지.

+0

OP가 요소를 그룹화 할 수 있으면 "마지막 그룹"요소에 추가 클래스를 쉽게 태그 할 수 있습니다. – hon2a

+0

아이디어는 CSS가 아닌 HTML로 원하는 결과를 얻는 것입니다. –

+0

당신의 솔루션은 HTML 구조를 변경하고 CSS를 제공합니다. 제공된 CSS가 없으면 "HTML 솔루션"이 실제로 아무 것도하지 않습니다. "last in group"요소에 추가 클래스를 추가하는 것은 HTML 구조 + CSS를 변경하는 것입니다. 그러나 후자의 경우 HTML 조정과 필수 CSS 모두가 더 작습니다. – hon2a

1

불행히도 CSS는 "마지막 클래스"를 선택하는 방법을 제공하지 않습니다. :: after를 사용하여 대상에 특정 클래스를 적용하거나 일부 JavaScript를 사용하여 선택을 수행 할 수 있습니다.

+0

나는 선택을 처리하기 위해 자바 스크립트를 사용해야 할 것 같았습니다. 감사. – JRulle

+0

@ AlexanderO'Mara 최후 형 의사 셀렉터는 클래스가 아닌 요소 (태그) 만 선택할 수 있습니다. –

0

내가 아는 한, 나는 당신이 CSS만으로 이것을 할 수 있다고 생각지 않는다. 보리스처럼 보입니다.

.left + .right, 
.right + .left { 
    color:red; 
} 

아마도 그렇게 할 수 있습니다. 매일 새로운 것을 배웁니다!


당신은 같은 것을 함께하지만, jQuery를 함께 할 수있다 :

JQuery와 여기

var lastElemHasClassLeft = false; 
    $('.cotnainer > div').each(function(key, val) { 
    if (lastElemHasClassLeft != $(this).hasClass('left')) { 
     $(this).addClass('change'); 
    } 
    lastElemHasClassLeft = $(this).hasClass('left'); 
}); 

CSS

.change::after { 
    content: 'hello'; 
} 

바이올린 : http://jsfiddle.net/2hxxhumq/