Нужно чтобы один класс был в одной строке, второй класс во второй и т д. Причем классы могут быть разные, и их может быть много. Возможно, это можно сделать с помощью js, но пока ничего не приходит на ум.
ul li {
list-style: none;
float: left;
padding-right: 10px;
}
<ul>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="second">Второй класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс<li>
</ul>
Может сделать это через CSS float
+ clear
?
.first + .second,
.second + .third {
clear: left;
}
ul li {
float: left;
display: inline-block;
margin: 2px;
border: solid;
width: 100px;
text-align: center;
}
<ul>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="second">Второй класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс</li>
</ul>
А вот и вариант в котором css составлен автоматически:
document.write(`<style>${[...document.querySelectorAll('ul li')].reduce((acc, el) => {
return acc[acc.length-1] !== el.className && acc.push(el.className), acc
}, []).map((e,i,a) => `.${e} + .${a[i+1]}`).join(',')} {clear: left;}</style>`);
ul li {
float: left;
display: inline-block;
margin: 2px;
border: solid;
width: 100px;
text-align: center;
}
<ul>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="second">Второй класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс</li>
</ul>
Решение, уверен, что костыльное, но может за счёт него напишут вариант лучше.
let arrClass = $('ul > li').map(function(){return $(this).attr('class')}).get(); // собираем в массив все существующие классы li
arrClass = unique(arrClass); // перебираем классы, оставляя только "уникальные"
arrClass.forEach((e)=>{ // проходим циклом по всем "уникальным" классам
$('.'+e).wrapAll('<ul class="wrap_'+e+'">'); // оборачиваем эти классы
});
// функция для поиска "уникальных" классов
function unique(arr){
let obj = {};
for(let i = 0; i < arr.length; i++) {
let str = arr[i];
obj[str] = true;
}
return Object.keys(obj);
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
ul > ul::after {
content: '';
display: block;
clear: both;
}
ul > ul {
border-bottom: 1px solid #333;
padding-bottom: 5px;
margin-bottom: 5px;
}
ul > ul li {
float: left;
padding-right: 10px;
}
.wrap_first {color: blue;}
.wrap_second {color: red;}
.wrap_third {color: green;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="first">Один класс</li>
<li class="third">Третий класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="second">Второй класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс</li>
<li class="second">Второй класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
</ul>
Просто убери свойство float
в стилях:
ul li {
list-style: none;
/*float:left;*/
padding-right: 10px;
}
<ul>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="first">Один класс</li>
<li class="second">Второй класс</li>
<li class="second">Второй класс</li>
<li class="third">Третий класс
<li>
</ul>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задаю данный вопрос, так как пишут, что [] -не является псевдоложью,но ведь:
Как с помощью js сделать чтобы блок с классом item отображался только если в блоке с классом title было слово "Слово"? (по умолчанию стоит dispay:none,...
На acmpru я столкнулся с этой задачей: