Почему при float: right блоки меняются местами?
птому что флоат это не прижимание а обтекание.
Потому, что смысл флоата такой. Если нескольким блокам дать float:right, то последний в DOM-е блок останется на месте, все же остальные поочередно (последовательно) последуют за ним. Проще сказать: блоки выстраиваются последовательно в обратном порядке.