第四步,使用CSS设置二级菜单层的位置。通常设置一个层的位置都会使用到CSS的position属性,这个属性值常用的有relative、absolute和fixed三种。其中absolute为绝对定位,使用这种方式设置层的位置时,该层是以整个
为基础定位,因此,如果浏览器窗口大小改变时,层的位置是会变动的;fixed是相对定位,而这个“相对”是相对浏览器窗口的定位,假设层离浏览器窗口顶部10像素时,无论怎么拖动滚动条,这个层都会在离浏览器窗口顶部10像素的位置出现,即会一直显示在浏览器窗口中。relative也是相对定位,在这个相对定位是相对这个层的原来的位置的定位。在relative模式下,浏览器会先输出层的位置,再相对这个层的位置进行偏移,这也就是我们为什么将二级菜单层放在menu层中的原因。因为二级菜单层一旦产生,它只能相对以前的位置偏移,所以浏览器窗口再怎么变化,也不会影响到层的位置。由于二级菜单层所在位置不同,所以要为每一个二级菜单层设置不同的偏移量,如下所示。在以上代码中,CSS中的display将层设为隐藏、postion将层设为相对原来位置偏移、left和top设置偏移量,width设置层的宽度。当然,只要你愿意,还可以设置其他属性,如字体大小等,这就不多介绍了。在这里,需要注意的是,二级菜单层不能离一级菜单太远。前面介绍过,当鼠标从一级菜单移到二级菜单中时,二级菜单层是不能隐藏的。如果一级菜单离二级菜单层太远,鼠标刚从一级菜单上移开时,二级菜单层就已经隐藏了,这就达不到二级菜单的目的了。因此,必须要保证鼠标从一级菜单移到二级菜单层上时,二级菜单层来不及隐藏。这就需要使用到二个技巧了:第一、二级菜单层不能离一级菜单太远,如本例所示,二级菜单层的top属性值为0px,这样鼠标从一级菜单移到二级菜单上时,二级菜单来不及隐藏。第二、将一级菜单放在或中,这样只要鼠标在或上时,二级菜单层都不会隐藏,这样看起来一级菜单和二级菜单层之间似乎挺远的,但事实二级菜单层和一级菜单层之间是十分相近,甚至有可能这两个层之间都有重叠。
第五步、设置一级菜单和二级菜单层的onmouseover和onmouseout属性,用于控制二级菜单层的显示和隐藏,这主要是设置二级菜单层的display属性值。在这里就不多介绍了,完整的源代码如下所示: