In breve, le colonne CSS3 non sono la soluzione giusta per ciò che si sta tentando di fare. (Se ho capito bene, vuoi che l'elemento hovered abbia un overflow del suo contenitore genitore andando fuori dalla sua casella. Tuttavia, le colonne CSS3 sono progettate in modo tale che l'overflow continui nella parte superiore della colonna successiva, e non c'è modo che io sappia di cambiare questo comportamento).
Si consiglia di utilizzare un approccio diverso per ottenere l'interfaccia utente desiderata, ad esempio l'utilizzo di JQuery per inserire wrapper in ogni colonna.
Tuttavia, se si sta insieme sull'utilizzo di column-count, si può essere in grado di incidere facendo qualcosa di simile a questo:
JSFiddle:
http://jsfiddle.net/p6r9P/
CSS:
ol li:nth-child(5n) {
padding-bottom: 40px;
}
JQuery:
function togglePadding(li, status) {
var index = li.index();
var target = (index % 5 === 4) ? li : li.siblings().eq(index + 3 - (index % 5));
target.stop(true).animate({
"padding-bottom": (status === "on") ? "40px" : 0
});
}
$('a.song').each(function() {
var origwidth = $(this).width();
var origheight = $(this).height();
$(this).hover(function() {
togglePadding($(this).parent(), "off");
$(this).stop(true).animate({
width: origwidth * 2,
height: origheight * 2
})
}, function() {
$(this).stop(true).animate({
width: origwidth,
height: origheight
});
togglePadding($(this).parent(), "on");
});
$(this).clone(true).attr({
"class": "song-detail"
}).css({
"z-index": 1,
"background-color": "#CCC"
}).appendTo('ol').wrap("<li></li>");
});
Questa è solo una demo ruvida e avrebbe bisogno di essere ripulito per la produzione. Fondamentalmente la strategia è di aggiungere un "buffer" di 40px padding dopo ogni quinto elemento (la fine di una colonna). Quando un elemento è al passaggio del mouse, troviamo il fratello alla fine della sua colonna e ne anima il riempimento a 0.
Ma si può vedere che se si esegue il mouse su più elementi rapidamente in successione, a volte le scatole rabbrividiranno come una casella salta temporaneamente alla colonna successiva. Il conteggio di colonne CSS3 REALMENTE vuole bilanciare quelle colonne.
Quindi consiglierei di utilizzare un approccio diverso, ma sentitevi liberi di giocare con quello e vedere se riesci a farlo funzionare.
** EDIT: Un modo per farlo senza column-count **
Dal momento che si sta già utilizzando jQuery, si potrebbe avere avvolgere ogni X elementi in un <div class="col">
, e utilizzare tali div come le tue colonne.
JSFiddle:http://jsfiddle.net/QhTvH/
JQuery:
var container;
var i = 0;
var numCols = 5;
var colCount = Math.ceil($('.songs a').length/numCols);
$('.songs a').each(function() {
if (i % colCount === 0) {
container = $('<div class="col"></div>').appendTo(".songs");
}
$(this).appendTo(container);
i++;
});
CSS:
.songs .col {
max-width: 18%;
overflow: hidden;
display: inline-block;
vertical-align: top;
margin: 0 5px;
}
.songs a {
display: block;
margin: 10px 10px;
background-color: #EEE;
width: 200px;
height: 40px;
cursor: pointer;
text-overflow:ellipsis;
overflow: hidden;
white-space: nowrap;
}
HTML:
<section class="songs">
<a class="song" data-src="songs/Titanic.mp3" style="width: 187px;">Titanic</a>
<a class="song" data-src="songs/Titanic.mp3" style="width: 187px;">Titanic2</a>
etc...
</section>
Penso che sia il normale comportamento delle colonne: se il contenuto di una colonna è troppo alto, passa a quello successivo. –
devi usare il conteggio delle colonne? Potrebbe essere più facile farlo, per esempio, in un tavolo senza bordi. – pennstatephil
Ho trovato questo. Hai provato? [JSFIDDLE] (http://jsfiddle.net/yeshansachithak/Q97m4/). – yeshansachithak