问题
这是不可能的,至少如果您只使用max-width
(请参阅下面的解决方案)。<select>
s 的样式总是有点棘手,因为它们是交互式内容元素 和表单控制元素。因此,他们必须遵循一些隐含的规则。一方面,在使用max-width
. 考虑以下场景:
+------------------------------------------------+-+
|另一个条目 |v|
+------------------------------------------------+-+
|另一个条目 |
|请选择框,请选择任何内容 |
|另一个条目 |
|另一个条目 |
+------------------------------------------------+-+
假设你想挤压这个<select>
- 会发生什么?选择的宽度会变小,直到...
+------------------------------------------------+-+ +---------- --------------------------+-+
|另一个条目 |v| |另一个条目 |v|
+------------------------------------------------+-+ +---------- --------------------------+-+
|另一个条目 | |另一个条目 |
|请选择框,请选择任何内容|-->|请选择框,请选择任何内容|
|另一个条目 | |另一个条目 |
|另一个条目 | |另一个条目 |
+------------------------------------------------+-+ +---------- --------------------------+-+
|
+----------------------------------------------------+
v
+---------------------------------+-+ +---------- ----------------------+-+
|另一个条目 |v| |另一个条目 |v|
+---------------------------------+-+ +---------- ----------------------+-+
|另一个条目 | |另一个条目 |
|请选择框,请选择任何内容|-->|请选择框,请选择任何内容|
|另一个条目 | |另一个条目 |
|另一个条目 | |另一个条目 |
+---------------------------------+-+ +---------- ----------------------+-+
然后该过程将停止,因为<option>
s 不再适合。请记住,如果没有一些讨厌的怪癖,您将无法设置样式<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)
编辑
基于包装的解决方案,这不会改变原始宽度:
<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(在上面列出的浏览器中工作)