建站学习网,专业提供各类建站教程,网页素材,SEO资讯等建站资源!

网站模板_网站源码_网站素材_建站教程_建站学习网

当前位置:建站学习网 > DIV+CSS教程 > DIV CSS教程 >

网页菜单详解

更新时间:2017-01-02整理编辑:建站学习网阅读:0

 首先看这下面的例子(鼠标移上去):

  Link 1

  Link 2

  Link 3

  Link N

  菜单实例

  类似这样的仿Windows下拉菜单,在网上是比较常见的,最初出现在微软网站上,之后被大量效仿。 事实上制作这样一个模拟菜单也并不是一件很困难的事,比如上面的例子代码如下:

  -------------------------------------------

  <!-- 样式部分 -->

  <style type=text/css>

  td,div { font: normal 12px 宋体; }

  a  { color: #F8F8F8; text-decoration: none; }

  a:hover  { color: #F8F8F8; text-decoration: underline; }

  </style>

  <!-- 实现部分 -->

  <div

  

  onmouseout="myMenu.style.display='none'">

  <div >

  <div id=myMenu >

  &nbsp;Link 1<br>

  &nbsp;Link 2<br>

  &nbsp;Link 3<br>

  &nbsp;<br>

  &nbsp;Link N<br>

  </div>

  </div>

  菜单实例

  </div>

  -----------------------------------  那么下面我们就由浅入深的对这种模拟菜单进行分析讲解。

  在讲解之前,有一点需要说明的是:笔者在后面讲解的代码都基于当前的主流浏览器Microsoft Internet Explorer(即我们通常所说的IE)下的。笔者进行调试的浏览器是IE 5.01。另外,这样一个菜单体现的是HTML/CSS/javascript的综合应用,这里并不对一些细节进行详细的讲解,所以你至少应该有一点这方面的基础。

  基本原理

  其实,这个菜单实现的原理简单的说就是:设置页面元素的CSS属性,对其进行定位并设置其是否可见,然后通过激发一定的事件,用javascript来动态的改变这些属性。

  看下面几个CSS属性:

  position:定位类型,取值static/absolute/relative,其代表的含义简单的说即无定位/绝对定位/相对定位;

  left:距离左侧的位置(具体的参照物与position的设置有关),单位为px或%;

  top:距离顶部的位置(具体的参照物与position的设置有关),单位为px或%。

  display:页面元素的显示状态,如取值block表示做为块状元素显示,none则为不显示,还有其他一些取值(如inline等)这里就不做详解。

  比如上例中的“div id=myMenu myMenu.style.display='block'"“就是一个很普通的用法,其中myMenu即我们所看到的“菜单“的ID,它原来的display为none,即不显示,当鼠标移上去时,变为block,即块状显示。

  另外要提的是:前面只说了如何实现定位、如何动态控制,那么定位的、控制的是什么元素呢?原则上来讲,大部分块状元素(如div、table)都可以,而在IE中,div标记(注意,在一些非IE浏览器中,并不支持div标记)因其使用的灵活性和方便性而做为我们的首选。上例使用的就是div标记。

  好啦,基本的过程,上面大致已经说完了,在下一章,我们将看到使用上面提到的技术来实现一个简单的菜单。

  模拟网页下拉菜单中有几个比较关键的CSS属性:position、left、top、display,同时,他们也是style对象的属性,今天我们就用这几个基本属性来实现一个简单的网页菜单。

  首先请大家看笔者已经做好的一个实例,然后我们对这个例子进行详细代码讲解。

  为大家阅读方便,这里采用在代码中加注释的方式,红色部分为注释。

  代码如下:

  ------------------------------------------------------

  <html>

  <head>

  <title>菜单实例</title>

  <style type=text/css>

  td,div  { font: normal 12px 宋体; }

  </style>

  </head>

  <body >

  <table cellpadding=0 cellspacing=0 width=90% height=20 bgcolor=#CCCCCC>

  <tr>

  <td width=10> </td>

  <td width=80 align=center

  onmouseout="menuHide(menu01)">菜单实例</td>

  <!--

  上两行为菜单中显示的文字,注意这里面的事件触发:

   鼠标经过时显示菜单;

  onmouseout="menuHide(menu01)" 鼠标移走时隐藏菜单。

  参数menu01即要显示的菜单的id,将在接下来的代码中看到。

  menuShow与menuHide分别为显示、隐藏菜单方法,将在后面定义。

  -->

  <td> </td>

  </tr>

  </table>

  <div id=menu01

   onmouseout="menuHide(this)">

  <!--

  以上三行,定义了菜单的一些属性,注意“id=menu01“,前面提到过。

  position、top、left、display四个CSS属性即上一章讲过的;

  width、height、background-color分别为宽度、高度、背景色。

  这里再一次出现 onmouseout="menuHide(this)",

  就是说当鼠标从菜单按钮上移开,如果是移到了菜单上,菜单仍然显示。

  注意这里参数是this而不是menu01,this即对象本身,在这里就是指menu01,所以结果相同。

  在这里笔者有意使用this,只是想告诉大家一个技巧,这在很多时候非常方便。

  -->

  <br>   菜单内容

  </div>

  <script language=javascript>

  function menuShow(menu) //定义显示菜单的方法,参数menu即菜单的id。

  {

  menu.style.display='block';

  //注意这里如何用javascript改变style对象的属性来达到改变CSS属性的目的。

  }

  function menuHide(menu) //定义隐藏菜单的方法,参数menu即菜单的id。

  {

  menu.style.display='none';

  //同上

  }

  </script>

  </body>

  </html>

  ------------------------------------------------------  这样,一个简单的菜单就实现了,只要你略有一些相关的基础知识,反复体会一下我加的注释,就应该可以理解了,是不是并不难?

  这个菜单现在看上去还有点简陋,下次我们将对这个菜单进行进一步的修饰。

  这一章,我们就来讨论如何美化它。

  美化主要表现在鼠标放到菜单上后(即鼠标悬停)的效果,这里首先介绍几个经常用到的CSS属性:

  background-color:背景色,其值为一个颜色值,如“#FF0000“、“red“。

  border:边框样式,一个形如“宽度 样式 颜色“的字符串,如“1px solid red“,即1px的红色实线边框。

  cursor:鼠标指针样式,取值为表示鼠标指针样式的字符串,如“hand“、“help“,即小手、帮助状态。

  以上只是简单的介绍了几个在此类菜单中非常常见的CSS属性,这里也并未做很详尽的解释(毕竟这些并不是我们要讲解的重点),欲了解更多可参阅相关资料。笔者在这里想说的是:掌握更多的CSS属性会对你有所帮助。

  前面说了,美化主要表现在鼠标放到菜单上后的效果,那么如何用javascript来控制样式的变化呢?或者你会想到前面讲过的style对象,的确,用style可以达到目的,但是,很多时候,需要改变很多个CSS属性,用style就显得有些麻烦。我们再来介绍一个新的属性:className。

  className属性对应的就是CSS的class,也即所谓的伪类,比如在某个标记中设置class=myName,那么这时该元素的className属性就是myName。

  来看下面这个例子:

  --------------------------------------------

  <style type="text/css">

  .style_normal { color: gray; }

  .style_over  { color: red; }

  </style>

  <span class=style_normal

  onmouseout="this.className='style_normal'">

  鼠标移上来,通过className属性改变这段文字的class,使文字颜色变成红色;

  移走,又恢复原来的颜色。</span>

  ----------------------------------------------

  效果如下(把鼠标放到文字上):

  我们看到,在处理相对复杂的样式变化的情况下,用className就方便得多了,至于样式如何变化,就变成如何定义class的问题了。

  讲到这里,我想有一定CSS基础的朋友应该已经清楚如何来修饰这个菜单了,即便你对CSS了解的还不多,前面已经介绍了几个较常用的属性。所以,这里就不再多讲了,最后提供两个笔者做好的例子,希望你能从中受到启发(查看源文件即可看到相应的代码,相应位置加了注释,在此就不另行给出)。

  1. 一个简单的背景变化

  2. 仿office XP菜单效果

  上面两例都用了灰色,你当然可以改成你自己喜欢的颜色。这两例也是比较常见的效果,这里提供给大家也算是抛砖引玉。相信开动你的脑筋、合理的运用掌握的技术,会做出更漂亮的效果!

  通过前三篇文章的讲解,现在我们已经可以实现一个基本的菜单了。这一章,我们来讨论一下定位的问题。

  在前几章讲的例子中,定位都是相对于整个网页的左上角。在有一些时候,我们可能需要它相对于网页中某个元素定位,这样做在某些时候是非常有必要的,比如不会出现那种因窗口大小的改变而致使菜单与网页中的一些元素的相对位置发生变化。在第一章的最初,笔者所给的例子中就是这样做的。

  在那里我们很方便把就把这个菜单插入到了网页中,而菜单不会相对菜单按钮的位置发生变化。下面我们就看看如何来实现。

  在第一章,我们讲过position,当它取值absolute的时候,即绝对定位。既然是定位,就要有参照物。一般来讲,这个定位的参照物是body(即整个网页)的左上角,但如果其父级元素中有设置了position:absolute的元素,那么它的参照物就是该元素。知道了这样一个特性,我们就可以很容易的来实现了。

  另外,有一点在这里必须要着重说明一下,前面同时也讲过,当position的值为relative时,就是相对定位,为什么不用它来实现呢?我们必须要正确理解这里所谓的相对定位:它是指相对于原来在HTML中的位置所发生的偏移,而它仍占据原来在HTML中所占据的位置。而我们现在的菜单需要“悬浮“在网页元素之上,而这只有当position设为absolute时才可以做到。

  通过上面的讲述,我们应该可以大致的了解其实现的原理了。下面就看看刚才在上面看到的那个菜单的代码(注意里面的注释会帮你加深理解)。

  -------------------------------------------------------------------------------

  <style type=text/css>

  td,div  { font: normal 12px 宋体; }

  a  { color: #F8F8F8; text-decoration: none; }

  a:hover  { color: #F8F8F8; text-decoration: underline; }

  </style>

  <div

  

  onmouseout="myMenu.style.display='none'">

  <!--上面的DIV就是我们看到的按钮部分,它并未涉及任何定位的部分,

  不要与下面两个混淆。-->

  <div >

  <!--注意上面的DIV,设置了position:absolute,但是并没有设置left/top,

  所以这时它仍与一个普通的HTML元素一样,出现在它应该出现的位置。-->

  <div id=myMenu >

  <!--它的定位是相对于前一个DIV而不是Body,

  因为前一个DIV设置了position:absolute-->

  Link 1<br>

  Link 2<br>

  Link 3<br>

  <br>

  Link N<br>

  </div>

  </div>

  菜单实例

  </div>-------------------------------------------

  请仔细理解上面的代码,相信大家对用CSS进行绝对定位会有一个更深层次的认识!

  这里说一句题外话:这种定位可以用Dreamweaver来实现(这对于对JS不是很熟的朋友来讲的确很方便),而事实上这样做生成的代码的原理与上面讲的相同的。把上面讲的原理弄清楚了,使用起来会更灵活。

本文网址:https://www.dedexuexi.com/divcss/jc/1896.html

本站部分文章搜集与网络,如有侵权请联系本站,转载请说明出处。

标签:技巧
收藏此文 赞一下!() 打赏本站

如本文对您有帮助,就请建站学习网抽根烟吧!

支付宝打赏
微信打赏
CSS右对齐实现方法
« 上一篇2017年01月02日
使用CSS布局定位属性轻松实现优美站点布局
2017年01月02日下一篇 »
  • DIV CSS如何给文字字体添加下划线?
    0阅读
    在css中可以使用text-decoration属性或border-bottom属性来给文字添加下划线样式。下面本篇文章就来给大家介绍一下,希望对大家有所帮助。方法1:使用text-decoration属性设置css的text-decoration属性用于指定添加到文本的修饰,其underline属...
  • 纯CSS3实现带动画效果导航菜单无需js
    0阅读
    随着互联网的发展,网页能表现的东西越来越多。由最开始单纯的文字和链接构成的网页,到后来的表格布局,再到div+css模式,现在发展到了 html+css3。网页能表达的东西越来越多,css3兴起已经
  • CSS定义超链接四个状态的正确顺序L-V-H-A
    0阅读
    css定义超链接是要有先后顺序的。否则,在某些浏览器里面有可能会出现某个样式不起作用的bug。不能正确显示想要的效果。 CSS属性的排列顺序: L-V-H-A 。 L-V-H-A是link、visited、hover、active的简写
  • 在ie7下css居中样式text-align:center;偏左问题解决方法
    0阅读
    css样式text-align:center;在ie7下偏左问题,想必有很多朋友的遇到过吧,下面有个不错的方法,大家可以参考下,希望对大家有所帮助 复制代码 代码如下: body { text-align:center; } 用ie7打开是居左的。
  • 对div盒子模型使用心得总结
    0阅读
    相信每一个从事web开发的人对盒子模型都有一个特殊的理解吧,本文也有一个理解并附有示例代码,喜欢的朋友可以参考下 盒子模型的计算 外边距(margin)+边框(border)+内边距(padding)+内容(content
 
QQ在线咨询