Блочно-строчные элементы ведут себя как текст, поэтому если в коде есть пробел между элементами, то он отображается и на странице. Этот пробел часто увеличивает отступы между элементами и они не помещаются в родительский блок в одну строку, хотя по размерам должны бы.
Решить проблему можно несколькими способами. Пример:
1. Убрать пробелы:
<ul>
<li>
Один</li><li>
Два</li><li>
Три</li>
</ul>
2. Отрицательный внешний отступ margin-right:-4px
у элементов. Способ заключается в том, что мы уменьшаем отступ после инлайн-блока на ширину пробела (~4px). А если нам нужно, чтобы элементы стояли вплотную друг к другу, то задаём отрицательный отступ.
Проблема с этим способом заключается в том, что размер пробела может быть разным в разных шрифтах и может изменяться при изменении размера шрифта.
nav a { display: inline-block; margin-right: -4px; }
3. Установить размер шрифта пробела, равный нулю. Способ заключается в том, что мы задаём нулевой размер шрифта у контейнера инлайн-блоков, а самим инлайн-блокам задаём исходный размер шрифта. Способ не работает, если вы используете относительные размеры шрифта.
nav { font-size: 0; }
nav a { font-size: 16px; }
4. Не использовать закрывающий тег. Относится только к спискам.
<ul>
<li>Один
<li>Два
<li>Три
</ul>
5. Использовать flexbox
nav {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}