В селекторе .main-menu .sub-menu {…} пишу top: 0px; тогда все получается, если эту запись убрать, то получаю съехавшее вниз подменю, вопрос почему оно съезжает.
Скрин, когда убираю top: 0px;
И еще просьба к знающим людям, в целом правильность\оптимальность кода как оцените?
Каскад лучше делать максимально простым, например, вместо .main-menu .sub-menu a просто .sub-menu a.
Но это всё рекомендации, так-то код норм.
А насчёт координат top и left: абсолютно спозиционированный блок без указания координат (top, left, bottom, right) будет находиться в том месте, в котором он идёт в «потоке» блоков, только он выпадает из потока. Это поведение иногда бывает полезно, но обычно лучше всегда явно позиционировать абсолютные блоки.
Ваши ошибки в этом фрагменте:
.main-menu li li{
list-style:none;
padding:0;
margin:0;
display:block;
width:200px;
background-color:#1ABC9C;
position:absolute;
display:inline-block;
}
Во-первых, у вас 2 display получается. И ни один из них вам не нужен.
Посмотрите внимательно. Абсолютное позиционирование вы задаете каждому элементу подменю. Они выпадают из потока. Но дальше вы не определяете им место с помощью координат top и left. Причем пришлось бы позиционировать каждый элемент в отдельности.
Поэтому лучше абсолютное позиционирование задать всему подменю. А дальше с помощью top и left установить его на место.
У вас должно получиться примерно так:
.sub-menu {
padding: 0;
margin: 0;
position: absolute;
left: 190px;
top: 51px;
width: 200px;
}
.sub-menu li {
list-style: none;
}
Такой вариант даст вам 100%. Но вы можете доработать его, если хотите сделать, чтобы все отступы были кратны 5.
Спасибо большое за помощь, очень доходчиво объяснили. А я сидел голову ломал поздней ночью, наверно надо было на след день трезво посмотреть на код. Два раза написать дисплей, по-моему это уже через чур…