Контрольная высота <li> в IE 7

У меня есть меню, созданное с тегами <ul> и <li>. Я хочу иметь небольшие разделители между разделами. Для разделителей я просто установил цвет фона и короткую высоту на <li>. Выглядит очень хорошо... кроме IE7, где <li>, похоже, отказывается изменять его высоту, чтобы быть короче, чем все остальные <li> в том же <ul>. Я пробовал разные способы повлиять на высоту разделителя <li> (высота, высота строки, размер шрифта) без успеха.

У меня есть исправление, которое оставит высоту разделителя как есть и окрасит весь фон в IE 7, но это не совсем то, что я хочу (разделитель слишком большой). Может ли кто-нибудь подумать о другом способе управления высотой тега <li>?

Вот пример - в представлении совместимости с переключением IE8 будет отображаться проблема:

<style type="text/css">
.menu {
    width:100px;
}
.menu ul {
    list-style-type:none; 
    border-top: solid 1px red;
    padding: 0px;
    margin:0px;
}
.menu ul li {
    border-bottom: solid 1px red;
    padding: 0px;
    margin:0px;
    white-space:nowrap;
}
.menu ul li a {
    font-size: 13px;
    text-decoration: none;
    color: black;
    display: block;
    padding: 3px;
}
.menu ul li a:hover {
    color: blue;
    text-decoration: underline;
}
.menu ul li.separator {
    height:4px;
    background-color:red;
}

</style>

<div class="menu">
<ul>
  <li><a href="#">Item 1</a></li>
  <li><a href="#">Item 2</a></li>
  <li><a href="#">Item 3</a></li>
  <li class="separator"></li>
  <li><a href="#">Item 4</a></li>
  <li><a href="#">Item 5</a></li>
  <li><a href="#">Item 6</a></li>
</ul>

</div>

Ответы

Ответ 1

Проблема заключается в том, что ie6/ie7 будет расширять пустой элемент до высоты вашего шрифта. Вы можете обойти это, добавив font-size:0 и line-height:0 в .menu ul li.separator.

Лучшим решением было бы добавить более толстую нижнюю границу к <li>, которая находится перед разделителем.

.menu ul li.sep {border-bottom-width:6px}

<div class="menu">
  <ul>
    <li><a href="#">Item 1</a></li>
    <li><a href="#">Item 2</a></li>
    <li class="sep"><a href="#">Item 3</a></li>
    <li><a href="#">Item 4</a></li>
    <li><a href="#">Item 5</a></li>
    <li><a href="#">Item 6</a></li>
  </ul>
</div>

Ответ 2

Установите для css для LI значение display: block;.

Ответ 3

Возможно, вам стоит попробовать установить li следующим образом:

li{
   display:block;
   float:left;
   height:myHeight;
   clear:right;//may be necessary, can't check with IE7
}

Это то, что я сделал с аналогичными проблемами.

Ответ 4

Вы пытались добавить атрибут line-height к .menu ul li?

Вы пытались использовать горизонтальное правило <hr> вместо разделителя? Если вы используете горизонтальное правило, вы можете установить margin-top и margin-bottom на 0px и посмотреть, что произойдет. Невозможно гарантировать, что он выглядит одинаково в IE и других браузерах, но, по крайней мере, вы пробовали. =)

Ответ 5

В дополнение к ответу Daniel A. White вы можете поэкспериментировать с линейной высотой, чтобы центрировать текст по вертикали и создать необходимую высоту.

Ответ 6

Сделайте то, что было предложено в предыдущих сообщениях. Если эти изменения вызывают проблемы в браузерах, отличных от IE, вы можете сделать следующее, чтобы использовать только IE:

.selector {
    prop1 : val1; /* default value for all browsers */
    *prop1 : val2; /* only IE will pick this one up and it will override the initial value of prop1. */
}

Это работает намного лучше, чем пытаться сделать специальный комментирование, чтобы включить отдельные таблицы стилей и т.д.