2015-12-18 35 views
0

請在這裏看到這jsfiddle demo。當我將鼠標懸停在sub1上時,子菜單覆蓋sub2。如何使子子菜單出現在子菜單的右側,但與sub1(或sub2,如適用)相鄰?我怎樣才能使一個子菜單出現在主菜單旁邊,而不是下面用CSS?

ul.topbar { 
 
\t padding:0; 
 
\t \t \t list-style: none; 
 
\t \t \t background: #f2f2f2; 
 

 
} 
 
ul.topbar li { 
 
\t \t \t display: inline-block; 
 
\t \t \t position: relative; 
 
\t \t \t line-height: 5vh; 
 
\t \t \t text-align: left; 
 

 

 
} 
 
ul.topbar li a { 
 
\t \t \t display: block; 
 
\t \t \t padding: 8px 25px; 
 
\t \t \t color: #333; 
 
\t \t \t text-decoration: none; 
 
\t \t \t white-space: nowrap; 
 

 
} 
 
ul.topbar li a:hover { 
 
\t \t \t color: #fff; 
 
\t \t \t background: #939393; 
 
\t \t \t white-space: nowrap; 
 
} 
 
ul.topbar li ul.dropdown { 
 
\t \t \t 
 
\t \t \t background: #f2f2f2; 
 
\t \t \t display: none; 
 
\t \t \t position: absolute; 
 
\t \t \t z-index: 999; 
 
\t \t \t left: 0; 
 
} 
 
ul.topbar li:hover ul.dropdown { 
 
\t \t \t display: block; \t /* Display the dropdown */ 
 
} 
 
ul.topbar li ul.dropdown li { 
 
\t \t \t display: block; 
 
} 
 

 

 
ul.topbar li ul.dropdown { 
 
\t padding:0; 
 
\t \t \t list-style: none; 
 
\t \t \t background: #f2f2f2; 
 
} 
 
ul.topbar li ul.dropdown li { 
 
\t \t \t display: inline-block; 
 
\t \t \t position: relative; 
 
\t \t \t line-height: 5vh; 
 
\t \t \t text-align: left; 
 
} 
 
ul.topbar li ul.dropdown li a { 
 
\t \t \t display: block; 
 
\t \t \t padding: 8px 25px; 
 
\t \t \t color: #333; 
 
\t \t \t text-decoration: none; 
 
} 
 
ul.topbar li ul.dropdown li a:hover { 
 
\t \t \t color: #fff; 
 
\t \t \t background: #939393; 
 
} 
 
ul.topbar li ul.dropdown li ul.dropdown { 
 
\t \t \t min-width: 100px; /* Set width of the dropdown */ 
 
\t \t \t background: #f2f2f2; 
 
\t \t \t display: none; 
 
\t \t \t position: absolute; 
 
\t \t \t z-index: 999; 
 
\t \t \t left: 0; 
 
} 
 
ul.topbar li ul.dropdown li:hover ul.dropdown { 
 
\t \t \t display: block; \t /* Display the dropdown */ 
 
\t \t \t position:absolute; 
 
} 
 
ul.topbar li ul.dropdown li ul.dropdown li { 
 
\t \t \t display: block; 
 
\t \t \t 
 
}
<ul class="topbar"> 
 
     <li><a href="../index.html">top1</a></li> 
 
     <li><a href="#">top2</a></li> 
 
     <li> <a href="#" > top3 &#9662;</a> 
 
     \t <ul class="dropdown"> 
 
     \t \t <li> <a href="#" > sub1 &#9656; </a> 
 
     \t \t \t <ul class="dropdown"> 
 
        \t <li> <a href="#" >asfg </a></li> 
 
         <li> <a href="#" >hbch </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
        </ul> 
 
     \t \t </li> 
 
     \t \t <li> <a href="#" >sub2 &#9656; </a> 
 
       \t <ul class="dropdown"> 
 
        \t <li> <a href="#" >rtiuji </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
         <li> <a href="#" >erft </a></li> 
 
        </ul> 
 
       </li> 
 
     \t </ul> 
 
     </li> 
 
     <li><a href="#">top5 &#9662;</a> 
 
      <ul class="dropdown"> 
 
       <li><a href="../net-jrf/phys-sci/main.html">Phy</a></li> 
 
       <li><a href="../net-jrf/chem-sci/main.html">Chem</a></li> 
 
       
 
      </ul> 
 
     </li> 
 
     <li><a href="#">top6</a></li> 
 
</ul>

回答

1

在你的CSS規則ul.topbar li ul.dropdown li ul.dropdown要解決的定位。

您已經在使用position: absolute,這意味着此元素將與其最接近的祖先的左上角的絕對距離定位。

然後您設置left:0。這意味着讓左側的祖先左側爲0像素。如果將其切換爲100%(%定位基於祖先的大小而不是元素本身),則您現在將菜單從左側推到祖先的全部大小上 - 即它將其左側與祖先的右側對齊。

在您的具體情況下,您可能還需要添加top:0。否則,該元素將保持它在祖先下方的原始頂部位置,並且幾乎不可能將鼠標移出。

另外你可能想考慮簡化你的規則。利用CSS如何規則級聯,因此您不必爲菜單的每個級別制定一條獨特的規則。

相關問題