Да это все ясно!..
Дело совсем в другом.
По стандарту float: left; форсируется в display: block;! Поэтому такое совмещение этих свойств по меньшей мере малологично.
Присоединитесь к блогу CSS, нажав на шнур рядом с названием, вернитесь в свою тему, нажмите на ключик в заголовке и в подменюшке "куда запостить" выберите CSS. Затем нажмите на "Опубликовать" ;)
Вторая проблема решается
1. Ка выше писали overflow: hidden; + width
2. Заданию родительскому блоку float
Ваш способ сомнительный тем что приходиться из блочного элемента div делать строчный что действительно идет в разрез с идеологией блочных элементов, так что поддерживаю про ересь.
CSS Bugs. Ошибки, возникающие при верстке