На Главную

Список ul c исчезающей фоновой картинкой в IE 6

February 3rd, 2009 by Yuriy Drozdov

Недавно столкнулся с проблемой исчезновения заднего фона у элемента списка в IE 6. Верстал я сайдбар темы для wordpress и был такой кусок кода (на самом деле он был другой, но для упрощения пусть он будет именно такой):

CSS:
  1. #sidebar {
  2.     float:left;
  3.     background: #fffdd5;
  4.     position:relative;
  5. }
  6. #sidebar ul {
  7.     margin:0;
  8.     padding:10px;
  9.     list-style-image:none;
  10.     list-style-type:none;
  11. }
  12. .mail {
  13.     background:url('email.png')  90% 2px no-repeat;
  14.     padding-right:22px;
  15. }

Выше был css код, ниже то, что было в html части.

HTML:
  1. <div id="sidebar">
  2.     <ul>
  3.         <li class="mail"><a href="#">Mail</a></li>
  4.         <li>Item 2</li>
  5.         <li>Item 3</li>
  6.     </ul>
  7. </div>

В результате можно было увидеть такое в Firefox:

Firefox IE hasLayout example

И, соответственно, такую картину мы можем увидеть в IE 6, причем задний фон у элемента мог как внезапно появиться, например, при скролинге или изминение размера окна, так и исчезнуть при аналогичных действиях.

IE hasLayout example

Решение проблемы

Лечится подобное методом тыка установкой свойства position:relative для списка.

CSS:
  1. #sidebar ul {
  2.     margin:0;
  3.     padding:10px;
  4.     list-style-image:none;
  5.     list-style-type:none;
  6.     position:relative;
  7. }

Вообще, подобные неурядицы с IE 6 связаны со свойством hasLayout элемента, которое не установлено в true. Как только установить его в true, многие проблемы в IE 6 пропадают. Осуществить это можно несколькими способами:

  • задать position:absolute
  • установить свойство float равным left или right
  • добавить свойство display: inline-block
  • Установить значение ширины или высоты (отличное от auto)
  • указать zoom:1, не забыв воспользоваться условными комментариями, чтобы это свойство видел только IE

Почитать подробнее о свойстве hasLayout можно здесь или на сайте msdn. Любителям великого и могучего языка советую заглянуть на хабр и ознакомится с переводом первого источника. Также можно посмотреть описание подобного бага на positioniseverything.net.

Спасибо Никите за комментарии к статье.

---------

Читайте каждый день новости про новые компьютерные гаджеты с usb-интерфейсом на 2usb.ru. Чтобы вашу рекламную кампанию запомнили, закажите оригинальные vip сувениры из нашего каталога.

Автор: Yuriy Drozdov

Похожие статьи:

  • Нет похожих статей

RSS комментариев

8 Комментариев

Comment by Delchyve Subscribed to comments via email
2009-02-03 15:23:16

Ты гений! Я как раз вчера вечером мучался с такой фигней. Так и оставил, решив добить потом. Теперь я знаю что делать )

Ох, уж этот ИЕ. Сколько еще он таит в себе… Спасиб, в общем ))

Comment by Yuriy Drozdov
2009-02-03 15:28:54

хе-хе, тебе спасибо за хвалебный отзыв :)

Comment by Delchyve Subscribed to comments via email
2009-02-03 15:33:31

Просто, действительно очень актуально. Я вчера, сидя без инета, всю голову сломал ))

 
 
 
Comment by Nikita Subscribed to comments via email
2009-02-04 10:37:44

Свойство назвается hasLayout.
Обычно его включают с помощью height: 1% или zoom: 1. Всё-таки с позиционированием лучше не злоупотреблять.

Comment by Yuriy Drozdov
2009-02-04 12:08:51

Тут можно поспорить.

Once a layout is applied the “hasLayout” flag is set.

Судя по всему свойсвтво называется “layout “, а “hasLayout” всего лишь флаг, который показывает есть ли данное свойство у объекта.

Comment by Nikita Subscribed to comments via email
2009-02-04 12:59:27

Можно. Но нет смысла. Если вдаваться в терминологию, то ответ в репозитории — Property «hasLayout» — http://msdn.microsoft.com/en-us/library/ms533776.aspx
Разницы в названии нет. Есть суть.

Comment by Yuriy Drozdov
2009-02-04 13:04:02

Уговорил, сейчас исправлю в статье :)

(Вложеность комментариев заканчивается на этом уровне)
 
 
Comment by Nikita Subscribed to comments via email
2009-02-04 13:00:59

А само понятие «layout» это принцип, по которому отрисовываются те или иные элементы в IE.

 
 
 

Извините, комментарии закрыты.