Я не понимаю, почему никто не указывает на конкретную проблему, и некоторые ответы вводят в заблуждение, особенно принятый ответ.Проблема заключается в том, что OP не выбрал правило, которое могло бы переопределить свойство margin, установленное User Agent (UA) непосредственно в теге ul
.Давайте рассмотрим все правила со свойством margin, используемым OP.
body {
margin:0px;
...
}
Элемент body находится в DOM выше, а правило UA соответствует элементу ниже, поэтому UA выигрывает.Это способ наследования.Наследование - это средство, с помощью которого при отсутствии каких-либо определенных объявлений из любого источника, применяемого каскадом CSS, значение свойства элемента получается из его родительского элемента.Специфика для родительского элемента бесполезна, потому что правило UA напрямую соответствует элементу.
#mainNav{
margin:0 auto;
...
}
Это лучшая попытка, более специфический селектор #mainNav
, который соответствует элементу mainNav ниже в DOM, но применяется тот же принцип, поскольку элемент ul
все еще находится ниже этого элемента.в ДОМ.
#mainNav ul li{
...
margin:0;
...
}
Это зашло слишком далеко в DOM!Теперь селектор соответствует элементу li
, который находится ниже элемента ul
.
Итак, если предположить, что в правиле UA используется селектор ul
, а не !important
, что, скорее всего, имеет место, решение было бы простым ul { margin: 0; }
, но было бы безопаснее сделатьэто более конкретно, скажем #mainNav ul { margin: 0 }
.