Я думаю, что это связано с округлением пикселей.
Ваше правило состоит в том, что #b занимает 90% от #a и имеет запас в верхней части 5% и запас в нижней части еще 5%. Вы думаете, что это будет на 100%, верно? ;)
Запустил два сценария и проверил в Firebug, что Firefox делал с этими значениями.
Scenario 1 - #a is 600px tall
#b height = 540px
#b margin-top = 30px
#b margin-bottom = 30px
540 + 30 + 30 = 600px === #a's height
Scenario 2 - #a is 601px tall
#b height = 541px (601 * .9 = 540.9 -> rounded up by browser = 541)
#b margin-top = 31px (601 * .05 = 30.05 -> rounded up = 31)
#b margin-bottom = 31px
541 + 31 + 31 = 603px > 601px -> #a's height
Кстати, если вы смотрите на разрешение, в котором все пропорции дают хорошие круглые числа, полос прокрутки нет.
Если вы хотите увидеть это визуально и иметь доступ к Firebug, откройте вкладку Layout (sub) (когда выбрана вкладка HTML).
(Я уверен, что вы можете проанализировать его аналогичным образом с помощью Firebug Lite, инструментов Chrome dev и инструментов IE dev)
Надеюсь, это поможет.
ISO