<ul>
<li style="position: relative">MENU item 1
<ul style="position: absolute">
<li>MENU item 1-1</li>
<li>MENU item 1-2</li>
<li>MENU item 1-3</li>
</ul>
</li>
<li>MENU item 2</li>
<li>MENU item 3</li>
</ul>
親の li に { position: relative }、子の ul に { position: absolute } を与えて { top: -○○px } を指定すれば良いだけ。理由は分かるよね。
JavaScript でやることは、初期化関数で
・li に { display: inline; position: relative }
・li にイベントリスナ登録
・ul に { position: absolute; top: ((ul の offsetHeight) + (li の offsetHeight))px }
これだけ。崩れるかどうかなんてのは他の部分の CSS の責任。この JavaScript とは無関係だ。
ひょっとしたら上から見て 3 2 1 の順にしたいのかもしれないが、その場合は li も絶対配置すれば良いだけで、考え方は同じだ。レイアウト制御は全て CSS の範疇なんだから、JavaScript が分からなくても、初めの配置と、終わりの配置の図は書けるよね。そうすれば、JavaScript で CSS の何のプロパティをどのくらい変更すれば良いのか、すぐに分かるはずだ。
設計が決まれば、あとはコードに落とすだけ。具体的な書き方で分からん部分があれば説明するが、もう少し具体的な設計図がないことには何とも。