Подменю появляется сразу на странице, но исчезает при наведении курсора мыши на пункт главного меню

надеюсь, что кто-нибудь поможет мне решить эту проблему... я не использую js, только css и html. Я создал меню, которое работает хорошо, но моя проблема заключается в том, что я пытаюсь добавить подменю. Я бы хотел, чтобы он был скрыт, пока кто-то не перейдет к главному меню, а затем я бы хотел, чтобы он выпал. Эффект, который я получаю сейчас, заключается в том, что мое подменю сразу загружается с главным меню над ним, а затем оно исчезает, когда я просматриваю этот пункт главного меню. Я пробовал разные вещи, такие как добавление z-index здесь и там, но пока безуспешно...

HTML:

<div id="container">
    <div id="menu">
        <ul id="nav">
            <ul>
                <li id="menu1"><a href=""><h2>Home</h2></a></li>
                <li id="menu2"><a href=""><h2>Sign-Up</h2></a></li>
                <li id="menu3"><a href=""><h2>Packages</h2></a>
                    <ul>
                        <li><a href="#">Gold</a></li>
                        <li><a href="#">Platinum</a></li>
                    </ul>
                </li>
                <li id="menu4"><a href=""><h2>About Us</h2></a></li>
                <li id="menu5"><a href=""><h2>Contact</h2></a></li>
            </ul>
        </ul>
    </div>

CSS:

* {
    margin:0px;
    padding:0px;
} 

.form-textbox{
    height:100px;
    font-size:100px;
}

#fieldset{
    width:300px;
}

#fieldst p{
    clear:both;
    padding:5px;
}

#legend{
    font-size:16px;
}

label[for="username"] {
    color:#FFFFFF;
    font-weight:bold;
    clear:both;
    text-align:left;
}

label[for="password"] {
    color:#FFFFFF;
    font-weight:bold;
    clear: both;
    text-align:left;
    margin-top:40px;
}

body {
    padding-top:0px;
    background-color:#01111d;
    color:#FFF;
    font-family:verdana, arial, sans-serif;
    text-align: left;
    letter-spacing: 1px;
}

a {
    color: #FFF;
    font-size: 14px;
}

a:hover {
    color:#efae00;
}  //01a9c0

.more {
    float:left;
}

.clear {
    clear:both;
}

p {
    margin: 20px 0px 20px 0px;
    line-height: 16px;
    font-size: 14px;
}

#container {
    margin: 0px auto;
    width: 873px;
}

#menu {
    background-image:url(images/menu.gif);
    width:862px;
    height:90px;
    position:relative;
    z-index:99999;
}

#menu li{
    position:absolute;
    top:40px;
    list-style-type:none;
}

#menu1 {
    left:110px;
}

#menu2 {
    left:255px;
}

#menu3 {
    left:400px;
}

#menu4 {
    left:540px;
}

#menu5 {
    left:680px;
}

#menu a {
    font-family: verdana, arial, sans-serif;
    font-size:12px;
    font-weight:bolder;
    color:#FFFFFF;
    text-decoration:none;
    text-transform:uppercase;
}

#menu a:hover {
    color:#efae00;
} 

#menu li > #nav li ul

#nav li ul {
    position:absolute; 
    display:none;
} 

#nav li:hover ul { 
    display: none;
}


#nav li ul li { 
    float: none; 
    display: block;
}

#nav li ul li a { 
    width: 118px; 
    position: absolute; 
    border-left: 1px solid black; 
    border-right: 1px solid black; 
    border-bottom: 1px solid black; 
    background: #333; 
    color: #fff; 
}

#nav li ul li a:hover { 
    background: #066; 
    color: #000; 
}

Jsfiddle здесь: http://jsfiddle.net/bC7f2/


person Sasha Essentialz Jevremovic    schedule 14.05.2014    source источник
comment
Почти уверен, что ваша разметка недействительна. Вы не можете иметь элемент <ul> в качестве прямого потомка элемента <ul>. Насколько мне известно, единственными прямыми потомками элемента <ul> являются элементы <li>. Кроме того, в вашем CSS есть следующий селектор #menu li > #nav li ul, который (1) ничему не соответствует и (2) не имеет связанных с ним стилей.   -  person War10ck    schedule 14.05.2014
comment
Вы устанавливаете наведение, чтобы не отображать ничего, а затем сначала начинаете с display:block; , который у вас должен быть display:none;   -  person BuddhistBeast    schedule 14.05.2014
comment
я понимаю. как бы мне это исправить (извините, я новичок в css)   -  person Sasha Essentialz Jevremovic    schedule 14.05.2014
comment
Я отправлю вам ответ, вот обновленный jsfiddle: jsfiddle.net/bC7f2/2   -  person BuddhistBeast    schedule 14.05.2014
comment
это было бы большим подспорьем! Я проверяю jsfiddle прямо сейчас, и кажется, что он работает в том смысле, что элементы подменю теперь появляются только при наведении :), но он не остается там достаточно долго, чтобы я мог щелкнуть по нему? и я все еще не вижу золота ... только пункт подменю платины.   -  person Sasha Essentialz Jevremovic    schedule 14.05.2014


Ответы (1)


Итак, похоже, есть несколько вещей, которые мы можем изменить в вашем коде. Во-первых, когда вы должны и не должны отображать вещи. Чтобы быть кратким, я внес несколько изменений в код CSS, просто убедитесь, что вы получаете именно ту область, которую пытаетесь использовать. Вот новые имена селекторов:

#nav ul li:hover ul #ITEM NAME HERE

#nav li ul # ITEM NAME HERE

Затем вы начали с отображения раскрывающегося меню как «display: block;» , это означает, что все в раскрывающемся меню будет автоматически начинаться на странице, для этого должно быть установлено значение «display:none;», чтобы оно не было видно, пока вы не наведете курсор. Вот ваш конечный продукт:

#nav ul li:hover ul #item1 {
    display: none;
    position: absolute;
    z-index: 100;
    display: inline-block;
    top: 20px;
}
#nav ul li:hover ul #item2 {
    /* display: none; */
    position: relative;
    z-index:1;
    display: block;
    top: 13px;

}
#nav ul li:hover ul #item3 {
    /* display: none; */
    position: relative;
    z-index:0;
    display: block;
    top: 27px;

}
#nav li ul #item1 {
    z-index:100;
    display:none;
}
#nav li ul #item2 {
    z-index:1;
    display:none;
}
#nav li ul #item3 {
    z-index:0;
    display:none;
}

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

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

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

Чтобы разбить мои дополнения, я очень быстро разделю его на разделы:

Z-индекс: это в значительной степени порядок того, в каком порядке будут появляться элементы, где чем выше число, тем выше в списке они будут отображаться. Вот источник дополнительной информации.

Позиционирование. Я использовал комбинацию абсолютного и относительного позиционирования. Это очень грязно, и я не знаю, порекомендовали бы многие использовать это в применимом мире веб-программирования. Было бы лучше использовать исключительно абсолютное позиционирование, но это все равно сделает вашу работу. Дополнительную информацию можно найти здесь.

Верх: это довольно очевидно, но на самом деле это расстояние от самого верхнего объекта. Дополнительную информацию об этом можно найти здесь.

person BuddhistBeast    schedule 14.05.2014
comment
эй, это немного работало по ссылке jsfiddle, которую вы мне предоставили :), но теперь она не работает. Я добавил эти 2 идентификатора в свой css, но теперь ничего не появляется или выпадающих списков: S - person Sasha Essentialz Jevremovic; 14.05.2014
comment
неважно, теперь это работает, но все еще не видно золота, только платина? - person Sasha Essentialz Jevremovic; 14.05.2014
comment
Спасибо! теперь это работает хорошо :) теперь я должен просто выяснить все изменения, которые были сделаны. привет друг! :) - person Sasha Essentialz Jevremovic; 14.05.2014
comment
Без проблем! Загляните в Альманах MDN и CSS для получения дополнительной информации о конкретных свойствах CSS. - person BuddhistBeast; 14.05.2014