【问题标题】:How to make a pure css based dropdown menu?如何制作基于纯 CSS 的下拉菜单?
【发布时间】:2012-04-14 18:12:46
【问题描述】:

我正在寻找基于纯 css 和浏览器兼容的水平下拉菜单....

我看起来像下面提到的例子

【问题讨论】:

  • 去谷歌搜索`pure css drop down`。顺便说一句,没有javscript 会很复杂
  • @Sumant hi,这个导航在哪里,你能把链接发给我吗。
  • 与@Shailender Arora 一起回答很好
  • 纯 CSS 下拉菜单对每个人来说都很难使用,而且比 JS+CSS 菜单对残疾人来说更难访问:离开子菜单 1 像素 1 毫秒,然后您的子菜单会立即关闭。叹息。

标签: html css drop-down-menu


【解决方案1】:

看到这是纯 CSS 基础下拉菜单:-

HTML

<ul id="menu">
      <li><a href="">Home</a></li>
      <li><a href="">About Us</a>
        <ul>
        <li><a href="">The Team</a></li>
        <li><a href="">History</a></li>
        <li><a href="">Vision</a></li>
        </ul>
      </li>
      <li><a href="">Products</a>
        <ul>
        <li><a href="">Cozy Couch</a></li>
        <li><a href="">Great Table</a></li>
        <li><a href="">Small Chair</a></li>
        <li><a href="">Shiny Shelf</a></li>
        <li><a href="">Invisible Nothing</a></li>
        </ul>
      </li>
      <li><a href="">Contact</a>
        <ul>
        <li><a href="">Online</a></li>
        <li><a href="">Right Here</a></li>
        <li><a href="">Somewhere Else</a></li>
        </ul>
      </li>
    </ul>

CSS

ul
{
    font-family: Arial, Verdana;
    font-size: 14px;
    margin: 0;
    padding: 0;
    list-style: none;
}

ul li
{
    display: block;
    position: relative;
    float: left;
}

li ul
{
    display: none;
}

ul li a 
{
    display: block;
    text-decoration: none;
    color: #ffffff;
    border-top: 1px solid #ffffff;
    padding: 5px 15px 5px 15px;
    background: #2C5463;
    margin-left: 1px;
    white-space: nowrap;
}

ul li a:hover 
{
    background: #617F8A;
}
li:hover ul 
{
    display: block;
    position: absolute;
}

li:hover li
{
    float: none;
    font-size: 11px;
}

li:hover a 
{
    background: #617F8A;
}

li:hover li a:hover 
{
    background: #95A9B1;
}

查看演示:- http://jsfiddle.net/XPE3w/7/

【讨论】:

  • 有其他人在所有浏览器中都尝试过吗?这个多浏览器兼容吗?
  • 仅在移动设备上不起作用,因为:hover 在移动设备上很难使用。轻松添加一行 javascript,在点击时显示菜单。
【解决方案2】:

在 IE7 - 9 和 Firefox 中测试:http://jsfiddle.net/WCaKg/。标记:

<ul>
    <li>&lt;li&gt;</li>

    <li>&lt;li&gt;</li>

    <li>&lt;li&gt;

        <ul>
            <li>&lt;li&gt;</li>

            <li>&lt;li&gt;</li>

            <li>&lt;li&gt;</li>

            <li>&lt;li&gt;</li>
        </ul>
    </li>

    <li>&lt;li&gt;</li>

    <li>&lt;li&gt;</li>

    <li>&lt;li&gt;</li>
</ul>

CSS:

* {
  margin: 0;
  padding: 0;
}

body {
  font: 200%/1.5 Optima, 'Lucida Grande', Lucida, 'Lucida Sans Unicode', sans-serif;
}

ul {
  width: 9em;
  list-style-type: none;
  font-size: 0.75em;
}

li {
  float: left;
  margin: 0 4px 4px 0;
  background: #60c;
  background: rgba(102, 0, 204, 0.66);
  border: 4px solid #60c;
  color: #fff;
}
li:hover {
  position: relative;
}

ul ul {
  z-index: 1;
  position: absolute;
  left: -999em;
  width: auto;
  background: #ccc;
  background: rgba(204, 204, 204, 0.33);
}

li:hover ul {
  top: 2em;
  left: 3px;
}

li li {
  margin: 0 0 3px 0;
  background: #909;
  background: rgba(153, 0, 153, 0.66);
  border: 3px solid #909;
}

【讨论】:

    【解决方案3】:

    html, body {
        font-family: Arial, Helvetica, sans-serif;
    }
    
    /* define a fixed width for the entire menu */
    .navigation {
      width: 150px;
    }
    
    /* reset our lists to remove bullet points and padding */
    .mainmenu, .submenu {
      list-style: none;
      padding: 0;
      margin: 0;
    }
    
    /* make ALL links (main and submenu) have padding and background color */
    .mainmenu a {
      display: block;
      background-color: #CCC;
      text-decoration: none;
      padding: 10px;
      color: #000;
    }
    
    /* add hover behaviour */
    .mainmenu a:hover {
        background-color: #C5C5C5;
    }
    
    
    /* when hovering over a .mainmenu item,
      display the submenu inside it.
      we're changing the submenu's max-height from 0 to 200px;
    */
    
    .mainmenu li:hover .submenu {
      display: block;
      max-height: 200px;
    }
    
    /*
      we now overwrite the background-color for .submenu links only.
      CSS reads down the page, so code at the bottom will overwrite the code at the top.
    */
    
    .submenu a {
      background-color: #999;
    }
    
    /* hover behaviour for links inside .submenu */
    .submenu a:hover {
      background-color: #666;
    }
    
    /* this is the initial state of all submenus.
      we set it to max-height: 0, and hide the overflowed content.
    */
    .submenu {
      overflow: hidden;
      max-height: 0;
      -webkit-transition: all 0.5s ease-out;
    }
    <html>
    <body>
    <head>
    <link rel="stylesheet" type="css/text" href="nav.css">
    </head>
    </body>
    <nav class="navigation">
      <ul class="mainmenu">
        <li><a href="">Home</a></li>
        <li><a href="">About</a></li>
        <li><a href="">Products</a>
          <ul class="submenu">
            <li><a href="">Tops</a></li>
            <li><a href="">Bottoms</a></li>
            <li><a href="">Footwear</a></li>
          </ul>
        </li>
        <li><a href="">Contact us</a></li>
      </ul>
    </nav>

    【讨论】:

      【解决方案4】:

      在线查看代码:WebCrafts.org

      HTML 代码:

      <body id="body">
      <div id="navigation">
          <h2>
              Pure CSS Drop-down Menu
          </h2>
        <div id="nav" class="nav">
          <ul>
              <li><a href="#">Menu1</a></li>
              <li>
                  <a href="#">Menu2</a>
                <ul>
                      <li><a href="#">Sub-Menu1</a></li>
                      <li>
                          <a href="#">Sub-Menu2</a>
                        <ul>
                              <li><a href="#">Demo1</a></li>
                            <li><a href="#">Demo2</a></li>
                          </ul>
                      </li>
                      <li><a href="#">Sub-Menu3</a></li>
                      <li><a href="#">Sub-Menu4</a></li>
                  </ul>
              </li>
              <li><a href="#">Menu3</a></li>
              <li><a href="#">Menu4</a></li>
          </ul>
        </div>
      </div>
      </body>
      

      CSS代码:

      body{
          background-color:#111;
      }
      
      #navigation{
          text-align:center;
      }
      #navigation h2{
          color:#DDD;
      }
      
      .nav{
          display:inline-block;
          z-index:5;
          font-weight:bold;
      }
      .nav ul{
          width:auto;
          list-style:none;
      }
      
      .nav ul li{
          display:inline-block;
      }
      
      .nav ul li a{
          text-decoration:none;
          text-align:center;
          color:#222;
          display:block;
          width:120px;
          line-height:30px;
          background-color:gray;
      }
      
      .nav ul li a:hover{
          background-color:#EEC;   
      }
      .nav ul li ul{
          margin-top:0px;
          padding-left:0px;
          position:absolute;
          display:none;
      }
      
      .nav ul li:hover ul{
          display:block;
      }
      
      .nav ul li ul li{
          display:block;
      }
      
      .nav ul li ul li ul{
          margin-left:100%;
          margin-top:-30px;
          visibility:hidden;
      }
      
      .nav ul li ul li:hover ul{
          margin-left:100%;
          visibility:visible;
      }
      

      【讨论】:

        【解决方案5】:

        您不必总是使用ul 元素来实现这一点,您也可以使用其他元素,如下所示。这里有两个例子,一个使用div,一个使用select

        此示例演示了基本功能,但可以进行更多扩展/丰富。它仅在 linux 中进行了测试(iceweasel 和 chrome)。

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset='UTF-8'>
        <style>
        .drop_container
        {
          position:relative;
          float:left;
        }
        .always_visible
        {
          background-color:#FAFAFA;
          color:#333333;
          font-weight:bold;
          cursor:pointer;
          border:2px silver solid;
          margin:0px;
          margin-right:5px;
          font-size:14px;
          font-family:"Times New Roman", Times, serif;
        }
        .always_visible:hover + .hidden_container
        {
          display:block;
          position:absolute;
          color:green;
        }
        .hidden_container
        {
          display:none;
          border:1px gray solid;
          left:0px;
          background-color:#FAFAFA;
          padding:5px;
          z-index:1;
        }
        .hidden_container:hover
        {
          display:block;
          position:absolute;
        }
        .link
        {
          color:blue;
          white-space:nowrap;
          margin:3px;
          display:block;
        }
        .link:hover
        {
          color:white;
          background-color:blue;
        }
        .line_1
        {
          width:800px;
          border:1px tomato solid;
          padding:5px;
        }
        </style>      
        </head>
        
        <body>
        
        <div class="line_1">
        <div class="drop_container">
          <select class="always_visible" disabled><option>Select</option></select>
          <div class="hidden_container">
          <a href="http://www.google.gr" class="link">Option_ 1</a>
          <a href="http://www.google.gr" class="link">Option__ 2</a>
          <a href="http://www.google.gr" class="link">Option___ 3</a>
          <a href="http://www.google.gr" class="link">Option____ 4</a>
          </div>
        </div>
        <div class="drop_container">
          <select class="always_visible" disabled><option>Select</option></select>
          <div class="hidden_container">
          <a href="http://www.google.gr" class="link">____1</a>
          <a href="http://www.google.gr" class="link">___2</a>
          <a href="http://www.google.gr" class="link">__3</a>
          <a href="http://www.google.gr" class="link">_4</a>
          </div>
        </div>
        <div style="clear:both;"></div>
        </div>
        
        <br>
        
        <div class="line_1">
         <div class="drop_container">
          <div class="always_visible">Select___</div>
          <div class="hidden_container">
          <a href="http://www.google.gr" class="link">Option_ 1</a>
          <a href="http://www.google.gr" class="link">Option__ 2</a>
          <a href="http://www.google.gr" class="link">Option___ 3</a>
          <a href="http://www.google.gr" class="link">Option____ 4</a>
          </div>
        </div>
         <div class="drop_container">
          <div class="always_visible">Select___</div>
          <div class="hidden_container">
          <a href="http://www.google.gr" class="link">Option_ 1</a>
          <a href="http://www.google.gr" class="link">Option__ 2</a>
          <a href="http://www.google.gr" class="link">Option___ 3</a>
          <a href="http://www.google.gr" class="link">Option____ 4</a>
          </div>
        </div>
        <div style="clear:both;"></div>
        </div>
        
        </body>
        </html>
        

        【讨论】:

          【解决方案6】:

          使用 HTML 和 CSS 创建简单的下拉菜单

          CSS:

          <style>
          .dropdown {
              position: relative;
              display: inline-block;
          }
          
          .dropdown-content {
              display: none;
              position: absolute;
              background-color: #f9f9f9;
              min-width: 160px;
              box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
              padding: 12px 16px;
              z-index: 1;
          }
          
          .dropdown:hover .dropdown-content {
              display: block;
          }
          </style>
          

          和 HTML:

          <div class="dropdown">
            <span>Mouse over me</span>
            <div class="dropdown-content">
              <p>Hello World!</p>
            </div>
          </div>
          

          View demo online

          【讨论】:

            【解决方案7】:

            使用 CSS 制作下拉菜单有多种方法。这是简单的代码。

            HTML 代码

                <label class="dropdown">
            
              <div class="dd-button">
                Dropdown
              </div>
            
              <input type="checkbox" class="dd-input" id="test">
            
              <ul class="dd-menu">
                <li>Dropdown 1</li>
                <li>Dropdown 2</li>
              </ul>
            
            </label>
            

            CSS 代码

            body {
              color: #000000;
              font-family: Sans-Serif;
              padding: 30px;
              background-color: #f6f6f6;
            }
            
            a {
              text-decoration: none;
              color: #000000;
            }
            
            a:hover {
              color: #222222
            }
            
            /* Dropdown */
            
            .dropdown {
              display: inline-block;
              position: relative;
            }
            
            .dd-button {
              display: inline-block;
              border: 1px solid gray;
              border-radius: 4px;
              padding: 10px 30px 10px 20px;
              background-color: #ffffff;
              cursor: pointer;
              white-space: nowrap;
            }
            
            .dd-button:after {
              content: '';
              position: absolute;
              top: 50%;
              right: 15px;
              transform: translateY(-50%);
              width: 0; 
              height: 0; 
              border-left: 5px solid transparent;
              border-right: 5px solid transparent;
              border-top: 5px solid black;
            }
            
            .dd-button:hover {
              background-color: #eeeeee;
            }
            
            
            .dd-input {
              display: none;
            }
            
            .dd-menu {
              position: absolute;
              top: 100%;
              border: 1px solid #ccc;
              border-radius: 4px;
              padding: 0;
              margin: 2px 0 0 0;
              box-shadow: 0 0 6px 0 rgba(0,0,0,0.1);
              background-color: #ffffff;
              list-style-type: none;
            }
            
            .dd-input + .dd-menu {
              display: none;
            } 
            
            .dd-input:checked + .dd-menu {
              display: block;
            } 
            
            .dd-menu li {
              padding: 10px 20px;
              cursor: pointer;
              white-space: nowrap;
            }
            
            .dd-menu li:hover {
              background-color: #f6f6f6;
            }
            
            .dd-menu li a {
              display: block;
              margin: -10px -20px;
              padding: 10px 20px;
            }
            
            .dd-menu li.divider{
              padding: 0;
              border-bottom: 1px solid #cccccc;
            }
            

            更多css code example

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-04-14
              • 2012-02-24
              • 1970-01-01
              • 2012-11-03
              • 2022-11-17
              相关资源
              最近更新 更多