Ответ 1
Проблема
Это невозможно, по крайней мере, если вы используете только max-width
(см. ниже решение). <select>
всегда немного сложны в стиле, так как они элементы интерактивного контента и элементы управления формой. Таким образом, они должны следовать некоторым неявным правилам. Во-первых, при использовании max-width
вы не можете сделать выбор менее широким, чем один из его вариантов. Подумайте о следующем сценарии:
+------------------------------------+-+ |Another entry |v| +------------------------------------+-+ |Another entry | |Select box, select anything, please | |Another entry | |Another entry | +------------------------------------+-+
Скажите, что вы хотите сжать это <select>
- что произойдет? Ширина выбора станет меньше, пока...
+------------------------------------+-+ +-----------------------------------+-+ |Another entry |v| |Another entry |v| +------------------------------------+-+ +-----------------------------------+-+ |Another entry | |Another entry | |Select box, select anything, please |-->|Select box, select anything, please | |Another entry | |Another entry | |Another entry | |Another entry | +------------------------------------+-+ +-----------------------------------+-+ | +---------------------------------------+ v +----------------------------------+-+ +---------------------------------+-+ |Another entry |v| |Another entry |v| +----------------------------------+-+ +---------------------------------+-+ |Another entry | |Another entry | |Select box, select anything, please |-->|Select box, select anything, please| |Another entry | |Another entry | |Another entry | |Another entry | +----------------------------------+-+ +---------------------------------+-+
И тогда процесс остановится, так как <option>
больше не подходит. Имейте в виду, что вы не можете стилить <option>s
или, по крайней мере, немного (цвет, шрифт-вариант), не получая отвратительных причуд. Тем не менее, поле рамки можно изменить, если выбор подготовлен правильно:
Решение
Используйте значение width
на select
. Да, это легко:
<fieldset style="background:blue;">
<select name=countries style="width:100%;max-width:90%;">
<option value=gs>South Georgia and the South Sandwich Islands</option>
</select>
</fieldset>
Почему это работает? Поскольку option
теперь корректно распознает width
select
и не заставит select
иметь неявный min-width
. Обратите внимание, что width
абсурден, так как он больше, чем max-width
. Большинство браузеров не заботятся и используют max-width
в этом случае, поскольку он обеспечивает верхнюю границу.
JSFiddle Demo (работает в FF12, Chrome 18, IE9, Opera 11.60)
Изменить
Решение на основе Wrapper, это не изменит исходную ширину:
<fieldset style="background:blue;">
<div style="display:inline-block;max-width:90%;"> <!-- additional wrapper -->
<select name=countries style="width:100%">
<option value=gs>South Georgia and the South Sandwich Islands</option>
</select>
</div>
</fieldset>
JSFiddle Demo (работает в браузерах, перечисленных выше)