Вопрос по submenu, position, hover, css – Правильное отображение подменю третьего уровня в меню css only

0

Я разрабатываю новый сайт, и у меня возникают проблемы с меню CSS. Это проще объяснить на примере: вот ссылка на сайт:http://www.webau.net/CSFF/index.asp

Под родительским пунктом меню «Домой» у меня есть следующая конфигурация:

Top level menu (parent)
    Submenu 1 (child 1)
        Submenu 2 (grandchild 1)
    Submenu 3 (child 2)
    Submenu 4 (child 3)

Вместо этого он появляется на странице примерно так, где внук 1 выглядит так, как будто он занимает место меню ребенка 2:

Top level menu (parent)
    Submenu 1 (child 1)
    Submenu 2 (grandchild 1)
    Submenu 4 (child 3)

Я вижу небольшое смещение в списке подменю 2., которое заставляет меня думать, что это попытка неправильно отобразить внука.

Итак, я предполагаю, что у меня есть две проблемы ..

Во-первых, в меню третьего уровня (подменю 2 внука) одновременно отображаются меню второго уровня (дочерние подменю 1, 3, 4), когда вы наводите курсор мыши на родительский элемент меню.

И второе: почему-то элемент подменю 2 внука смещает (кладет поверх) дочернее подменю 3.

Я думаю, что проблема два будет решена, когда я исправлю отображение подменю внука.

Может ли кто-нибудь помочь мне понять, как добавить новый код CSS для работы с меню третьего или многоуровневого меню ... чтобы они скрывались до тех пор, пока не будет найден их родитель, а затем отображались справа от столбца подменю своего родителя?

В очередной раз благодарим за помощь. SunnyOz

Для вашего удобства: HTML-код:

<div id="navcontainer">
    <div id="navsection">  
        <ul>
            <li id="navactive"><a class="current" href="#">Home</a>
                <ul>
                    <li><a href="#">submenu 1</a>
                        <ul>
                            <li><a href="#">submenu 2</a></li>
                        </ul>
                    </li>
                    <li><a href="#">submenu 3</a></li>
                    <li><a href="#">submenu 4</a></li>
                </ul>
            </li>
            <li><... rest of menu items not needed for example>
            </li>
        </ul>
    </div>
</div>

Код CSS:

#navcontainer 
{
    width: 711px;
    height: 25px;
    text-align: center;
    margin: 0px auto; /*Center container on page*/
    clear: both;
    background-color: #129F9F;
    border: 3px solid #FFFFFF;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -ms-border-radius: 5px;
    border-radius: 5px; 

    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%);

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%);

    /* Opera */ 
    background-image: -o-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%);

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #16ACAC), color-stop(1, #0D6F6F));

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #16ACAC 0%, #0D6F6F 100%);

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #16ACAC 0%, #0D6F6F 100%); 
}
#navsection
{
    height: 24px;
    line-height: 24px;
    font-size: 12px;
    position: relative;
}
#navsection ul
{
    padding: 0px 0px 0px 35px;  /* padding on left to get nav menu to center.. since it has a float left to make it display properly*/
    list-style: none;
}
#navsection ul li
{
    padding: 0;
    margin: 0;
    border-right: 2px solid #129F9F;
    float: left;
}
#navsection ul li.navcontact  /* to stop right border at end of nav line */
{
    padding: 0;
    margin: 0;
    border-right: none;
    float: left;
}
#navsection ul li a
{
    color: #FFF;
    display: block;
    text-decoration: none;
    padding: 0 15px;
}
#navsection > ul > li > a:hover, #navsection  > ul > li:hover > a  
{  
    text-decoration: none;
    color: #EAA339;
    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Opera */ 
    background-image: -o-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0D6F6F), color-stop(1, #16ACAC));

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #0D6F6F 0%, #16ACAC 100%); 
}

#navsection > ul > li > a.current:hover, #navactive a.current:link, #navactive a:visited, #navactive > ul  li  a:hover, #navsection a:hover
{
    text-decoration: none;
    color: #EAA339;
    /* IE10 Consumer Preview */ 
    background-image: -ms-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Mozilla Firefox */ 
    background-image: -moz-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Opera */ 
    background-image: -o-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* Webkit (Safari/Chrome 10) */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0D6F6F), color-stop(1, #16ACAC));

    /* Webkit (Chrome 11+) */ 
    background-image: -webkit-linear-gradient(top, #0D6F6F 0%, #16ACAC 100%);

    /* W3C Markup, IE10 Release Preview */ 
    background-image: linear-gradient(to bottom, #0D6F6F 0%, #16ACAC 100%); 
}

#navsection ul li ul
{
    display: none;
    width: auto;
    position: absolute;
    padding: 0px;
    margin: 0px;
}
#navsection ul li:hover ul
{
    display: block;
    position: absolute;
    margin: 0;
    padding: 0;
}
#navsection ul li:hover li
{
    float: none;
    list-style: none;
    margin: 0px;
}
#navsection ul li:hover li
{
    font-size: 12px;
    height: 24px;
    background: #54C4C4;
    border: 1px solid #FFFFFF;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -ms-border-radius: 5px;
    border-radius: 5px; 
}
#navsection ul li:hover li a
{
    font-size: 11px;
    color: #fff;
    padding: 0px;
    display: block;
    width: 150px;
}
#navsection ul li li a:hover
{
    font-size: 11px;
    height: 24px;
    color:#EAA339;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    -o-border-radius: 5px;
    -ms-border-radius: 5px;
    border-radius: 5px; 
}

Ваш Ответ

1   ответ
0

Вы отображаете все<ul/> элементы, которые существуют под навесом<li/>, + Изменить#navsection ul li:hover ul в#navsection ul li:hover > ul выбрать только ближайшего ребенка

Вы устанавливаете положение каждого уровня падения одинаковым. Попробуйте добавить что-то вроде#navsection ul ul ul { top: 1em; left: 140px; }, это остановит внука, скрывающего ребенка.

Выtitle атрибуты негативно влияют на вашу навигацию. Я бы удалил их полностью, так как они не добавляют никакой полезной информации в ссылкуа также затемните пункты меню, затрудняя навигацию.

Надеюсь, это поможет :)

Второй вопрос: есть ли способ сделать подменю того же размера, что и максимальный контент в его собственной группе подменю? У меня есть все подменю размером в 200 пикселей, и оно работает для первого подмнеу .. но в моем примере это слишком долго для остальных. (Также см. Подменю из раздела «Сделать пожертвование».) Я хочу, чтобы подменю было одинакового размера с их собственной группой подменю, но они могут отличаться от других групп подменю. В очередной раз благодарим за помощь!! SunnyOz
В очередной раз благодарим за помощь. Мне удалось переместиться через мои подменю, чтобы они идеально относились к своим родителям. У меня все еще есть проблемы с выяснением того, как установить одинаковый размер в соответствии с размером текста ... но я буду продолжать над этим работать. Спасибо за вашу помощь. SunnyOz
не волнуйтесь :). 1-й новый вопрос: удалитьmargin: 0 из#navsection ul li:hover > ul и изменить#navsection ul ul ul { top: 1em; } в#navsection ul ul ul { margin-top: -1em; }, 2-й вопрос: можно, но это потребует больше разметки. Добавьте класс к каждому элементу первого уровня в навигации и используйте этот класс, чтобы установить ширину и смещение подменю этих элементов (например,left:205px). Вам нужно знать ширину меню, чтобы установить смещение, поэтому вам нужны классы. Надеюсь, это поможет :) Если у вас есть дополнительные вопросы, пожалуйста, начните новую тему; мы хотим, чтобы вопросы были доступны другим пользователям Stuart Burrows
Спасибо Спасибо!! Я использовал все ваши советы, и теперь он работает отлично! Я боюсь испытать судьбу, но мне было интересно, не могли бы вы помочь мне с двумя другими предметами. Я добавил изменения в [ссылка] (webau.net/CSFF/index.asp), но теперь перенес раскрывающиеся меню на вкладку «Что насчет CSFF». Я добавил 3 уровня подменю. Первый вопрос: Как вы можете видеть, если вы наводите курсор мыши на подменю 2, отображается третий уровень подменю, но он расположен на 1 метр вниз от верхней части столбца предыдущего подменю, а не на 1 метр ниже его собственного родительского местоположения. Это можно исправить? SunnyOz

Похожие вопросы