This is a bug in opera 8.01.

The percentage height of an absolutely positioned block should be a percentage of it's containing block. The size of the containing block is established by it's nearest block level ancestor with a 'position' of 'absolute', 'relative' or 'fixed'.
CSS 2.1 Definition of "containing block"
CSS 2.1 'height' property

The css code:

div.bug {
        width: 300px;
        background-color: red;
        position: relative;     
        left: 100px; 
        top: 10px;
        border: 2px solid yellow;
}

div.correct {
        width: 300px;
        height: 200px;  
        background-color: red;
        position: relative;     
        left: 450px; 
        top: -194px;
        border: 2px solid yellow;
}

div.h {
        height: 200px;
}
         
div.l {
        width: 300px;
        height: 100%;   
        background-color: #00547F;
        position: absolute;     
        left: 0px; 
        top: 0px;
}
  

The first box displays incorrectly in opera - you should not see any red. The height of div.l (blue background) should be 100% of the height of div.bug (yellow border). The height of div.bug is because of it's content's height (div.h).

Opera sets the height of div.l to the height of it's content and not the height of it's containing block.

<div class="bug">
  <div class="h"></div>
  <div class="l">
    some content
  </div>
</div>
      
<div class="correct">
  <div class="h"></div>
  <div class="l">
    some content
  </div>
</div>    
      

this is how it should look

opera_css_bug.png

screenshot from opera 8.01 for linux