Domyślnie h1 jest elementem blokowym i będzie renderował się w linii po pierwszym obrazku i spowoduje, że drugi obraz pojawi się w linii po bloku.
Aby temu zapobiec, możesz ustawić h1 tak, aby zachowywał się podczas przepływu:
#header > h1 { display: inline; }
Jeśli chodzi o absolutne pozycjonowanie obrazu wewnątrz div , musisz ustawić zawierający div, aby miał „znany rozmiar”, zanim to zadziała poprawnie. Z mojego doświadczenia wynika, że musisz także zmienić atrybut position na domyślny - position: relative działa dla mnie:
#header { position: relative; width: 20em; height: 20em; }
#img-for-abs-positioning { position: absolute; top: 0; left: 0; }
Jeśli możesz to zrobić, możesz spróbować stopniowo usuwać atrybuty wysokości, szerokości i pozycji z div.header, aby uzyskać minimalne wymagane atrybuty, aby uzyskać pożądany efekt.
AKTUALIZACJA:
Oto kompletny przykład, który działa w przeglądarce Firefox 3:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Example of vertical positioning inside a div</title>
<style type="text/css">
#header > h1 { display: inline; }
#header { border: solid 1px red;
position: relative; }
#img-for-abs-positioning { position: absolute;
bottom: -1em; right: 2em; }
</style>
</head>
<body>
<div id="header">
<img src="#" alt="Image 1" width="40" height="40" />
<h1>Header</h1>
<img src="#" alt="Image 2" width="40" height="40"
id="img-for-abs-positioning" />
</div>
</body>
</html>