Вертикальное раскрывающееся меню с подменю, отображаемым при наведении курсора

Я хочу создать вертикальное раскрывающееся меню со следующей структурой (для каждой «кнопки» отдельный «раскрывающийся» div). Идея заключается в том, что когда я наводю курсор на «кнопку», «раскрывающийся список» появляется над «кнопкой» того же размера («раскрывающийся список» сжимается до размера «кнопки» с одинаковой высотой «subnav1») или появляется слева от «раскрывающегося списка» (снова с равной высотой «subnav1» "). Проблема, однако, в том, что я не могу заставить «выпадающий» display: block навести курсор на «button» и, во втором случае, «button» зависать при выборе «subnav1» "элемент. HTML:

<div class="nav">
    <ul class="nav1">
        <li class="button"><div class="subnav">BUTTON1</div></li>
        <li class="button"><div class="subnav">BUTTON2</div></li>
        <li class="button"><div class="subnav">BUTTON3</div><li>
        <li class="button"><div class="subnav">BUTTON4</div></li>
        <li class="button"><div class="subnav">BUTTON5</div></li>
    </ul></div>
    <div class="dropdown">
        <A href="#" class="subnav1">SUBBUTTON1</a>
        <A href="#" class="subnav1">SUBBUTTON1</a>
        <A href="#" class="subnav1">SUBBUTTON1</a>
    </div>

CSS:

.nav {
    width: 180px;
    padding: 1vm;
    float:left;
    height:450px;
    position:relative;
    text-align:center;
    background-color:#a56d3b;
}
ul{
    list-style:none;
    margin: 0;
    padding: 0;
    text-align:right;
}
.nav a{
    text-decoration:none;

}
.subnav{
    font-weight:bold;
    text-align:center;
    color:#FCFBE3;
    font-family: 'PT Serif', serif;
    font-size:1.3em;
    display:block;
}
.button{
    border-bottom:1PX DOTTED #FFECBA;
    border-right:1PX DOTTED #FFECBA;
    height:90px;
    width:100%;
    padding:2em 0 0 0 ;
    cursor:pointer;
}
.button:last-child{
    border-bottom:0px;
}
.button:hover{
    background-color:rgba(0,0,0,0.5);
}
.dropdown{
    height:89px;
    float:left;
    width:auto;
    min-width:100px;
    text-align:center;
    margin:0 180px;
    position:absolute;
    cursor:pointer;
    border:1px solid black;

}

.subnav1{
    height:30px;
    width:180px;
    padding:5px 0;
    color:black;
    font-family: 'PT Serif', serif;
    font-size:1em;
    color:white;
    text-decoration:none;
    background-color:#D8A06E;
        DISPLAY:BLOCK;
}
.subnav1:hover{
    background-color:rgba(0,0,0,0.5);
}
.nav.nav1 .button:hover .dropdown{
    display:block;
}

person RecycleBin    schedule 19.04.2016    source источник


Ответы (2)


Я думаю, что это так, как вы хотите. Сообщите мне, если это не тот результат, который вы ищете

.dropbtn {
    background-color: #E61094;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}

.nav {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 115px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-content a{
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}

.dropdown-content a:hover {
	background-color: #9E1192
}

.nav:hover .dropdown-content {
    display: block;
}

.nav:hover .dropbtn {
    background-color: #F576EA;
}
<div class="nav">
  <button class="dropbtn">Dropdown 1</button>
  <div class="dropdown-content">
   <a href="#">Subbutton 1</a>
   <a href="#">Subbutton 2</a>
   <a href="#">Subbutton 3</a>
  </div>
</div>

<div class="nav">
  <butoon class="dropbtn">Dropdown 2</button>
  <div class="dropdown-content">
   <a href="#">Subbutton 1</a>
   <a href="#">Subbutton 2</a>
   <a href="#">Subbutton 3</a>
  </div>
</div>

<div class="nav">
  <butoon class="dropbtn">Dropdown 3</button>
  <div class="dropdown-content">
   <a href="#">Subbutton 1</a>
   <a href="#">Subbutton 2</a>
   <a href="#">Subbutton 3</a>
  </div>
</div>

<div class="nav">
  <butoon class="dropbtn">Dropdown 4</button>
  <div class="dropdown-content">
   <a href="#">Subbutton 1</a>
   <a href="#">Subbutton 2</a>
   <a href="#">Subbutton 3</a>
  </div>
</div>

<div class="nav">
  <butoon class="dropbtn">Dropdown 5</button>
  <div class="dropdown-content">
   <a href="#">Subbutton 1</a>
   <a href="#">Subbutton 2</a>
   <a href="#">Subbutton 3</a>
  </div>
</div>

person Nirupa    schedule 19.04.2016
comment
Это то, что я хочу сделать, проблема в том, что я не могу заставить кнопку основного меню открываться / закрываться при наведении курсора на подменю. - person RecycleBin; 20.04.2016
comment
Я думаю, что приведенный выше код должен работать тогда @AllaKonstantinova - person Nirupa; 23.04.2016
comment
@AllaKonstantinova Если мой ответ вам помог, пожалуйста, одобрите его. Спасибо. - person Nirupa; 11.05.2016

вы используете совершенно неправильную разметку HTML-навигации, правильная и допустимая структура:

<nav class="nav">
  <ul>
    <li>
      <a href="">1st Level</a>
      <ul>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
      </ul>
    </li>
    <li>
      <a href="">1st Level</a>
      <ul>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
      </ul>
    </li>
    <li>
      <a href="">1st Level</a>
      <ul>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
        <li><a href="">2nd Level</a></li>
      </ul>
    </li>
  </ul>
</nav>

и тогда это просто, как пирог, просто стилизовать:

.nav {
  display: block;
  font-family: sans-serif;
}
.nav ul {
  padding: 0;
  list-style: none;
}
.nav ul li {
  display: inline-block;
  position: relative;
  white-space: nowrap;
}
.nav ul li a {
  display: block;
  padding: 8px 16px;
  text-decoration: none;
  color: #000000;
}
.nav ul li ul {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  border: 1px solid #000000;
}
.nav ul li ul li {
  display: block;
}
.nav ul li:hover ul {
  display: block;
}

См. Эту скрипку https://jsfiddle.net/vtt0qnpt/

Наслаждаться

person Pavel Richter    schedule 19.04.2016