2014-09-25 2 views
3

У меня есть центрированная навигационная система третьего уровня, которая отображается при наведении 2-го уровня. Что мне не хватает, чтобы держать его скрытым до тех пор, пока он не зависнет над ним напрямую?3-мерное центральное меню Раскрывающаяся навигационная проблема

P.S. - Я знаю, что код был бы чище с> в нем, как я видел в Интернете, но не уверен, как его очистить, поэтому я надеюсь, что код будет ясным, как есть.

Спасибо!

JS Fiddle: DEMO

#centeredmenu { 
    clear:both; 
    float:left; 
    margin:0 0 30px 0; 
    padding:0; 
    border-bottom:1px solid #000; /* black line below menu */ 
    width:100%; 
    font-family:Arial, Helvetica, sans-serif; /* Menu font */ 
    z-index:1000; /* This makes the dropdown menus appear above the page content below */ 
    position:relative; 
    background-color: #000; 
} 

/* Top menu items */ 
#centeredmenu ul { 
    margin:0; 
    padding:0; 
    list-style:none; 
    float:right; 
    position:relative; 
    right:50%; 
} 
#centeredmenu ul li { 
    margin:0 0 0 1px; 
    padding:0; 
    float:left; 
    position:relative; 
    left:50%; 
    top:1px; 
} 
#centeredmenu ul li a { 
    display: block; 
    margin: 0; 
    padding: 10px 20px; 
    font-size: 1em; 
    line-height: 1em; 
    text-decoration: none; 
    color: #fff; 
    font-weight: bold; 
    border-bottom: 1px solid #000; 
} 
#centeredmenu ul li a:hover { 
    background: #a3c2df; /* Top menu items background color */ 
    color: #fff; 
    border-bottom: 1px solid #03f; 
} 
#centeredmenu ul li:hover a { 
    background: #a3c2df; /* Top menu items background color */ 
    color: #000; 
    border-bottom: 1px solid #03f; 
} 

/* 2nd Level Items */ 
#centeredmenu ul ul { 
    display:none; /* Submenus are hidden by default */ 
    position:absolute; 
    left:0; 
    right:auto; /* Resets the right:50% on the parent ul */ 
    width:12em; /* Width of the drop-down menus */ 
} 
#centeredmenu ul ul li { 
    left:auto; /*Resets the left:50% on the parent li */ 
    margin:0; /* Resets the 1px margin from the top menu */ 
    clear:left; 
    width:100%; 
} 

/* 3rd Level Items */ 
#centeredmenu ul ul ul { 
    display:none; /* Submenus are hidden by default */ 
    position:absolute; 
    top:0; 
    left:155px; 
    right:auto; /* Resets the right:50% on the parent ul */ 
    width:12em; /* Width of the drop-down menus */ 
} 
#centeredmenu ul ul ul li { 
    left:auto; /* Resets the left:50% on the parent li */ 
    margin:0; /* Resets the 1px margin from the top menu */ 
    clear:left; 
    width:100%; 
} 

#centeredmenu ul ul li a, 
#centeredmenu ul li.active li a, 
#centeredmenu ul li:hover ul li a { 
    font-size:0.9em; 
    font-weight:normal; /* Resets the bold set for the top level menu items */ 
    background:#eee; 
    color:#444; 
    line-height:1.4em; /* Overwrite line-height value from top menu */ 
    border-bottom:1px solid #ddd; /* Submenu item horizontal lines */ 
} 
#centeredmenu ul ul li a:hover, 
#centeredmenu ul li.active ul li a:hover, 
#centeredmenu ul li:hover ul li a:hover { 
    background: #a3c2df; /* Submenu items background color */ 
    color:#000; /* Submenu items hover color */ 
} 

/* Flip the last 2nd menu so it stays within the page */ 
#centeredmenu ul ul.last { 
    left:auto; /* Resets left:0; value */ 
    right:0; /* Set right value instead */ 
} 

/* Make the 2nd menus appear on hover */ 
#centeredmenu ul li:hover ul { 
    display:block; /* Show the submenus */ 
} 

/* Make the 3rd menus appear on hover */ 
#centeredmenu ul li:hover ul ul{ 
    display:block; /* Show the submenus */ 
} 
<div id="centeredmenu"> 
    <ul> 
     <li><a href="#">Home</a></li> 
     <li><a href="#">Documents</a> 
     <ul> 
      <li><a href="#">Reading</a></li> 
      <li><a href="#">Writing</a> 
       <ul>   
        <li><a href="#">Excerpt 1</a></li> 
        <li><a href="#">Excerpt 2</a></li> 
        <li><a href="#">Excerpt 3</a></li> 
        <li><a href="#">Excerpt 4</a></li> 

       </ul> 
      </li> 

     </ul> 
     </li> 
    </ul> 
</div> 

ответ

0

#centeredmenu ul li:hover ul в вашем CSS соответствует оба уровня меню. li:hover ul частей делает браузерный поиск метки ul с li:hover как предок. Это не должно быть прямым родителем, оно также может быть дедушкой, grandgrandparent и т. Д. Попытайтесь понять, понимаете ли вы, почему это имеет место для обоих уровней меню. http://learn.shayhowe.com/html-css/getting-to-know-css/ может дать вам некоторое представление о том, как CSS селекторы работают

Быстрое исправление было бы изменить #centeredmenu ul li:hover ul в #centeredmenu ul li:hover > ul и снять #centeredmenu ul li:hover ul ul у вас есть.

Я играл с чем-то вроде этого сегодня, см. http://codepen.io/ckuijjer/pen/huyxn для моего примера. Я пытался использовать в основном классы и вряд ли стилистику элементов.

+0

Спасибо @ckuijjer за объяснение и иллюстрации. Я обязательно прочитаю ссылку на эту страницу. Меня все еще путают размещение всех различных комбинаций CSS, т. Е. Ul.last, li: hover и т. Д. Использование в основном классов еще более продвинуто - этот кодекс хорош! – alondonb

1

#centeredmenu ul li:hover ul означает всеul элементы ниже наведен элемента (независимо от глубины)! Это, в свою очередь, означает, что когда вы наводите курсор на li, каждый ul ребенок этого элемента li будет иметь соответствующие правила. #centeredmenu ul li:hover > ul означает первый потомок (> - только первые потомки)! Это предотвращает распространение зависания ниже предполагаемого уровня. «#centeredmenu ul li: hover ul ul» имеет ту же проблему, за исключением того, что начинается уровень распространения 2 и продолжается до конца.

#centeredmenu { 
 
    clear: both; 
 
    float: left; 
 
    margin: 0 0 30px 0; 
 
    padding: 0; 
 
    border-bottom: 1px solid #000; 
 
    /* black line below menu */ 
 
    width: 100%; 
 
    font-family: Arial, Helvetica, sans-serif; 
 
    /* Menu font */ 
 
    z-index: 1000; 
 
    /* This makes the dropdown menus appear above the page content below */ 
 
    position: relative; 
 
    background-color: #000; 
 
} 
 
/* Top menu items */ 
 

 
#centeredmenu ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
    float: right; 
 
    position: relative; 
 
    right: 50%; 
 
} 
 
#centeredmenu ul li { 
 
    margin: 0 0 0 1px; 
 
    padding: 0; 
 
    float: left; 
 
    position: relative; 
 
    left: 50%; 
 
    top: 1px; 
 
} 
 
#centeredmenu ul li a { 
 
    display: block; 
 
    margin: 0; 
 
    padding: 10px 20px; 
 
    font-size: 1em; 
 
    line-height: 1em; 
 
    /* [disabled]background: #ddd; */ 
 
    text-decoration: none; 
 
    color: #fff; 
 
    font-weight: bold; 
 
    border-bottom: 1px solid #000; 
 
} 
 
#centeredmenu ul li a:hover { 
 
    background: #a3c2df; 
 
    /* Top menu items background colour */ 
 
    color: #fff; 
 
    border-bottom: 1px solid #03f; 
 
} 
 
#centeredmenu ul li:hover a { 
 
    background: #a3c2df; 
 
    /* Top menu items background colour */ 
 
    color: #000; 
 
    border-bottom: 1px solid #03f; 
 
} 
 
/* 2nd Level Items */ 
 

 
#centeredmenu ul ul { 
 
    display: none; 
 
    /* Sub menus are hiden by default */ 
 
    position: absolute; 
 
    left: 0; 
 
    right: auto; 
 
    /*resets the right:50% on the parent ul */ 
 
    width: 12em; 
 
    /* width of the drop-down menus */ 
 
} 
 
#centeredmenu ul ul li { 
 
    left: auto; 
 
    /*resets the left:50% on the parent li */ 
 
    margin: 0; 
 
    /* Reset the 1px margin from the top menu */ 
 
    clear: left; 
 
    width: 100%; 
 
} 
 
/* 3rd Level Items */ 
 

 
#centeredmenu ul ul ul { 
 
    display: none; 
 
    /* Sub menus are hiden by default */ 
 
    position: absolute; 
 
    top: 0; 
 
    left: 155px; 
 
    right: auto; 
 
    /*resets the right:50% on the parent ul */ 
 
    width: 12em; 
 
    /* width of the drop-down menus */ 
 
} 
 
#centeredmenu ul ul ul li { 
 
    left: auto; 
 
    /*resets the left:50% on the parent li */ 
 
    margin: 0; 
 
    /* Reset the 1px margin from the top menu */ 
 
    clear: left; 
 
    width: 100%; 
 
} 
 
#centeredmenu ul ul li a, 
 
#centeredmenu ul li.active li a, 
 
#centeredmenu ul li:hover ul li a { 
 
    font-size: 0.9em; 
 
    font-weight: normal; 
 
    /* resets the bold set for the top level menu items */ 
 
    background: #eee; 
 
    color: #444; 
 
    line-height: 1.4em; 
 
    /* overwrite line-height value from top menu */ 
 
    border-bottom: 1px solid #ddd; 
 
    /* sub menu item horizontal lines */ 
 
} 
 
#centeredmenu ul ul li a:hover, 
 
#centeredmenu ul li.active ul li a:hover, 
 
#centeredmenu ul li:hover ul li a:hover { 
 
    background: #a3c2df; 
 
    /* Sub menu items background colour */ 
 
    color: #000; 
 
    /* Sub menu items hover colour */ 
 
} 
 
/* Flip the last 2nd menu so it stays within the page */ 
 

 
#centeredmenu ul ul.last { 
 
    left: auto; 
 
    /* reset left:0; value */ 
 
    right: 0; 
 
    /* Set right value instead */ 
 
} 
 
/* Make the 2nd menus appear on hover */ 
 

 
#centeredmenu ul li:hover > ul { 
 
    display: block; 
 
    /* Show the sub menus */ 
 
} 
 
#centeredmenu ul li ul li ul { 
 
    display: none; 
 
} 
 
#centeredmenu ul li ul li:hover ul { 
 
    display: block; 
 
}
<div id="centeredmenu"> 
 
    <ul> 
 
    <li><a href="#">Home</a> 
 
    </li> 
 
    <li><a href="#">Documents</a> 
 
     <ul> 
 
     <li><a href="#">Reading</a> 
 
     </li> 
 
     <li><a href="#">Writing</a> 
 
      <ul> 
 
      <li><a href="#">Excerpt 1</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 2</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 3</a> 
 
      </li> 
 
      <li><a href="#">Excerpt 4</a> 
 
      </li> 
 

 
      </ul> 
 
     </li> 
 

 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

+0

@emmanuel Он работает, не так ли? –

+0

@emmanuel Вы правы, я извиняюсь. Сейчас немного сердито. («введите код здесь», потому что он не позволит мне просто опубликовать ссылку на скрипку »- вероятно, хорошая идея в конце дня). –

+0

Спасибо @emmanuel, это именно то, чего я пытался достичь. Так что, если я правильно понимаю уль Ли: парить> ул для операций всех меню DD (2-й, 3-й, 4-й и т.д.), но я все еще нужен последний и предпоследний CSS #centeredmenu ul li ul li ul и #centeredmenu ul li ul li: hover ul для контроля, когда. Это правильно? Или, может быть, последнее должно быть> ul тоже? – alondonb

Смежные вопросы