Испытание: многоуровневое меню [15/28] Отступы в подменю

Не могу задать подходящие отступы пунктам подменю. Помогите пожалуйста.

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 {
width: 200px;
margin: 0;
padding: 0;
list-style: none;
}

.main-menu ul {
margin: 0;
padding: 0;
list-style: none;
}

.main-menu > li {
background: #2980b9;
border-bottom: 2px solid #2c3e50;
}

.main-menu a {
display: block;
color: #ffffff;
text-decoration: none;
padding: 10px 10px 10px 15px;
}

.main-menu > .active > a {
background: #1abc9c;
border-bottom: 2px solid #2c3e50;
}

.main-menu li li a {
color: #2980b9;
text-decoration: underline;
background-color: #ffffff;
}

скрин:

Вот так получилось 100%, но по-моему я что-то намудрила…

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 {
width: 200px;
margin: 0;
padding: 0;
list-style: none;
}

.main-menu ul {
margin: 0;
padding: 15px 15px 5px 15px;
list-style: none;
background-color: #ffffff;
}

.main-menu ul a:nth-child(1) {
padding-bottom: 10px;
}

.main-menu > li {
background: #2980b9;
border-bottom: 2px solid #2c3e50;
}

.main-menu a {
display: block;
color: #ffffff;
text-decoration: none;
padding: 10px 10px 10px 15px;
}

.main-menu > .active > a {
background: #1abc9c;
border-bottom: 2px solid #2c3e50;
}

.main-menu li li a {
padding: 0px;
color: #2980b9;
text-decoration: underline;
background-color: #ffffff;
}

.main-menu ul a {
padding-top: 5px;
padding-bottom: 5px;
text-decoration: underline;
}

В общем мысль у вас правильная. Отступы подменю делятся на отступы между ссылками и отступы списка.

Эти два селектора выбирают одни и те же элементы. Можно записать всё в одном правиле.

Это правило лишнее здесь. Попробуйте обойтись без него.

Вот так правильно?

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 {
width: 200px;
margin: 0;
padding: 0;
list-style: none;
}

.main-menu ul {
margin: 0;
padding: 10px 15px 10px 15px;
list-style: none;
background-color: #ffffff;
}

.main-menu > li {
background: #2980b9;
border-bottom: 2px solid #2c3e50;
}

.main-menu a {
display: block;
color: #ffffff;
text-decoration: none;
padding: 10px 10px 10px 15px;
}

.main-menu > .active > a {
background: #1abc9c;
border-bottom: 2px solid #2c3e50;
}

.main-menu li li a {
padding: 0px;
color: #2980b9;
text-decoration: underline;
background-color: #ffffff;
padding-top: 5px;
padding-bottom: 5px;
}

Здесь одной строкой можно написать: padding: 5px 0;
А в целом правильно.

Спасибо!

Чтобы не плодить темы, спрошу тут. Задание на 100%. Оцените качество кода, пожалуйста.

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 {
width: 200px;
padding: 0px;
background: #2980b9;
margin-top: 0px;
}

.main-menu li {
list-style: none;
}

.main-menu > li {
padding-top: 10px;
padding-bottom: 10px;
border-bottom: 2px solid #2c3e50;
}

.main-menu > li > a {
text-decoration: none;
color: #ffffff;
padding-left: 15px;
}

.main-menu > li:first-child {
background: #1abc9c;
padding-bottom: 0px;
}

.main-menu ul {
padding: 0px;
background: #ffffff;
margin-top: 10px;
border-top: 2px solid #2c3e50;
}

.main-menu ul li {
padding: 5px 15px;
}

.main-menu ul li:first-child {
padding: 15px 0 5px 15px;
}

.main-menu ul li:last-child {
padding: 5px 0 15px 15px;
}

.active ul li a {
color: #2980b9;
}

Здесь в селекторе лучше писать .active. Всё же главное, что вы стилизуете активный элемент меню, а не то, что он оказался первым по порядку.

Отступы сверху и снизу можно задать списку подменю, тогда код будет короче.

Спасибо!

Добрый день, Ineska!
Снова обращаюсь к Вам за помощью. Не могу понять как обнулить отступы 2 пункта подменю.
Отправляю код и скрин.
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 {
margin: 0;
padding: 0;
list-style: none;
width: 200px;
}

.main-menu ul {
margin: 0;
padding: 0;
list-style: none;
}

.main-menu > li {
border-bottom: 2px solid #2c3e50;

}

.main-menu a {
display: block;
padding: 10px 15px;
text-decoration: none;
color: #ffffff;
background-color: #2980b9;
}

.main-menu > .active > a {
background-color: #1abc9c;
border-bottom: 2px solid #2c3e50;
}

.main-menu li li a {
padding: 15px 15px;
background-color: #ffffff;
color: #2980b9;
text-decoration: underline;
}

.main-menu li li a:nth-child(2) {
padding-top: 0;
padding-bottom: 0;
}

это правило выберет вторую ссылку внутри li. А разве у вас внутри каждого li больше одной ссылки? поэтому это правило и не работает.

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

ну и не забывать, что отступы можно задавать не только ссылкам, но и самому подменю целиком.

Спасибо!
Свою ошибку по a:nth-child(2) понял.
Тогда возвращаюсь к варианту .main-menu li li a { padding: 5px 15px;…
В этом случае интервал между пунктами подменю в норме.
Но теперь надо искать как увеличить на 10рх отступы сверху у 1-го пункта и снизу у последнего.

Проработал несколько вариантов селекторов для правила “padding: 10px 0;”, чтобы задать верхний и нижний отступы самому подменю целиком, но правильного не нашел.

.main-menu ul {padding: 10px 0;} у вас точно не сработал?

1 лайк

Такой вариант, видимо, я не пробовал.
Теперь все стало как надо! 100%!
Спасибо!