Дело в том, что submenu-это блочный элемент, а li строчный. Если вы запишите li например как inline-block, то ширина будет соответствовать ширине li. upd: У submenu position: absolute, а у li нет свойства relative, поэтому он позиционируется от окна.