Ich versuch's mal:
zu 1:
wenn du den div benennst, z.B. mit #images.
Dann könntest du für die Bilder einen margin definieren, z.B. #images img {margin...}
zu 2:
ja, aber eigentlich brauchst du für den Div weder Breiten- noch Höhenangabe. Diese richten sich nach seinem Inhalt.
zu 3:
Die Erklärung ist die, dass dann das folgende Element wieder unterhalb des gefloateten Divs angeordnet wird.
Das hängt auch damit zusammen, dass man ja nicht immer weiß, wie hoch die einzelnen Elemente sind.
zu 4:
Das hängt damit zusammen, dass bestimmte Elemente von Haus aus bestimmte margins haben, die noch von Browser zu Browser abweichen können. Abhilfe schafft ein Reset und Neudefinition. Wenn du dann p und dem imagediv die gleichen margins gibst, ist das Problem gelöst, siehe
http://www.ohne-css.gehts-gar.net/0037.phpWas mir für dein Konstrukt noch einfällt, wäre, die Bilder in eine Liste zu packen und diese entsprechend zu formatieren wie hier beschrieben:
http://www.ohne-css.gehts-gar.net/0020.php. Bei Anordnung untereinander lass bei den li's einfach das float weg.