Лучший способ, о котором я могу подумать, - это добавить класс к выбранному li
и использовать псевдоселекторы CSS3 для применения и очистки поплавков в зависимости от положения.
например.
li.active ~ li:nth-of-type(1n+2) {
float: left
}
li.active ~ li:nth-of-type(1n+2):after {
content: '\0a00' // whitespace
width: 0;
height: 0;
line-height: 0;
clear: left;
}
Если вы с ними не сталкивались, я объясню селекторы.
/ the ~ ( tilde ) is an adjacent element selector, imagine the following html
<li></li>
<li></li>
<li class="active"></li>
<li></li>
<li></li>
And css
li.active ~ li {
background-color: green;
}
// the ~ would select all the li elements that come after the the occurence of
// .active element and apply a green background. illustrated below with an *
<li></li>
<li></li>
<li class="active"></li>
<li></li> *
<li></li> *
Селектор nth-of-type позволяет вам выбирать независимых элементов соответствующего элемента
using previous html
with this css
// the nth-of-type value can also be an equation e.g. 1n + 2
li:nth-of-type(2) {
background-color: green;
}
<li></li>
<li></li> *
<li class="active"></li>
<li></li>
<li></li>
Объединены вместе
li.active ~ li:nth-of-type(2) {
background-color: green;
}
<li></li>
<li></li>
<li class="active"></li>
<li></li>
<li></li> *
Это очень элегантное решение, для достижения желаемых результатов может потребоваться немало усилий, но у вас наверняка есть инструменты в CSS для этого.
Вот полный список селекторов CSS3 и того, что они делают.
http://www.w3.org/TR/css3-selectors/#selectors
Возможно, вам придется покопаться, чтобы найти примеры лучшего использования, чем те, которые приведены в документе, но, по крайней мере, вы будете знать, что искать.
Очевидно, что современные браузеры поддерживают это, но вы можете исправить поддержку IE с помощью
ie9.js
http://code.google.com/p/ie7-js/
Или, если это решение не понравится вам
Я настоятельно рекомендую предыдущее предложение кладки jQuery
http://masonry.desandro.com/