2016-05-18 13 views
7

Sto provando a creare un semplice creatore di collage usando jquery.jQuery: margine css basato sulla quantità di elementi nel contenitore?

quello che devo fare è avere un margine dell'1% tra ogni elemento (collage).

Ma allo stesso tempo ho bisogno che i collage abbiano 0 margine dal loro contenitore.

Spero che abbia senso.

Ho creato questo FIDDLE in modo da sapere cosa intendo.

quando si esegue il codice, è sufficiente fare clic sul pulsante 4 volte e si dovrebbe vedere i collage creati all'interno del contenitore perfettamente bene MA c'è un margine tra il loro contenitore e gli elementi figli che non è voluto.

C'è un modo per risolvere questo problema?

Questo è il mio codice:

$('#colBtn').live('click', function(){ 

    $('.lable').show(); 
    $('#reset').show(); 
    $('#fileField').show(); 
    $('#sbs').show(); 
    var width = $('#width').val(); 
    var height = $('#height').val(); 

    $('#main').append('<div class="droppable" style="width:'+width+';height:'+height+';overflow: hidden; position:relative;float:left; margin:1%;"></div>'); 


    $('#layout').text($('#main').html()); 
    return false; 
}); 

enter image description here

+0

Se c'è un margine all'interno del contenitore, il margine si trova sull'elemento figlio, non sul contenitore stesso. 'Padding' è ciò che influenza l'interno di un contenitore. –

+0

@GavinThomas, non ho alcun riempimento nel contenitore. Ho solo margine sui bambini. – Jackson

+0

È necessario verificare il numero di elementi su ogni riga spostata, quindi rimuovere il margine destro dall'ultimo * su ogni riga *. –

risposta

3

Quello che stai cercando è un margine negativo.

metti un altro div nel tuo #main div e dargli un margine negativo.

margin: 0 -1% 

In questo modo sarà come se non avesse alcun margine poiché avete

overflow: hidden 

insieme al contenitore principale.

Qualcosa di simile a questo: Fiddle

Spero che questo ti porta più vicino al tuo obiettivo;)

+0

Ah, vedo che non li avvolgi in file. –

+0

@ ŽanMarolt, no ... il motivo principale è che non riesco a deformarli in fila perché gli utenti potrebbero voler cambiare la larghezza e l'altezza di ogni collage! – Jackson

+0

Scusa ma questo è lontano da quello che sto cercando di fare! Il margine superiore del primo e del secondo elemento è persino più grande del mio stesso esempio. – Jackson

0

Con quanto sopra figura data. Il problema principale sembra capire quale sia il primo elemento e quale sia l'ultimo elemento di una riga. avere un numero dinamico di elementi in una riga.

Ho appena scoperto il primo elemento e l'ultimo elemento che è possibile utilizzare per regolare il margine.

function fix(){ 
var $item = $('.droppable'); 
var parentWidth = $item.parent().width(); 
var itemWidth = $item.outerWidth(true); 
var itemInLine = Math.floor(parentWidth/itemWidth); 
var totalItems = $item.length; 
var rows = totalItems/itemInLine; 

var lastItem = 0; 
var firstItem = 1; 
    for(var i = 1; i< rows + 1; i++){ 
    lastItem = i * itemInLine; 
    $('.droppable:nth-child('+ lastItem +')').css({'margin-top':'0px','margin-right':'0px'}); 
    firstItem = (i * itemInLine) - itemInLine + 1; 
    $('.droppable:nth-child('+ firstItem +')').css({'margin-top':'0px'}); 
    } 
} 
Problemi correlati