Все довольно просто. Ваш стиль <div id="menu">
должен быть 50px ростом. Но высота <ul>
внутри него зависит от метрики шрифта, как и высота его дочерних элементов (которые имеют фон). Таким образом, в зависимости от используемых шрифтов и алгоритма растеризации шрифта, высота будет варьироваться. В то же время вы добавляете некоторое верхнее поле, которое пытается сделать так, чтобы прямоугольники находились на одном уровне с прямоугольником ниже ... но размер этого поля должен зависеть от точного размера текста.
У вас есть несколько вариантов. Вы можете переключиться на автоматическую высоту в меню и прекратить использовать поплавки, чтобы расположить вещи рядом друг с другом; используйте display:inline-block
вместо этого. Вы можете переключиться на автоматическую высоту в меню и использовать очистку, чтобы убедиться, что меню достаточно высокое, чтобы содержать поплавки. Вы можете явно установить больше высоты и высоты строки, чтобы убедиться, что все будет складываться независимо от того, какой шрифт (но это будет ужасно ломаться для некоторых пользователей; ваша высота 50px просто не будет работать для пользователя, который использует шрифт 60px потому что они не очень хорошо видят).