I have a list with titles, text and images, and sometimes, when there is not enough text, my lists start breaking, ie. the list starts nesting itself.
The part you are missing is to clear the float
s. Use this:
li:after {
content: '';
display: block;
clear: both;
}
and now you will have removed the "nesting".
Note that while using floating containers, you should always
clear
them before the next container that follows thereby creating a fresh block formatting context as it is called. Otherwise you will see unpredictable behavior.
Revised demo below:
img {
float: left;
margin-right: 0.1em;
}
li:after {
content: '';
display: block;
clear: both;
}
<ul>
<li>
<h3>photo</h3>
<img src="http://commons.cathopedia.org/w/images/commons/thumb/f/fe/Carnevale_di_Venezia.JPG/250px-Carnevale_di_Venezia.JPG" /> some text next to the photo
</li>
<li>
<h3>photo</h3>
<img src="http://commons.cathopedia.org/w/images/commons/thumb/f/fe/Carnevale_di_Venezia.JPG/250px-Carnevale_di_Venezia.JPG" /> some text next to the photo
</li>
<li>
<h3>photo</h3>
<img src="http://commons.cathopedia.org/w/images/commons/thumb/f/fe/Carnevale_di_Venezia.JPG/250px-Carnevale_di_Venezia.JPG" /> some text next to the photo
</li>
</ul>
/* This will make every element inside Li align in a line */
li * {
display: inline-block;
}
/* have specifically gave h3 element block property so that it can be in a separate line and serve as a heading */
li h3 {
display: block;
}
working fiddle - http://jsfiddle.net/2z6Zn/247/
Remove the CSS you have applied in jSfiddle i.e
img {
float: left;
margin-right: 0.1em;
}
Instead just add following CSS
ul{
display:block;
clear:both;
}