#html #css
#HTML #css
Вопрос:
Я столкнулся с некоторой проблемой при попытке позиционировать абсолютный позиционированный div. я предполагаю, что он работает так, как должен, однако я хочу, чтобы он оставался у родителя parent вместо parent, потому что у меня есть выпадающий список, и он будет следовать за родителем сбоку, когда я хочу, чтобы он оставался в верхней части, как отображается first li
with div. я создал jsfiddle, чтобы показать проблему. http://jsfiddle.net/trptR / можно ли это сделать только с помощью css или Javascript является обязательным?
HTML
<div id="navmenu">
<ul>
<li>example
<ul>
<li><a href="#">sub example1</a></li>
<li><a href="#">sub example2</a></li>
<li><a href="#">sub example3</a></li>
<li><a href="#">sub example4</a></li>
</ul>
</li>
<li>Test
<ul>
<li>Sub Test 1
<div>
<ul>
<li><a href="">Projekt</a></li>
</ul>
</div>
</li>
<li>Sub Test 2
<div>
<ul>
<li><a href="">Projekt</a></li>
</ul>
</div>
</li>
</ul>
</li>
</ul>
</div>
CSS
#navmenu{
display:inline-block;
background:red;
}
#navmenu ul{
list-style:none;
margin:0;
padding:0;
}
#navmenu ul li{
float:left;
position:relative;
display:block;
padding:0.5em;
}
#navmenu ul li ul{
position:absolute;
display:none;
border:solid 1px #333;
background:#fff;
}
#navmenu ul li:hover ul{
display:inline-block;
}
#navmenu ul li ul li{
float:none;
display:block;
position:relative;
}
#navmenu ul li ul li:hover{
background-color:#EBEBEB;
}
#navmenu ul li ul li div{
display:none;
width:10em;
height:14.6em;
background:blue;
position:absolute;
top:0;
left:6em;
border:solid 1px #000;
}
#navmenu ul li ul li:hover div{
display:block;
}
Комментарии:
1. для этого вам нужно удалить «position» из вашего родительского элемента, в данном случае из «li». Однако это усложняется. Как я сделал на этом этапе, у меня есть меню первого и 2-го уровней в одном и том же дереве ul li (точно так же, как вы реализовали), но фактическое содержимое меню находится на том же уровне, что и родительский родительский элемент, или в совершенно другом узле. и используйте javascript для ссылки друг на друга.
Ответ №1:
Не могли бы вы удалить position:relative
как из вашего #navmenu ul li
набора стилей, так и из вашего #navmenu ul li ul li
набора стилей? http://jsbin.com/ziqov/1/edit
Ответ №2:
Позиционирование — это ключ к успеху
Я не уверен, что понимаю объяснение вашей проблемы, но я думаю, что понимаю, когда вы говорите, что у вас есть
parentElementTop > parentElementBelow > element
что вы хотите, чтобы элемент был выровнен по parentElementTop, а не по parentElementBelow.
Чтобы выровнять элемент абсолютно по parentElementTop, все, что вам нужно сделать в CSS, — это не устанавливать position
значение relative
или absolute
на промежуточном parentElementBelow, и любой последующий абсолютно позиционированный элемент будет выровнен в соответствии с последним нестатически позиционированным предком. В вашем случае это будет parentElementTop, который вам нужен.
Комментарии:
1. Если вы посмотрите на второй выпадающий список в Jsfiddle, вы обнаружите, что div будет следовать за родительским элементом вниз по странице в зависимости от N элементов в списке. Я хотел бы, чтобы он все время оставался в верхней части с родительским элементом 1 div вместо того, чтобы скользить вниз со следующим родителем.
2. Вот именно. Установите позиционирование на UL, а не на LI.
Ответ №3:
подумайте об использовании
#navmenu > ul > li{
float:left;
position:relative;
display:block;
padding:0.5em;
cursor:pointer;
}
потому что в противном случае ваши селекторы перезаписывают друг друга.
Комментарии:
1.
>
Селектор нацелен на всех указанных дочерних элементов указанного родительского элемента вparent > child
отношениях. Видишь w3schools.com/CSSref/css_selectors.asp или developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started /…