Html 按类将项目分为2列

Html 按类将项目分为2列,html,css,flexbox,Html,Css,Flexbox,本质上,我想要一组元素(可以是一个列表,或下面的div),它们可以按任何顺序排列,但会根据它们的类自动移动到指定的列中。 例如,我的HTML可能是: <div class="left"></div> <div class="left"></div> <div class="right"></div> <div class="left"></div> <div class="left">&l

本质上,我想要一组元素(可以是一个列表,或下面的div),它们可以按任何顺序排列,但会根据它们的类自动移动到指定的列中。 例如,我的HTML可能是:

<div class="left"></div>
<div class="left"></div>
<div class="right"></div>
<div class="left"></div>
<div class="left"></div>
<div class="right"></div>
<div class="right"></div>
<div class="left"></div>
我希望能够实现附加图像的布局(元素将拉伸以适合其各自内容的高度):

显然,如果我只是将元素向左或向右浮动,它们将与前一个元素内联,而不管我要将其浮动到的“列”的高度如何

我考虑过flexbox,想知道您是否可以指定2列并将每个元素左对齐或右对齐,但我认为不可能指定单个项目的对齐方式


我得出的结论是,这是不可能的,除非使用javascript动态地将项目排序到列中(例如,类似于一个砌石算法),但我想我会在这里问这个问题,以防有人有任何建议。

使用jQuery可以很容易地实现这一点。 创建两个div“left”和“right” 然后根据其类附加到子div/元素

if ($( "#mydiv" ).hasClass( "left" )){
$("#mydiv").appendTo(".left-container");
}

为所有div使用公共类名称,并根据您的要求添加左右类

if( $('.parentDiv).hasClass('left') ) {
    $('.parentDiv).css("float", "left");             
} else {
    $('.parentDiv').css("float", "right");             
}

基本思想是使用
order
属性将“left”元素移到开头,将“right”元素移到结尾。然后我们在中间添加一个
断路器
元素,该元素的高度足以强制断路

.block{宽度:200px;边距:20px;}
.左{顺序:1;背景:粉红色;}
.right{顺序:3;背景:青色;}
.container{display:flex;flex direction:column;flex wrap:wrap;height:1000px;}
.breaker{顺序:2;弹性基础:100%;}

现在是所有好人的时候了。
益智。
所有人都必须清楚地认识到错误所在,并对所有人、所有人、所有发明人和准建筑师的身份进行确认
如果铜酸盐是非自愿的,同样也应该是出于对动物的同情,这是一种劳动和痛苦。哈勒姆酒店
Lorem ipsum dolor sit amet,献祭精英

请不要为没有标记的问题建议jQuery解决方案。我知道我可以用javascript实现这一点,但我希望有一个纯粹的CSS解决方案,谢谢。您可能需要提供一个片段来说明这一点。我认为这不管用,而且它使用的是javascript。而且,js似乎没有必要——您只是告诉具有left类的项向左浮动。为什么不在纯CSS中这样做呢?这非常有趣,谢谢!我一直在玩这个。我能看到的唯一缺点是容器必须有一个指定的高度,这意味着您需要事先知道内容的高度,或者用JS计算,对吗?
if( $('.parentDiv).hasClass('left') ) {
    $('.parentDiv).css("float", "left");             
} else {
    $('.parentDiv').css("float", "right");             
}