Question

I need to have images that extend along the left and right sides of my main body div (actually for a sort of drop-shadow effect under the div).

This would be simple if it wasn't for the fact that I want this div to be expandable, and I need it to work in IE7 and IE8, and I want it to extend to at least the bottom of the page.

I tried using polyfills to get CSS3 magic going but they weren't working either (I tried PIE and some filters without any luck).

I feel like I've tried everything...which brings me here! This is as far as I've gotten via just CSS/html, I feel like I should be able to get it to work but so far no cigar:

<div class="left-image">
<div class="right-image">
main body text
</div>
</div>

with the following css:

html,body{
    height: 100%
}
.left-image{
    background: transparent url('image/url.png') repeat-y top left;
    min-height: 100%; /*this alone works for making outer div extend browser & content height*/
    min-width: 960px;
    max-width: 1280px;
    margin: 0 auto;
}
.right-image{
    background:  transparent url('image/url.png') repeat-y top left;
    height: 100%; /*this only makes the div the height of its content*/
}

This results in the .left-image div filling the height of the browser window or the height of the content (whichever is larger), but the .right-image div only fitting the height of the content (so if the content is smaller than the browser window it won't fill it).

Any way around this? Just use jQuery?

Was it helpful?

Solution

This is a common problem without an easy solution. CSS3 will solve it but supporting older browsers means its not going to go away any time soon.

check out

http://www.alistapart.com/articles/fauxcolumns/

and see if this points you in the right direction. You basically need to fake it (faux columns) or use javascript as far as I am aware.

OTHER TIPS

One cheap solution I have used in the past has been to set the top and bottom posistions to zero.

.left-image{ 
  background: transparent url('image/url.png') repeat-y top left; 
  /*min-height: 100%;*/
  position: absolute;
  top: 0px;
  bottom: 0px;
  min-width: 960px; 
  max-width: 1280px; 
  margin: 0 auto; 
}
.right-image{ 
  background:  transparent url('image/url.png') repeat-y top left; 
  /*height: 100%;*/ 
  position: absolute;
  top: 0px;
  bottom: 0px;
}

You'd probably be better off using a background image - see http://jsfiddle.net/ZXpyT/ for an example. Note that this assumes the body content would be 960px wide; the idea would be to create an image (repeatable vertically) which replaces the current separate left / right images.

you can specify multiple backgrounds to your wrapper div instead of to the 2 divs, like this

.wrapper{
background: url('left.jpg'),url('right.jpg');
background-repeat: repeat-y, repeat-y;
height:100%;
}

sorry i missed the browser matrix you want to support... well here it goes..try this..this worked for me in all browsers

<html>
    <head>
        <title></title>
        <style type="text/css">
            .left-image{
                background:grey;
                min-height:100%;
                height:100%;
                width:100%;
                position:absolute;
            }
            .right-image{
                background:#eee;
                min-height:100%;
                height:100%;
                width:50%;
                margin:0 auto;
            }
        </style>
    </head>
    <body>
        <div class="left-image">
            <div class="right-image">
                main body text
            </div>
        </div>
    </body>
</html>

Why don't you give .left-image height:100%? Some browsers to get 100% browser width/height, you have to set every containing element to 100%.

How about height: inherit; ? It should take the parent tag's height as is.

You're using min-height on the left-image, why not on the right-image too?

I ended up using:

$(".left-image, .right-image").height($(document).height());

(I used it on document load, on window resize, and when ajax calls are made that might expand the page)

I think my new rule is going to be that if something takes me more than twenty minutes to figure out using css alone I'm going to go the simple way and use javascript/jquery...

There is a really easy fix. Add this to your css display: bock;

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top