Как мне избавиться от пробелов между пробелами без манипуляции с HTML?

Это мой код для выпадающего меню. Я вытащил код из учебника, который произвел это: http://www.webdesigndev.com/wp-content/uploads/2009/07/fancydropdown.html

Но вместо текстовой навигации у меня есть изображения, как вы можете видеть в CSS, прикрепленном к идентификатору span. С помощью этого кода я получаю меню выпадающего меню для каждого диапазона правильно, я просто не могу избавиться от пробела между ними.

Я знаю, что новая строка в HTML между divs/spans создает пробелы, но я хочу знать, как избавиться от них в CSS.

<div id="menu">
<ul class="tabs">
<li class="hasmore"><a href="#"><span id="bird"></span></a>
    <ul class="dropdown">
        <li><a href="#">Menu item 1</a></li>
        <li><a href="#">Menu item 2</a></li>
        <li class="last"><a href="#">Menu item 6</a></li>
    </ul></li><li class="hasmore"><a href="#"><span id="wild"></span></a>
    <ul class="dropdown">
        <li><a href="#">Menu item 1</a></li>
        <li><a href="#">Menu item 2</a></li>
        <li class="last"><a href="#">Menu item 6</a></li>
    </ul>
</li>

</ul>
</div>

Это пример CSS:

#menu ul
{
margin: 0 auto;
}

ul.tabs
{
display: table;
margin: 0;
padding: 0;
list-style: none;
position: relative;
}

ul.tabs li
{
margin: 0;
padding: 0;
list-style: none;
display: table-cell;
float: left;
position: relative;
}

ul.tabs a
{
position: relative;
display: block;
}

#bird {
background-image:url(images/birdingnav.png);
width:80px;
height: 20px;
text-indent:-9009px;
font-size: 0px;
border: 0;
}

#wild {
background-image:url(images/wildernessnav.png);
width:119px;
height: 20px;
text-indent:-9009px;
font-size:0px;
border: 0;
}

Что мне нужно сделать для этого кода в CSS, чтобы избавиться от пробела, который появляется между моими изображениями в пространстве?

Ответ 1

Попробуйте установить display: inline-block на элементы изображения. Предполагается, что промежутки должны быть встроенными, поэтому лучшим решением было бы не использовать интервалы вообще, но, поскольку вы сказали, не меняйте html...

Посмотрите, как между изображениями в этой скрипте нет пробелов: http://jsfiddle.net/rVTZc/

Ответ 2

Это обычная проблема. Чаще всего с inline-block чем inline, поскольку inline обычно означает его в потоке текста, где имеет значение пробел. С помощью inline-block люди используют его для компоновки, а пустое пространство становится проблемой.

Существует новый CSS-свойство, специально предназначенный для решения этой проблемы - white-space:collapse; и white-space-collapse: discard;, но, к сожалению, он еще не поддерживается ни одним из основных браузеров. Так что не вариант.

В отсутствие этого решения этого, как правило, немного хаки.

Одним из распространенных решений является установка элемента контейнера в font-size:0;. Это фактически делает ненужным пустое пространство; он все еще там, но не занимает ни одного места. Недостатком здесь является то, что вам нужно снова установить размер шрифта для внутренних элементов. Если вы используете динамический макет, с размерами шрифтов em, это может быть сложно обрабатывать.

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

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

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

Ответ 3

Из этого стиля:

#menu ul li a:hover span {
    background: url("images/topselectionright.png") repeat scroll right top transparent;
}

удалить

right top

Ответ 4

Если вы правильно поняли, возможно, ul { font-size:0 } поможет?