zoukankan      html  css  js  c++  java
  • -第1章 HTMLCSS方法实现下拉菜单

    中英文的自动换行问题

    把下面代码中的 javascript 改成 子菜单1 试试, 如果英文的话宽度会自动撑开, 用中文不会, 而直接转行下来。

    <ul>
    	<li><a href="#">javascript</a></li>
        <li><a href="#">子菜单2</a></li>
        <li><a href="#">子菜单3</a></li>
    </ul>
    

    ie7中的a元素的宽高兼容问题

    从上面的图上不只是可以看出字转行了。而且宽度也发生了变化。这个变化在旁边的 chrome 浏览器中是没有的,在右边的ie7中可以看到。

    给子菜单中a设置高度即可。但是高度是解决了,现在还有一个宽度也有问题,那么再设置宽度即可。

    只设置了高度:

    设置了宽高:

    所以在ie7下要设置好宽高

    完整代码

    <!--
    Author: XiaoWen
    Create a file: 2017-02-27 11:24:01
    Last modified: 2017-02-27 13:05:43
    Start to work:
    Finish the work:
    Other information:
    -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
        *{
          margin: 0;
          padding: 0;
        }
        #nav{
          background: #eee;
           600px;
          height: 40px;
          margin: 0 auto;
        }
        ul{
          list-style:none;
        }
        ul li{
          float: left;
          line-height: 40px;
          text-align: center;
          position: relative;
        }
        a{
          text-decoration: none;
          color: #000;
          display: block;
          padding: 0 10px;
          height: 40px;
        }
        a:hover{
          color: #fff;
          background: #666;
        }
        ul li ul li{
          float: none;
          background: #eee;
          margin-top: 2px;
        }
        ul li ul{
          position: absolute;
          left: 0;
          top: 40px;
        }
        ul li ul li a{
           80px;
        }
        ul li ul li a:hover{
          background: #06f;
        }
        ul li ul{
          display: none;
        }
        ul li:hover ul{
          display: block;
        }
      </style>
    </head>
    <body>
    <div id="nav">
      <ul>
        <li><a href="#">一级菜单1</a></li>
        <li><a href="#">一级菜单2</a></li>
        <li>
          <a href="#">菜单3</a>
          <ul>
            <li><a href="#">javascript</a></li>
            <li><a href="#">子菜单2</a></li>
            <li><a href="#">子菜单3</a></li>
          </ul>
        </li>
        <li><a href="#">一级菜单3</a></li>
        <li><a href="#">一级菜单4</a></li>
        <li><a href="#">一级菜单5</a></li>
      </ul>
    </div>
    </body>
    </html>
    

    原理

    二级菜单,其实也就是给一级菜单中的其中一个里面再写一个列表。这个列表本来是隐藏 display:none 的,当鼠标移动到一级菜单 li:hover 上时,才显示这个列表。要二级菜单在子一级菜单的位置下,需要给一级菜单 li 设置相对定位。

    留下的问题

    1. 中文字符自动换行的问题,这个只要加上宽度也就可以了。或者强制不换行。
    2. 上面说到给子a标签添加固定的宽度和高度可以避免ie7下面的兼容问题,我们设置了80px的宽度,但是,如果子菜单里面的内容我们不知道,文字个数很多,超过了80px呢?
    3. 上面是在 li 标签上加的 hover 伪类事件,这个在 ie6 中是不可以的。 ie6 只运行 a 标签的伪类事件,而且 a 标签中最好不要包含块类元素。

    最后有没有想说什么?做个菜单而已,明明可以很简单, ie7 的宽高问题, ie6 的伪类问题,弄得复杂了起来。这还只是个菜单而已,想想整个网站上的所有页面…… 如果要做好兼容性,复杂程度可想而知。

    那么,为了我们的身心健康,为了向前发展的技术, 勇敢的对旧版本浏览器说 NO

  • 相关阅读:
    发邮件(asp.net2.0)(转)
    教师节祝福短信
    量子学习及思考13人机交互很快将面临交互模式的进化2 人工智能
    MongoDB(1) 简单配置
    CreateCompatibleDC
    设置环境变量的作用
    vs2008中调用matlab生成的dll
    resolve the maado15.dll
    错误3:系统找不到指定的路径
    C++关键字volatile
  • 原文地址:https://www.cnblogs.com/daysme/p/6473728.html
Copyright © 2011-2022 走看看