IE 6 и select

Вторник, июля 15, 2008 1:09
Рубрика CSS

Сегодня столкнулся с такой проблемой. Необходимо было вывести слой поверх выпадающего списка (select). Разумеется, в нормальных браузерах все отображалось так как нужно. Но вот IE6 отличился и доказал, что у него свой взгляд на правильное отображение страницы.

Оказывается что select в IE6 не только плохо воспринимает CSS стили, но еще и ни чем не перекрывается и отображается поверх всех слоев! Не помогает даже z-index.

К счастью, решение проблемы нашлось довольно быстро. Для того чтобы скрыть select надо поверх него вывести iframe. Вот как это делается:

HTML

<select>
  <option>123</option>
</select>
<div id="layer">
  <iframe></iframe>
  <p>Слой с абсолютным позиционированием</p>
</div>

CSS

#layer {
  position:relative;
  top:10px; left:20px;
  width:150px; height:100px;
}
#layer iframe {
  position:absolute;
  width:150px; height:100px;
  border:none;
  z-index:-1;
  _filter:mask();
}
select { width:100px; }

filter:mask() позволяет скрыть iframe в IE. Такого же эффекта можно добиться с помощью filter:alpha(opacity=0). Для того чтобы iframe не перекрывал текст, ссылки и прочие элементы, мы задаем для него отрицательный z-index:-1. Можно также скрыть iframe для остальных браузеров через условные комментарии (для надежности).

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

Метки: , ,

5 коммент. к “IE 6 и select”

  1. Snowcore пишет:

    17 февраля 2009 в 20:11

    Вот сидим, голову ламаем над этим, блин!
    Другие решения не впечатляют: некоторые предлагали вообще написать свой select средствами javascript :( Тогда вообще лучше взять и написать новый браузер!!!

  2. Дмитрий пишет:

    23 февраля 2009 в 16:10

    Спасибо за решение! Попробую, сам столкнулся с той же проблемой. Думал перерисовывать select.

  3. Stan пишет:

    26 октября 2009 в 16:05

    Помогите разобраться в чем может быть проблема, http://new.konsib.com/ru/barnaul.html - здесь есть SELECT в самом верху, на всех браузерах все нормально - padding-bottom: 10px; как положено, а на Осле Шестерке как всегда - SELECT залез наверх всего и никаким paddingам не подчиняется собака…
    Уже все перепробовал, подскажите как быть…
    Заранее благодарю за ответ!

  4. axel пишет:

    18 апреля 2010 в 23:01

    да ну iframe а по другому нельзя че ли…

  5. Despotic пишет:

    11 августа 2010 в 18:48

    Спасибо! Метод работает.
    Только при скролле select-ы, прикрытые таким образом, всё равно просвечиваются.
    Может, кто-то знает, как лечить?

Оставить комментарий или два