I often need to list items with various-sized images on the left and text on the right, like this:
alt text http://www.deviantsart.com/upload/7s01l5.png
For 17 years, I have solved this with HTML tables, like this:
<html>
<style>
* { margin: 0; padding: 0 }
body {
padding: 20px;
}
#content {
width: 600px;
padding: 20px;
margin-left: auto;
margin-right: auto;
background: green;
}
.item {
margin: 0 0 20px 0;
}
.itemIcon {
float:left;
}
.itemBody {
float:right;
}
.clear {
clear: both;
}
</style>
<body>
<div id="content">
<div class="item">
<div class="itemIcon">
<img src="icon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the first item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
<div class="item">
<div class="itemIcon">
<img src="bigIcon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the second item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
<div class="item">
<div class="itemIcon">
<img src="icon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the first item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
</div>
</body>
</html>
Everytime I have tried to switch to floating divs, it has failed for one reason or another, here is my current attempt:
alt text http://www.deviantsart.com/upload/tuvquv.png
What do I have to change to this code so that this div solution looks like the table solution?
<html>
<style>
* { margin: 0; padding: 0 }
body {
padding: 20px;
}
#content {
width: 600px;
padding: 20px;
margin-left: auto;
margin-right: auto;
background: green;
}
.item {
margin: 0 0 20px 0;
}
.itemIcon {
float:left;
}
.itemBody {
float:right;
}
.clear {
clear: both;
}
</style>
<body>
<div id="content">
<div class="item">
<div class="itemIcon">
<img src="icon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the first item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
<div class="item">
<div class="itemIcon">
<img src="bigIcon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the second item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
<div class="item">
<div class="itemIcon">
<img src="icon.png" alt=""/>
</div>
<div class="itemBody">
<h1>This is the first item</h1>
<p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p>
</div>
<br class="clear"/>
</div>
</div>
</body>
</html>
This isn’t terribly flexible – you have to set the padding for each DIV depending on the image, but its very clean markup wise:
See it in action at: http://jsbin.com/iniqu3/2
Notice if you make your screen very narrow, the text does not wrap around the image, as per your example.