2016-07-23 1 views
2

Это моя первая реализация стандартного html nav. Тем не менее элементы списка внутри nav не располагаются внутри nav так, как я их хочу, и хотя я изменил большинство очевидных свойств, которые приходят на ум, я не смог:Почему есть пробелы, разделяющие элементы списка из его parentr?

  • Центр элементы Li внутри нав
  • Сделать ширина элементов Li прекрасно вписываются в нав

Я не понимаю, почему они по умолчанию, расположенным так неловко справа от своего родительского контейнера, или почему установка 'width: 100%' не является решением. Когда я устанавливаю позиционирование на элементах li в абсолютном порядке, кажется, что он замалчивает все, поскольку мне нужно, чтобы каждый элемент списка располагался относительно того, где находится элемент до его размещения.

Кажется, есть несколько возможных путей решения этой проблемы, но они кажутся хакерскими, и мне интересно, есть ли более очевидное решение, которого мне не хватает, чтобы увидеть.

nav { 
 
    width: 40%; height: 500px; 
 
    left: 50%; 
 
    transform: translateX(-50%); 
 
    position: relative; 
 
    border: 2px solid black; 
 
} 
 

 
nav ul li { 
 
    list-style: none; text-align: center; 
 
    width: 99%; height: 100%; 
 
    position: inherit; 
 
    padding: 1%; 
 
    border: 2px solid black; 
 
    border-top: none; 
 
    margin: 0; 
 
    display: block; 
 
    background: blue; 
 
}
<nav><!-- 
 
    --><ul><!-- 
 
    --><li class="user">WelcomeVids</li> 
 
     <li class="user">Diablo</li> 
 
     <li class="user">FreeCodeCamp</li> 
 
     <li class="user">OtherStuff</li> 
 
     <li class="user">Dota2</li><!-- 
 
    --></ul><!-- 
 
--></nav>

Чтобы увидеть результат, вид мой Codepen: http://codepen.io/sentedelviento/full/grzrgR/

ответ

3

Это происходит потому, что большинство браузеров по умолчанию для добавления padding-left к <ul>. Вы можете переопределить:

/* Added */ 
 
ul { 
 
    padding-left: 0; 
 
} 
 

 
nav { 
 
    width: 40%; height: 500px; 
 
    left: 50%; 
 
    transform: translateX(-50%); 
 
    position: relative; 
 
    border: 2px solid black; 
 
} 
 

 
nav ul li { 
 
    list-style: none; text-align: center; 
 
    /* width: 99%; height: 100%; */ 
 
    position: inherit; 
 
    padding: 1%; 
 
    border: 2px solid black; 
 
    border-top: none; 
 
    margin: 0; 
 
    display: block; 
 
    background: blue; 
 
}
<nav><!-- 
 
    --><ul><!-- 
 
    --><li class="user">WelcomeVids</li> 
 
     <li class="user">Diablo</li> 
 
     <li class="user">FreeCodeCamp</li> 
 
     <li class="user">OtherStuff</li> 
 
     <li class="user">Dota2</li><!-- 
 
    --></ul><!-- 
 
--></nav>

+0

Это полностью решить мою проблему, которую я описал. Однако установка ширины до 100% не работает, так как отступы установлены на 1%, поэтому я установил ее на 99%. Тем не менее, граница установлена ​​в 2px, чтобы узнать, как это учитывать при определении процента ширины? –

+0

@AllisonStafford Если я правильно понимаю вас, тогда я не думаю, что вам нужна ширина: 100%. У вас уже есть 'display: block' на ваших' li ', что сделает их такими же широкими, как и их родитель. Вы заметите, что я также вынул 'height: 100%' на 'li', потому что он ничего не делал. –

+1

Кроме того, было бы неплохо взглянуть на [Сброс CSS] (http://cssreset.com/what-is-a-css-reset/). Они предназначены для таких вопросов. –

0

Я бы рекомендовал следующие изменения в CSS:

nav ul { 
    margin: 0; 
    padding: 0; 
} 

nav ul li { 
    box-sizing: border-box; 
    width: auto; 
} 
Смежные вопросы