6/28 Тень от li

Помогите разобраться как избавиться от такой проблемы: геометрия правильная вся но вот синий фон выезжает во вложенный список как только я там padding вставляю. если ставлю margin то вообще ведёт себя непонятно.
вот весь код

html,
body {
margin: 0;
padding: 0;
}

body {
width: 280px;
min-height: 280px;
padding: 10px;
font-family: “Arial”, sans-serif;
font-size: 14px;
line-height: 1.4;
background: #ecf0f1;
}

.main-menu
{
background: orange;
width: 200px;
padding: 0;
margin: 0;
}

ul
{
list-style: none;
padding: 0;
}

.active ul
{
border-bottom: 2px solid #2c3e50;
padding: 10px 0; /* Вот это место >*/
}

.main-menu>li
{
padding: 0;
background-color: #2980b9;

}

.main-menu>li>a
{
color: #ffffff;
text-decoration: none;
padding: 10px 15px;
border-bottom: 2px solid #2c3e50;

}

.main-menu .active>li
{
border-bottom: 2px solid #2c3e50;
}
.main-menu a
{
display: block;
}

.main-menu .active>a
{
background: #1abc9c;
}

.main-menu li li>a
{
background-color: #ffffff;
padding: 5px 15px;
color:#2980b9;
}

В этом правиле добавьте белый фон.

Благодарю! А откуда взялся этот синий фон можете подсказать? Каким образом он перетянулся из основных пунктов? вроде эти блоки логически никак не связаны…

Как вы понимаете “логически связаны”?
Фон берется из этого правила:

.main-menu > li {
    padding: 0;
    background-color: #2980b9;
}

Пункт li.active включает в себя и подменю тоже. Когда вы пишете margin-top у подменю, вы отодвигаете весь блок вместе с его фоном и отображается фон пункта li.
Изучите инструменты разработчика в браузере. В Мозиле открывается с помощью сочетания клавиш ctrl + shift + c. С помощью инспектора вы сможете сами прослеживать, что и откуда взялось.

1 лайк

ну как же не связаны.
Вот представьте себе такой пример
<div class="block1"> <div class="block2">Текст</div></div>
Для блока1 зададим бэкграунд синего цвета, а для блока2 никакой задавать не будем. Как вы думаете на каком фоне будет слово “Текст”? Правильно, на синем. У блока2 бэкграунда нет, но он есть у блока 1, расположенного ниже.

У вас конструкция чуть более многослойная: li (синий фон), в нем ul (без фона), в нем следующие li(без фона), а дальше а (белый фон). а по размеру совпадает с li (у li нет отступов) и полностью закрывает его своим белым цветом, а вот у ul есть внутренние падинги, поэтому область содержимого (закрашенная белым за счет а) меньше по размеру, чем сам ul, поэтому у нас и появляется область, для которой фон не прописан, и которую займет “просвечивающийся с более нижнего слоя” синий фон.

1 лайк

Да) теперь дошло)