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

  • 相关阅读:
    InstallShield高级应用获取机机所有ORACLE服务列表
    InstallShield高级应用测试ORACL是否可连接
    [分享]Asp.net 页面加载顺序及常用页面事件规律
    InstallShield高级应用检查是否安装ORACLE或SQL Server
    InstallShield高级应用打开文件对话框
    InstallShield高级应用检测系统ServerPack版本,SP2前不支持则 abort
    InstallShield高级应用文件操作
    InstallShield高级应用系列目录
    c# 常用区别总结
    InstallShield高级应用测试Access是否可连接
  • 原文地址:https://www.cnblogs.com/daysme/p/6473728.html
Copyright © 2011-2022 走看看