2013-03-28 32 views
0

我在整理股利(或多个)的一个问题,我有两种类型a, b排序的div

a - should always be at the front (all a types) 
b - should be following all a types. 

HTML:

<div class="" style=""> 
    <div class="a">a</div> 
    <div class="a">a</div> 
    <div class="b">b</div> 
    <div class="a">a</div> 
</div> 

CSS:

.a, .b { 
    display:inline-block; 
    width:50px; 
    height:50px; 
    padding:15px; 
    margin:5px; 
} 

.a { 
    float:left; 
    background-color: blue; 
} 

.b { background-color: red; } 

这似乎在一行罚款:

works fine as line

但休息为一个网格:

problme

期望的结果(箱数无关):

result

的jsfiddle:http://jsfiddle.net/kQkn9/

我会怎样去解决这个问题?

+0

我不明白你想要做什么。 – woz

+0

@woz更新的答案,也许你现在可以理解 – Kivylius

回答

6

如果您正在寻找纯CSS解决方案,则唯一的选择是使用Flexbox。

http://jsfiddle.net/kQkn9/2/

.container { /* parent element */ 
    display: -webkit-flexbox; 
    display: -ms-flexbox; 
    display: -webkit-flex; 
    -webkit-flex-wrap: wrap; 
    -ms-flex-wrap: wrap; 
    flex-wrap: wrap; 
} 
@supports (flex-wrap: wrap) { 
    .container { 
    display: flex; 
    } 
} 

.a, .b { 
    display: inline-block; 
    width: 50px; 
    height: 50px; 
    padding: 15px; 
    margin: 5px; 
} 

.a { 
    background-color: blue; 
} 

.b { 
    -webkit-flex-order: 1; 
    -ms-flex-order: 1; 
    -webkit-order: 1; 
    order: 1; 
    background-color: red; 
} 

浏览器支持:铬,歌剧,IE10。 http://caniuse.com/#feat=flexbox

+0

这是一个超酷的解决方案。无聊的浏览器支持并不是更好 – Brad

+0

如果你不需要你的元素来包装,你可以扩展浏览器对Firefox和Safari的支持:http://codepen.io/cimmanon/pen/htJqA – cimmanon

2

不相信只有CSS和HTML才有可能。我的建议是对a和b进行排序,而不用改变你的css,然后按照新的排序顺序将它们重新插入到DOM中。

东西,这个效果:(JQ中)

var listOfAs = $('.a').clone(); 
var listOfBs = $('.b').clone(); 
var parent = $('.a').first().parent('div'); 
$('.a, .b').remove(); 
parent.append(listOfAs); 
parent.append(listOfBs); 

我知道这是一个触摸麻烦,也不能超“响应”,但正如我所说的,不单单认为它可能与CSS ...这只是一个快速和肮脏的实施,让你开始。

PS:更新你的小提琴http://jsfiddle.net/kQkn9/6/

编辑:显然,这是在新的浏览器可能(感谢@cimmanon)。如果您需要支持旧浏览器,则必须执行此类操作(这绝对不会太酷)