2015-08-26 3 views
0

У меня есть следующий код.nth-of-type не работает должным образом

div img:nth-of-type(2n) { 
 
    float: left; 
 
} 
 

 
div img:nth-of-type(2n+1) { 
 
    float: right; 
 
}
<div> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
</div>

Мне нужно установить поплавок: левый для четных изображений и плавать: право на нечетной. Но в обоих случаях запускается второе css-правило. Помоги мне, пожалуйста.

+0

Есть ли причина, вы не используете п-о-типа (нечетного) и п-м-о-типа (даже)? – gview

+0

К сожалению нет –

+0

'div img: nth-of-type (2n)' означает, что выберите те элементы 'img', которые являются 2-м, 4-м, 6-м ... потомком своего родителя, который в этом случае является' p' и дочерним или внук 'div' и как' img' всегда является 1-м и единственным ребенком 'p', поэтому применяется только второе правило – Flake

ответ

1

Вам нужно будет использовать селектор :nth-of-type на теге p.

Проблема заключается в том, что элемент абзаца является непосредственным дочерним элементом div. Изображение вложено внутри тега абзаца, а не сразу дочерних элементов div. Поэтому он не будет принимать div как своего родителя.


v1 вопроса

div p:nth-of-type(2n) img { /* Select all even */ 
 
    float: left; 
 
} 
 
div p:nth-of-type(2n+1) img { /* Select all odd */ 
 
    float: right; 
 
}
<div> 
 
    <p>...</p> 
 
    ... 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    ... 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    ... 
 
    <p> 
 
    <img src="http://placehold.it/20x20"> 
 
    </p> 
 
    ... 
 
</div>


v2 вопроса

div p:nth-of-type(4n+2) img { /* Select 2,6,10 */ 
 
    float: left; 
 
} 
 
div p:nth-of-type(4n) img { /* Select 4,8 */ 
 
    float: right; 
 
}
<div> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="1"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="2"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="3"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="1"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="2"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
    <p> 
 
    <img src="http://placehold.it/20x20" alt="3"> 
 
    </p> 
 
    <p>Some random text.</p> 
 
</div>

+0

. Свойства должны действовать только на изображениях, потому что между ними может быть' p' с любым другим текст. В вашем случае код работает только в том случае, если изображения находятся в строке. –

+0

В этом ответе свойство будет действовать только на изображения. Он не нацелен на 'p', а' img' внутри 'p'. Я не уверен, что вы имели в виду под «row». Проверьте это: http://nthmaster.com/ –

+0

Сравните эти две версии: 1. http://jsfiddle.net/L7x1t791/4/ - он работает правильно 2. http://jsfiddle.net/L7x1t791/ 5/- он не работает должным образом –

0

Почему нет:

div img:nth-of-type(odd) { 
    float: left; 
} 

div img:nth-of-type(even) { 
    float: right; 
} 
+0

Извините, но это не сработает: http://jsfiddle.net/Manojkr/kf4um7y4/ и 2n, 2n + 1 эквивалентны четному и нечетному. –

+0

Имеет ли это значение? –

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