Поскольку вы фактически добавляете состояние :hover
к <li>
s в <ul>
, граница родительского элемента <ul>
не включена в область :hover
. Это решило бы вашу проблему, добавив границу к каждому <li>
вместо родительского <ul>
. Обязательно добавьте левое и правое поля от 0 до <li>
s, и даже если вы сделаете это, вам все равно может понадобиться добавить отрицательное левое поле или левую позицию, чтобы удалить пробелы в границе, а также добавить стили переопределения для подменю <li>
s, если они также заканчиваются нижней границей.
<ч />
РЕДАКТИРОВАТЬ: Хорошо, у меня есть решение, которое, надеюсь, будет работать для вас, используя следующий HTML:
<ul>
<li>Main1
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main2
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main3
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main4
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
</ul>
и этот CSS:
ul { background:#ccc; border-bottom:5px solid #0c0; height:25px; }
ul li { cursor:pointer; display:inline-block; position:relative; height:30px;
zoom:1; _display:inline; }
ul li:hover ul { display:block; }
ul li ul { border:0 none; display:none; position:absolute; top:30px; }
ul li ul li { display:inline; padding:5px; }
Ключевые части здесь:
- Установить высоту
ul
, чтобы она была меньше высоты основного ul li
на величину, равную border-width
- Установить
display:inline-block
на li
, чтобы атрибут высоты вступил в силу
- (Примечание:
zoom:1; _display:inline;
для IE6)
- Установите
position:relative
на основной ul li
и position:absolute
на подчиненной 'ul li ul' со значением 'top' основной высоты 'ul li'
Проверено и работает: http://jsfiddle.net/TKrSM/1/
(возможно, придется настроить высоту и верхние значения для отступов в вашей версии)