2010-03-20 10 views
5

Ho uno sfondo 700x300 che si ripete perfettamente all'interno del contenuto principale-div. Ora mi piacerebbe allegare un div al fondo del content-div, contenente un'immagine di sfondo diversa che non è ripetibile, collegando perfettamente con lo sfondo ripetibile sopra di esso. In sostanza, l'immagine non ripetibile apparirà come il pezzo finale dell'immagine ripetibile.Connessione di sfondi ripetibili e non ripetibili senza una giuntura

A causa della natura del motivo, a meno che non sia visibile l'intera altezza di 300 px dell'immagine di sfondo nell'ultima ripetizione del backround del content-div, lo sfondo nel div in basso non si collegherà perfettamente. Fondamentalmente, ho bisogno che l'altezza del div del contenuto sia un multiplo di 300 px in tutte le circostanze. Qual è un buon approccio a questo tipo di problema?

ho provato il ridimensionamento del contenuto cedola il caricamento della pagina, ma questo funziona solo fino a quando il contenuto div non contiene alcun ridimensionamento, contenuti dinamici, che non è il mio caso:

function adjustContentHeight() 
{ 
    // Setting content div's height to nearest upper multiple of column backgrounds height, 
    // forcing it not to be cut-off when repeated. 

    var contentBgHeight = 300; 
    var contentHeight = $("#content").height(); 
    var adjustedHeight = Math.ceil(contentHeight/contentBgHeight); 

    $("#content").height(adjustedHeight * contentBgHeight); 
} 

$(document).ready(adjustContentHeight); 

Quello che sto cercando è un modo per rispondere a un evento di ridimensionamento div, ma c'è doesn't seem to be such a thing. Inoltre, si supponga di non avere accesso al JS che controlla il ridimensionamento del contenuto nel content-div, sebbene questo sia potenzialmente un modo per risolvere il problema.

Un'altra soluzione potenziale che stavo pensando era quella di compensare l'immagine di sfondo nel div inferiore di una certa quantità a seconda dell'altezza del contenuto-div. Di nuovo, il pezzo mancante sembra essere la capacità di rispondere a un evento di ridimensionamento.

+2

semplicemente allineando l'immagine di sfondo a fondo il principale contenuto 'div' (al posto del suo superiore) non è un'opzione? –

+0

Sarebbe, ma ho intenzione di fare la stessa cosa in alto con un div superiore. Ho lasciato quella parte nella speranza di rendere la domanda più facile da capire. – Stiggler

risposta

1

Un altro approccio consiste nel calcolare lo stile background-position per i DIV in basso e in alto in base alle dimensioni del contenuto DIV. È possibile utilizzare posizioni negative per allineare il fondo di uno all'inizio di un altro.

Un altro approccio consiste nell'utilizzare un approccio DIV con livelli in cui il top, il contenuto e il fondo sono tutti figli di un DIV principale che contiene lo sfondo.

Il vantaggio di questi approcci è che non modifica il rendering naturale del contenuto DIV semplicemente per la gestione dello sfondo.

Esempio: http://bin.googlecode.com/svn/trunk/css/repeating-bg-content.html

+0

Grazie, ma non risolve il problema senza problemi. – Stiggler

+0

Lo fa sicuramente se posizioni correttamente la xey. Cioè, in base alla dimensione del div del contenuto, è possibile calcolare esattamente dove finisce lo sfondo e posizionare gli altri div per posizionare l'origine in modo che corrispondano esattamente. – nicerobot

+0

Ma cosa succede se il contenuto div è ridimensionato in modo dinamico? Si prega di fare riferimento alla parte della mia domanda sotto il codice; Penso che tu possa averlo trascurato visto che propone già il tuo primo suggerimento, incluso ciò che è problematico con esso. – Stiggler

0

Potrebbe impostazione background-position: fixed nel vostro aiuto css? Quindi il tuo div bottom potrebbe muoversi, ma la sua immagine di sfondo rimarrebbe fissa rispetto alla parte superiore della pagina. Man mano che veniva rivelata la tua immagine ripetuta, più della tua immagine di fondo sarebbe stata nascosta.

Questo sarebbe sotto l'intestazione di "sfalsare l'immagine di sfondo nel div inferiore di una certa quantità a seconda dell'altezza del contenuto-div", piuttosto che "l'altezza del div del contenuto per essere un multiplo di 300 px in tutto circostanze".

+0

Scusa, ma non sono sicuro di capire come dovrebbe funzionare ... Intendi "background-attachment: fixed"? Come viene gradualmente nascosta l'immagine di sfondo di bottom-div? – Stiggler

+0

Hai ragione, volevo dire sfondo-allegato. Stavo pensando all'effetto dimostrato sugli elementi del menu apparentemente trasparenti in questa pagina: http://meyerweb.com/eric/css/edge/complexspiral/demo.html Pensandoci ora, però, non lo faccio Penso che funzionerebbe nella tua situazione. Stavo confondendo "scorrere" con "cambiare posizione rispetto ad altri contenuti". – bensaunders

0

Si potrebbe provare ad aggiungere un event listener al div:


     var div = document.getElementById("content"); 
     div.addEventListener("resize", adjustContentHeight, false); 
+0

Presumibilmente, l'evento di ridimensionamento non si applica alle div: http://stackoverflow.com/questions/229010/jquery-resize-not-working-at-firefox-chrome-and-safari – Stiggler

+0

Hmm. Beh, immagino sia quello che ottengo per aver creduto a w3schools invece di provarlo da solo. Hanno ridimensionato come si applica a tutti gli elementi HTML: http://www.w3schools.com/jsref/dom_obj_all.asp – Angie

0

Se non ha bisogno di abbinare al top, posizionare l'immagine ripetendo in fondo del div (in modo che il troppo pieno si riverserà sopra le righe). Come questo:

div#repeating { background: transparent url('/path/to/image') repeat left bottom; }

+0

Sì, ho appena visto il commento di Pekka sopra. Ci scusiamo per la duplicazione. – kingjeffrey

Problemi correlati