2013-05-13 2 views
2

у меня есть это в моем файле SASS:: первый-ребенок влияет на других дочерних элементы

.buttons { 
    :first-child { 
     padding-top:7px; 
    } 
} 

HTML:

<div class="buttons"> 
    <div> 
    <label> 
     <input type="checkbox"> 
     bla blaa 
    </label> 
    </div> 
    <div> 
    <a class="advance">Step2</a> 
    <button class="btn">help <i class="arrow"></i></button> 
    </div> 
</div> 

Стрелки ребенок, страдающий от padding, хотя. Мне просто нужен первый ребенок внутри родителя .button.

Я также попытался это:

.buttons { 
    &:first-child { 
     padding-top:5px; 
    } 
} 

ответ

8

Ваше первое решение:

.buttons { 
    :first-child { 
     padding-top: 7px; 
    } 
} 

По существу превращается из этого правила:

.buttons *:first-child { padding-top: 7px; } 

Это будет иметь точно такой эффект, который вы описывая - каждый :first-child в иерархии под .buttons будет затронуто.

Ваше второе решение:

.buttons { 
    &:first-child { 
     padding-top: 5px; 
    } 
} 

Превращается из этого правила:

.buttons:first-child { padding-top: 5px; } 

Это будет влиять только .buttons себя, и только если это :first-child в пределах его родителей.

Что я думаю вы ищете:

.buttons > *:first-child { padding-top: 5px; } 

Это будет влиять на первый элемент, независимо от типа, который существует в .buttons.

+0

.buttons> *: first-child {padding-top: 5px; } Это вызывает ошибку рендеринга – Chapsterj

+0

Прошу прощения, Трой, что я виноват, я добавил что-то еще, что вызывало ошибку. Это сработало спасибо. Можете ли вы объяснить, что> делает в sass Я никогда не использовал его раньше. Также я предполагаю, что * просто говорит любой тип элемента. поэтому я мог бы использовать> div: first-child {}, чтобы перейти к первому div внутри .buttons – Chapsterj

+0

Да, '*' в CSS означает «любой тип элемента». И '>' в CSS означает «прямой потомок». Другими словами, 'div> span' будет соответствовать'

this
', но не'

this

' –

Смежные вопросы