1em ist die Höhe des großen "M" im Font mit der aktuellen Fontgröße.
Die Einheit "em" bezieht sich also immer auf die derzeit eingestellte Schriftgröße. Wird die Größe eines Elements in "em" angegeben, vergrößert sich das Element also, wannimmer die Schriftgröße erhöht wird. Dadurch kann man gewährleisten, dass Elemente immer so groß sind, wie ihr Inhalt und dieser niemals über die Ränder hinaus schießt.
"px" ist eine absolute Einheit in Pixeln. Egal, ob Du Viewport- oder Schriftgröße änderst, 1px ist immer gleich groß. Wird die Größe von Elementen in "px" angegeben, hast Du ein unflexibles Layout, das womöglich in anderen Browsern (Viewports) als dem, in dem so ein Layout erstellt wird, gänzlich anders aussehen oder sogar "platzen".
Für Schriftgrößen "px" zu verwenden ist zwar theoretisch richtig ("pt" ist nur für den Druck), hat aber den Nachteil, dass es Browser gibt, die dann das Skalieren der Schrift verweigern, was aber für den Nutzer u.U. absolut notwendig ist und so eine Site unbenutzbar werden lassen kann, wenn es verwendet wird.
Am besten ist es, immer von einer Schriftgröße von 1em für Fließtext auszugehen, dann ist die Größe auch so, wie es der Nutzer in seinem Browser voreingestellt hat. Die 100.01%, die man als Basis-Font-Size angibt ist (IIRC) weil der IE6 sonst die Schrift nicht richtig skaliert, oder in zu großen Abständen oder sowas.