Jump to content
  • 0

Ширина выпадающего списка в IE


Veseloff
 Share

Question

Итак, имеем select с шириной, например, в 200px. В браузерах выпадающий список занимает такую ширину, какую надо - то есть он может быть и шире, чем 200, если текст не влезает (по аналогии overflow: visible) или можно тегам option задать свою ширину. А вот в IE ширина выпадающего списка строго равна ширине select-а. Кто-нибудь сталкивался с такой проблемой? Как такое лучше решать? Есть какие-то решения в YUI, но его ставить не хотелось бы.

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0
Итак, имеем select с шириной, например, в 200px. В браузерах выпадающий список занимает такую ширину, какую надо - то есть он может быть и шире, чем 200, если текст не влезает (по аналогии overflow: visible) или можно тегам option задать свою ширину. А вот в IE ширина выпадающего списка строго равна ширине select-а. Кто-нибудь сталкивался с такой проблемой? Как такое лучше решать? Есть какие-то решения в YUI, но его ставить не хотелось бы.

Когда-то очень давно я делал решение данной проблемы.

Селект оборачивается в div, которому присваивается некая ширина и высота. Высоту можно присваивать динамически. Селекту ставим 100% ширины. При фокусе селекта его делаем position: absolute. Селект отрывается из потока, и становится на 100% ширины. При блюре возвращаем его в поток.

Сейчас я селекты вообще не ограничиваю по ширине.

Link to comment
Share on other sites

  • 0
Селект оборачивается в div, которому присваивается некая ширина и высота. Высоту можно присваивать динамически. Селекту ставим 100% ширины. При фокусе селекта его делаем position: absolute.

Так, это понятно.

Селект отрывается из потока, и становится на 100% ширины. При блюре возвращаем его в поток.

А вот это непонятно. Чо это за поток такой?

Link to comment
Share on other sites

  • 0
А вот это непонятно. Чо это за поток такой?

Есть поток дивов, они идут друг за другом в потоке:

<div>Поток 1</div>
<div>Поток 2</div>
<div>Поток 3</div>
<div>Поток 4</div>
<div>Поток 5</div>

И тут бац, и 4-ый получает абсолют и выключается из потока, т.е. ему уже плевать на всех остальных, он становиться над всеми, сверху. Как бы над первым, а первый находится под ним в общем потоке.

<div>Поток 1</div>
<div>Поток 2</div>
<div>Поток 3</div>
<div>Поток 5</div>

Link to comment
Share on other sites

  • 0
Так, это понятно.

А вот это непонятно. Чо это за поток такой?

flow - поток элементов.

С точки зрения браузера, элементы поступают на рендеринг сверху вниз. Первым приходит декларация доктайпа, второй - html, третим тег head и так далее. Как в тетрисе элементы укладываются сверху вниз. Это и есть поток. Координаты каждого последующего элемента, в нормальном потоке, зависят от предыдущего. Исключение составляют элементы с position: absolute и fixed. Эти элементы вырваны из потока и находятся над ним.

Edited by s0rr0w
Link to comment
Share on other sites

  • 0

Окей, теперь про потоки понятно стало всё. С присовением селекту position: absolute на onfocus тоже вроде всё просто. Только вот такой момент, что при клике на селект элементу ставится position: absolute как и задумано, а вот список опшинов не раскрывается - приходится вотрой раз кликать по нему, чтобы открыть. Это как-нибудь лечится?

Link to comment
Share on other sites

  • 0
Окей, теперь про потоки понятно стало всё. С присовением селекту position: absolute на onfocus тоже вроде всё просто. Только вот такой момент, что при клике на селект элементу ставится position: absolute как и задумано, а вот список опшинов не раскрывается - приходится вотрой раз кликать по нему, чтобы открыть. Это как-нибудь лечится?

Ага, точно, помню, было такое. Лечилось странным каким-то образом, по типу node.fireEvent('onclick');

Link to comment
Share on other sites

  • 0
Ага, точно, помню, было такое. Лечилось странным каким-то образом, по типу node.fireEvent('onclick');

Не помнишь каким? А то я уже всё попробовал - ну никак не выходит.

Link to comment
Share on other sites

  • 0

<html>
<head>
<style type="text/css">
.wide { position: absolute; width: auto !important; }
</style>
<script type="text/javascript">
function expand ( node ) {
if ( !node.hasAttribute ) node.className="wide";
}
function collapse ( node ) {
if ( !node.hasAttribute ) node.className="";
}
</script>
</head>
<body>
<div style="width: 50px;">
<select id="sel" onfocus="expand( this )" onmousedown="expand( this )" onblur="collapse( this )" style="width: 100%">
<option>1 2 3 4 5 6 7 8 9 10 11 12 13 </option>
<option>2</option>
<option>3</option>
</select>
</div>
</body>
</html>

Пробуй это. Не забудь проверить в 9-м ИЕ !node.hasAttribute. Если там добавили это свойство, но не исправили селект, то нужно будет что-то подобрать для детекта 7 и 8 версии. Ну или в кондишинал комментс засунуть.

Link to comment
Share on other sites

  • 0

Задание фиксированной ширины тега <select> в Internet Explorer приводит к тому что все его опции ширина которых превышает ширину <select> отображаются обрезанными. Что же делать если вам все таки надо зафиксировать ширину <select>.

Этот jQuery плагин поможет вам решить ету проблему и вашь данные будут отображаться так же хорошо как например в FireFox или в Chrome.

Начиная с 17 июня 2010 года етот плугин был офицально выложен и протестирован на интернет експлорере 6,7 и 8.

вот адресс плагина http://ie-select-bug.life-super.com/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy