Hi,
Dann muss man also – wie ChrisB schon sagte – die Höhen der Elemente per JavaScript auslesen und dem Container die größte Höhe zuweisen.
Nein, muss man doch nicht - die zündende Idee hat nur etwas auf sich warten lassen.
Mir ist noch nichts eingefallen, wie man Übereinanderlegen und Höhe-des-Containers-Beeinflussen mit CSS allein unter einen Hut kriegt – jedenfalls nicht ohne zuätzliches Markup.
Elemente nicht „übereinander“ legen - sondern *neben*einander.
Das Containerelement bekommt eine feste Breite, und overflow:hidden.
Die einzelnen „Items“ bekommen die gleiche feste Breite - und visibility:hidden und ein negatives margin-left entsprechend der Breite, um sie „auszublenden“.
Zum Einblenden eines Items wird es dann auf visible gesetzt, und das margin auf 0.
Mal ein Beispiel, zugegeben nicht allzu “sophisticated”, aber es geht ja ums Prinzip. Das Einblenden wird hier immer noch über JavaScript gemacht - das stattdessen mit :hover und irgendeinem Selektor zu regeln, wird dem interessierten Mitleser überlassen. Wieder Ausblenden ist der Einfachheit halber auch nicht enthalten, aber man sieht ja am Initial-Zustand, dass die UL (roter Hintergrund) bereits die gewünschte Höhe hat.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
ul, li { margin:0; padding:0; }
ul { width:10em; background:red; overflow:hidden; }
li { display:inline-block; width:10em; vertical-align:top; margin-left:-10em; visibility:hidden; color:#fff; }
#item1 { background:green; }
#item2 { background:black; }
#item3 { background:blue; }
li.visible { visibility:visible; margin:0; }
span { background:#ccc; cursor:pointer; }
</style>
<script type="text/javascript">
<![CDATA[ */
function showItem(itemnumber) {
for(var i=1; i<4; ++i) {
document.getElementById("item"+i).className = itemnumber == i ? "visible" : "";
}
}
]]> */
</script>
</head>
<body>
<p>
<span onmouseover="showItem(1)">show item #1</span>
<span onmouseover="showItem(2)">show item #2</span>
<span onmouseover="showItem(3)">show item #3</span>
</p>
<ul>
<li id="item1">I'm short.</li><li id="item2">I'm a little longer, but not but that much.</li><li id="item3">I'm the tallest basterd of em all. Fear my height, for it shall crush you all. Blah laber, lorem ipsum, noch mehr Quark.</li>
</ul>
</body>
</html>
Getestet in aktuellen Browsern - IE < 8 versaut es natürlich, but we're not surprised, are we. (Versaut es in so fern, dass er die Elemente nach wie vor „untereinander“ darstellt, was in einer entsprechend größeren Höhe des UL-Elements resultiert. Ggf. noch durch irgendwelche Hacks für inline-block o.ä. behebbar.)
Halt, Moment noch - wenn die Darstellung der LI als inline-block durch float:left ersetzt wird, dann spielt sogar der IE bis runter zum 5.5 mit, zumindest laut Test im IETester.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?