I believe the "best" way would be some combination of absolute and relative units, with a stepwise multi-variable function definition (if font size is smaller than x, then do this, else do that; if screen width is larger than x, then do this, else do that). In CSS3 there is the
calc function, that could be useful, but it's missing max/min operators anyway. ADE's conditional styling could be used too, but it's not a standard feature.
I usually set all lengths in em units, even margins, but I don't define the body margin, but the margins for blockquotes, poetry, etc.