Я изменил класс block3 на это (добавлено clear: left;), и это даст вам результат, который вы искали.
div.block3 {display: inline; float: left; width: 100px; border: 1px solid #ff0000; margin: 10px; clear:left;}
EDIT:
Поскольку в настоящее время известно, что это динамически генерируемый сценарий из-за прояснения вопроса, решение состоит в том, чтобы подсчитать общее количество блоков, которые необходимо будет генерировать во время выполнения, а затем добавить атрибут clear в случае необходимости. Если вы не можете узнать, сколько у вас будет блоков, прежде чем создавать HTML, вы не сможете заставить работать макет.
Например, если у вас есть пять блоков, вам придется добавить четкие атрибуты в поля 3 и 5, чтобы убедиться, что они очищают своих левых соседей (в случае решения с двумя столбцами).
Если поле может расширяться и меняться на три или четыре столбца, то у вас есть другие проблемы. Вы действительно не можете иметь как фиксированный макет, так и расширяемый макет в случае, когда вы пытаетесь расположить столбцы.