Прошел на 100%., но походу адовый код, есть чувство что можно как-то упростить. Кто что скажет?

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 li{
    display:inline-block;
    white-space:nowrap;
    margin-left:-4px
}
.main-menu{
    padding:0;
    margin:0 0 0 4px;
    width:426px;
    background:#2980B9;
}
.main-menu a{
    display:block;
    padding:10px 15px;
    background:#2980B9;
    color:#fff;
    text-decoration:none;
    border-left:2px solid #2C3E50;
}
.main-menu .active a{
    background:#1ABC9C;  
}
li:nth-child(1) a{
    margin-right:-1px;
}
li:nth-child(2) a{
    margin-right:-1px;
}
li:nth-child(3) a{
    margin-right:-1px;
}

если что это Мастерская: создаём меню / Испытание: горизонтальное меню [20/28]

Вот мой код:

.main-menu {
list-style: none; /* может и не нужен, когда проходил задание, писал на автомате */
margin: 0;
padding: 0;
background-color: #2980B9;

/* Указывать ширину для этого блока нет необходимости */

}
.main-menu li {
display: inline-block;
margin-right: -5px; /* Этот марджин применяется к элементам списка, поэтому селекторы вида: li:nth-child(n) a {} с марджинами — не нужны */

}
.main-menu a {
border-left: 2px solid #2C3E50;
display: block;
background-color: #2980B9;
padding: 10px 15px;
color: #fff;
text-decoration: none;
}
.main-menu .active a {
background-color: #1ABC9C;
}

На абсолютную истину не претендую.

2 лайка

У меня такой код получился на 100%:

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{
margin: 0 ;
padding: 0 0 0 5px;
width:427px;
}

.main-menu li{
display: inline-block;
margin-left: -4px;
white-space:nowrap;
}

.main-menu a{
display: block;
text-decoration: none;
border-left:2px solid #2c3e50;
color: #ffffff;
background: #2980b9;
padding:10px 15px;
margin-left: -1px;

}    

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

.main-menu li:nth-child(4){
width:135px}

Величина не кратна пяти. Отрицательный отступ в 5px разделили на два, зачем - не понятно.

Если этого не сделать, то последний элемент у меня “выпадает” на следующую строку- не вмещается. Поэтому немного увеличил. Можно сделать и больше, кратно 5, но главное - не меньше

а зачем вам вообще задавать ширину? ul - блочный элемент и по умолчанию растянется на всю ширину родителя.

Потому что, если не задавать, то не получится 100%

а как же у меня без ширины 100% получилось? наверное, магия и личное обаяние.

ну а если серьезно, то вот вы сами пишите:[quote=“armornik, post:6, topic:2873”]
Если этого не сделать, то последний элемент у меня “выпадает” на следующую строку- не вмещается. Поэтому немного увеличил. Можно сделать и больше, кратно 5, но главное - не меньше
[/quote]

ближайшее “больше чем 427, но при этом кратное 5” - это 430рх. А это в свою очередь - ширина, прописанная для боди. Т.е. та ширина, на которую ul и так растянется по умолчанию, если width не прописывать.

1 лайк

Мой код таков. Единственная трудность с которой столкнулся - нехватка ширины в последнем блоке. В итоге методом тыка дошёл до 136 px и тогда вышло 100%. Где я ошибся?

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

}

.main-menu li{
display: inline-block;
background-color: #2980B9;
margin-right: -5px;
}

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

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

.main-menu a{
display: block;
color: #fff;
text-decoration: none;
padding: 10px 15px;
border-left: 2px solid #2C3E50;
}

а если точнее - нехватка окрашенной области в конце меню.
если вы зададите синий цвет не пунктам меню (li), а для всего списка ul, то вам не придется подбирать ширину последнего пункта

Мой 100% вариант решения задачи. Пользуйтесь!)

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

.main-menu li{
display: inline-block;
margin-right: -5px;
}

.main-menu li a{
display: block;
padding: 10px 15px;
border-left: 2px solid #2c3e50;
text-decoration: none;
color: white;
}

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

Вроде самый минимальный код, 100% решение

/* Общий блок меню /
.main-menu {
width: 200px;
margin: 0;
padding: 0;
list-style: none;
}
/ Все ссылки меню /
.main-menu a {
padding: 10px 15px;
display: block;
color: white;
text-decoration: none;
background: #2980b9;
border-bottom: 2px solid #2c3e50;
}
/ Верхняя ссылка /
.main-menu .active > a {
background: #1abc9c;
}
/ Блок подменю /
.active ul {
list-style: none;
padding: 10px 0;
border-bottom: 2px solid #2c3e50;
background: white;
}
/ Ссылки блока подменю */
.active ul a {
padding: 5px 15px;
color: #2980b9;
background: white;
text-decoration: underline;
border: 0;
}

97 % и без ‘костылей’

Код

body,html{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}body ul{margin:0;padding:0}body ul li{display:inline-block;background-color:#2980b9;padding:10px;border-left:2px solid #2c3e50;margin-left:-5px}body ul li a{text-decoration:none;color:#fff}body ul li:hover{background-color:#1abc9c}

просто не люблю попадать в пиксели :slight_smile:

Следите за форматированием кода. В этой “каше” не разобраться.

Это препроцессор так скомпилировал )

Не знаю насколько правильно,но зато коротко получилось)

.main-menu {
margin-left: -40px;
margin-top: 0px;
}

li {
list-style: none;
display: inline-block;
border-left: 2px solid #2c3e50;
padding: 10px 15px;
margin-right: -5px;
background-color: #2980b9;
}

a {
color: white;
text-decoration: none;
}
.active {
background-color: #1abc9c;
}

li:last-child {
width: 89px;
}

display: block ???

20 минут решал проблему с последним блоком списка и только так получилось

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

body {
width: 600px;
min-height: 280px;
padding: 10px;

font-size: 14px;
line-height: 1.4;
font-family: “Arial”, sans-serif;

background-color: #ecf0f1;
}

.main-menu {
width: 400px;
margin: 0;
padding: 0;
list-style: none;
background: #2980b9;
}

.main-menu li {
display: inline-block;
margin-right: -5px;
}

.main-menu li a {
display: block;
padding: 10px 15px;
border-left: 2px solid #2c3e50;
text-decoration: none;
background-color: #2980b9;
color: #fff;
}

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

Кто то знает как решить его без 20 и 24 строки?