私が取り組んでいるプロジェクトのドロップダウン メニューを作成していて、いくつかの問題に遭遇しました。各サブメニューの幅とstyle.leftが、ルートレベルのメニュー項目がホバーされたときに呼び出される JavaScript 関数によって設定されるように構築されています。これらのメニュー項目にカーソルを合わせると、次のように表示されます。
サブメニューは明らかに左側にかなりの数ピクセルずれています。サブメニューのstyle.leftを変更しないと、代わりに次のようになります。
ここで、アライメントは正しいです。この障害は、Windows 7 と Linux の両方の Mozilla Firefox と Google Chrome の両方で発生しているため、プラットフォームに関連する障害ではありません。
エラーを生成するコードは次のとおりです。
menu.js
function show_sub_menu(cath){
var menu_item = document.getElementById(cath) //cath is an integer passed to the function
var m_width = Math.floor(window.innerWidth*0.7*0.2); //Menu is 70% of window, each item is 20% of menu
menu_item.style.left = cath*m_width; //Set the style.left dynamically depending on what menu item is to be displayed
//This last line of code produces the error
}
menu.css
#m_wrapper{
position:relative;
width:100%;
}
#menu{
position:relative;
width:70%;
}
#menu li{
width:20%;
float:left;
}
#menu div{
position:absolute;
width:20%;
top:30px;
}
#menu div a{
position:relative;
display:block;
padding:5px;
}
menu.htm
<div id=m_wrapper>
<ul id=menu>
<li onMouseOver=show_sub_menu('0')>Item 1</li>
<div id=0 onMouseOver=show_sub_menu('0')>
<a href=#>Item 1.1</a>
<a href=#>Item 1.2</a>
</div>
</li>
</ul>
</div>
.js のm_widthは私の画面設定では 235px で、m_width*cathは 0 であるため、これは非常に非論理的に思えます。