2010-03-20 8 views
5

Tengo un fondo 700x300 que se repite perfectamente dentro del contenido principal div. Ahora me gustaría adjuntar un div en la parte inferior de content-div, que contiene una imagen de fondo diferente que no es repetible, que se conecta sin problemas con el fondo repetible que se encuentra encima. Esencialmente, la imagen no repetible se verá como la pieza final de la imagen repetible.Conexión de fondos repetibles y no repetibles sin una costura

Debido a la naturaleza del patrón, a menos que la altura completa de 300px de la imagen de fondo sea visible en la última repetición del fondo del contenido-div, el fondo en el siguiente divisor no se conectará a la perfección. Básicamente, necesito que la altura de div del contenido sea un múltiplo de 300 px en todas las circunstancias. ¿Cuál es un buen enfoque para este tipo de problema?

He intentado cambiar el tamaño del contenido-div sobre la carga de la página, pero esto sólo funciona siempre y cuando el div contenido no contiene ningún cambio de tamaño, contenido dinámico, que no es mi 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); 

Lo que estoy buscando es una forma de responder a un evento de cambio de tamaño de div, pero hay doesn't seem to be such a thing. Además, asuma que no tengo acceso a la JS que controla el cambio de tamaño del contenido en el contenido-div, aunque esta es potencialmente una forma de resolver el problema.

Otra posible solución que estaba pensando era compensar la imagen de fondo en la div inferior en una cierta cantidad dependiendo de la altura del contenido-div. De nuevo, la pieza faltante parece ser la capacidad de responder a un evento de cambio de tamaño.

+2

simplemente alineando la imagen de fondo a la parte inferior central de contenido 'div' (en lugar de su parte superior) no es una opción? –

+0

Sería, pero tengo la intención de hacer lo mismo en la parte superior con un div superior. Dejé esa parte con la esperanza de hacer la pregunta más fácil de entender. – Stiggler

Respuesta

1

Otro enfoque es calcular el estilo background-position para los DIV inferiores y superiores en función del tamaño del contenido DIV. Puede usar posiciones negativas para alinear la parte inferior de una con la parte superior de la otra.

Otro enfoque más es utilizar un enfoque DIV en capas en el que la parte superior, el contenido y el fondo son todos hijos de un DIV padre que contiene el fondo.

El beneficio de estos enfoques es que no cambia la representación natural del contenido DIV simplemente para gestionar el fondo.

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

+0

Gracias, pero no soluciona el problema. – Stiggler

+0

Lo más seguro es que coloque la xey adecuadamente. Es decir, en función del tamaño del contenido div, puede calcular exactamente dónde termina el fondo y colocar los otros div para colocar el origen de manera que coincidan exactamente. – nicerobot

+0

Pero, ¿y si el contenido div se cambia de tamaño de forma dinámica? Por favor refiérase a la parte de mi pregunta debajo del código; Creo que es posible que lo haya pasado por alto, ya que ya propone su primera sugerencia, incluido lo que es problemático con ella. – Stiggler

0

Podría establecer background-position: fixed en su ayuda css? Entonces su div inferior podría moverse, pero su imagen de fondo permanecería fija en relación con la parte superior de la página. A medida que se revela más de su imagen repetitiva, se ocultará más de su imagen inferior.

Esto vendría bajo el título de "compensar la imagen de fondo en la parte inferior div por una cierta cantidad dependiendo de la altura del contenido-div", en lugar de "la altura del contenido div ser un múltiplo de 300 px debajo de todo circunstancias".

+0

Lo siento, pero no estoy seguro de entender cómo se supone que funciona ... ¿Quiere decir 'background-attachment: fixed'? ¿Cómo se oculta gradualmente la imagen de fondo de div-bottom? – Stiggler

+0

Tienes razón, me refiero al archivo adjunto de fondo. Estaba pensando en el efecto demostrado en los elementos de menú aparentemente transparentes en esta página: http://meyerweb.com/eric/css/edge/complexspiral/demo.html Pensando en ello ahora, sin embargo, no No creo que funcione en tu situación. Estaba confundiendo "desplazamiento" con "cambio de posición en relación con otro contenido". – bensaunders

0

Usted podría intentar agregar un event listener a la div:


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

Supuestamente, el evento de cambio de tamaño no se aplica a los divs: http://stackoverflow.com/questions/229010/jquery-resize-not-working-at-firefox-chrome-and-safari – Stiggler

+0

Hmm. Bueno, supongo que eso es lo que obtengo por confiar en w3schools en lugar de probarlo yo mismo. Han cambiado de tamaño para aplicar a todos los elementos HTML: http://www.w3schools.com/jsref/dom_obj_all.asp – Angie

0

Si nada tiene que coincidir en la parte superior, la posición de la imagen de la repetición en la parte inferior de la div (por lo que el desbordamiento se derramará sobre la tapa) De esta manera:

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

+0

Sí, acabo de ver el comentario de Pekka anterior. Perdón por la duplicación. – kingjeffrey

Cuestiones relacionadas