Горизонтальное меню. Как продлить правую границу последнего элемента до правой границы родительского.

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

Чтобы пройти задание я знаю два варианта:

  1. Задать последнему элементу ширину непосредственно:

    .main-menu li:last-child {
    width: 130px;
    }

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

  1. Задать фон всему меню, но тогда при наведении на последний элемент будет некрасивый обрубок справа.

Пройти задание я, конечно, пройду, но удовлетворения не получу, т.к. смотреться это будет некрасиво. Если уходить от рамок задания тогда либо надо не на всю длину родителя делать меню, либо каким-то образом менять цвет всего меню при наведении на последний элемент. На второй вариант у меня нет идей, как это сделать.

Мой основной код:

html, body{
    margin:0;
    padding:0;
}
body{
    width:430px;
    min-height:280px;
    padding:10px;
    font-family:Arial, sans-serif;
    font-size:14px;
    line-height:1.4;
    background:#ecf0f1;
    
    
}
.main-menu {
    list-style: none;
    padding: 0;
    margin: 0;
    display: block;
}
.main-menu li {
    display: inline-block;
    background-color: #2980B9;
    margin: 0;
    border-left: 2px solid #2C3E50;
    margin-right: -5px;
}
.main-menu a {
    display: block;
    margin: 0;
    color: #FFFFFF;
    text-decoration: none;
    padding: 10px 15px;
}
.main-menu .active a,
.main-menu a:hover{
    background-color: #1ABC9C;
}

В данном случае легальнее всего будет просто задать фоновый цвет background-color: #2980B9; для всего .main-menu. Такой способ не универсальный, но тут подходит. Это скорее хитрость испытания, нежели рабочее решение для реальной жизни.

Таки немного не понял, как подогнать решение под 100%. Вернее понял, но это, скорее всего, неправильный метод,

Вот такой у меня получился код в CSS:

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

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

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

.main-menu li{
display: inline-block;
border-left: 2px solid #2C3E50;
background-color: #2980B9;
padding: 10px 15px;
margin-left:-5px;
}

.main-menu li a{
display: block;
color: #FFFFFF;
text-decoration: none;

}

.main-menu li:first-child {
margin-left: 0;
}

.main-menu li:last-child {
padding-right: 40px;
}

.main-menu .active {
background-color: #1ABC9C;
}

В данном случае расширил body на 5 px и сделал у последнего элемента правый внутренний отступ 40 пикселей.
Если же код оригинальный (ширина body 430px), то последний элемент всё равно либо не дотягивает, либо “убегает” на другую строчку. В итоге получается, что ничего не получается. =(
Как исправить?

Самым простым способом будет прописать ширину для .main-menu такую же как у body, и фон синий. Но тогда отрицательный отступ у пунктов меню не слева, а справа -5px.

1 лайк

Попробую. Правда, уже после полуночи -_-
Спасибо!

1 лайк