仅基于CSS的水平多级菜单

时间:2018-03-14 08:49:35

标签: javascript html css menu

我正在动态生成多级菜单,并希望此菜单无需使用任何JavaScript的jQuery即可正常显示,此阶段菜单只有两个级别。

以下是动态生成的菜单结构

<div id="cssmenu">
<ul >
  <li><a href="/en/">Home</a></li>
  <li><a href="/en/">Menu 1</a></li>
  <li><a href="/en/menu2/">Menu 2</a></li>
  <li><a href="/en/menu3/">Menu 3</a></li>
  <li><a href="/en/menu4/">Menu 4</a></li>
  <li><a href="/en/menu5">Menu 5</a>
    <ul class="/en/menu5/menu5-1/">
      <li><a href="">Menu 5.1</a></li>
<li><a href="">Menu 5.2</a></li>
<li><a href="">Menu 5.3</a></li>
    </ul>
  </li>
  <li><a href="/en/menu6/">Menu 6</a></li>
</ul>
</div>

多层次使用JS https://codepen.io/anon/pen/RMrqmQ

我需要一个指向良好示例的指针,我已经查找了示例,但所有这些都为UL&amp; li我的动态菜单ul..li清理,以便用户可以根据需要自定义

更新

使用codepen,似乎运行良好https://codepen.io/anon/pen/bvEzwe

.nav ul {
  list-style: none;
  background-color: #444;
  text-align: center;
  padding: 0;
  margin: 0;
}

.nav li {
  font-family: 'Oswald', sans-serif;
  font-size: 1.2em;
  line-height: 40px;
  text-align: left;
}

.nav a {
  text-decoration: none;
  color: #fff;
  display: block;
  padding-left: 15px;
  border-bottom: 1px solid #888;
  transition: .3s background-color;
}

.nav a:hover {
  background-color: #005f5f;
}

.nav a.active {
  background-color: #aaa;
  color: #444;
  cursor: default;
}

/* Sub Menus */
.nav li li {
  font-size: .8em;
}


@media screen and (min-width: 650px) {
  .nav li {
    width: 130px;
    border-bottom: none;
    height: 50px;
    line-height: 50px;
    font-size: 1.4em;
    display: inline-block;
    margin-right: -4px;
  }

  .nav a {
    border-bottom: none;
  }

  .nav > ul > li {
    text-align: center;
  }

  .nav > ul > li > a {
    padding-left: 0;
  }

  /* Sub Menus */
  .nav li ul {
    position: absolute;
    display: none;
    width: inherit;
  }

  .nav li:hover ul {
    display: block;
  }

  .nav li ul li {
    display: block;
  }
}

1 个答案:

答案 0 :(得分:0)

可能会有所帮助

我将你的一些悬停改为它的嵌套ul。我的意思是为悬停和嵌套direct child selector(>)位置添加ul

 .nav ul {
     list-style: none;
     background-color: #444;
     text-align: center;
     padding: 0;
     margin: 0;
}
 .nav li {
     font-family: 'Oswald', sans-serif;
     font-size: 1.2em;
     line-height: 40px;
     text-align: left;
     position: relative; /* added for it's absolute child */
}
 .nav a {
     text-decoration: none;
     color: #fff;
     display: block;
     padding-left: 15px;
     border-bottom: 1px solid #888;
     transition: .3s background-color;
}
 .nav a:hover {
     background-color: #005f5f;
}
 .nav a.active {
     background-color: #aaa;
     color: #444;
     cursor: default;
}
/* Sub Menus */
 .nav li li {
     font-size: .8em;
}
/******************************************* Style menu for larger screens Using 650px (130px each * 5 items), but ems or other values could be used depending on other factors ********************************************/
 @media screen and (min-width: 650px) {
     .nav li {
         width: 130px;
         border-bottom: none;
         height: 50px;
         line-height: 50px;
         font-size: 1.4em;
         display: inline-block;
         margin-right: -4px;
    }
     .nav a {
         border-bottom: none;
    }
     .nav > ul > li {
         text-align: center;
    }
     .nav > ul > li > a {
         padding-left: 0;
    }
    /* Sub Menus */
     .nav li ul {
         position: absolute;
         display: none;
         width: inherit;
    }
     .nav > ul > li:hover > ul {
         display: block;
    }
     .nav li > ul > li:hover ul { /* change hover to nested li */
         display: block; 
    }
     .nav li > ul > li ul { /* change position to it's nested parent */
         top: 0;
         right: -100%;
    }
     .nav li ul li {
         display: block;
    }
}
<div class="nav">
    <ul>
        <li><a href="/en/">Home</a></li>
        <li><a href="/en/">Menu 1</a></li>
        <li><a href="/en/menu2/">Menu 2</a>
            <ul class="/en/menu5/menu5-1/">
                <li><a href="">Menu 2.1</a></li>
                <li><a href="">Menu 2.2</a>
                    <ul class="/en/menu5/menu5-1/">
                        <li><a href="">Menu 2.2.1</a></li>
                        <li><a href="">Menu 2.2.2</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="/en/menu3/">Menu 3</a></li>
        <li><a href="/en/menu4/">Menu 4</a></li>
        <li><a href="/en/menu5">Menu 5</a>
            <ul class="/en/menu5/menu5-1/">
                <li><a href="">Menu 5.1</a>
                    <ul class="/en/menu5/menu5-1/">
                        <li><a href="">Menu 5.1.1</a></li>
                        <li><a href="">Menu 5.1.2</a></li>
                    </ul>
                </li>
                <li><a href="">Menu 5.2</a>
                    <ul class="/en/menu5/menu5-1/">
                        <li><a href="">Menu 5.2.1</a></li>
                        <li><a href="">Menu 5.2.2</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><a href="/en/menu6/">Menu 6</a></li>
    </ul>
</div>