咱们知道select标签在各个浏览器中的属性和各浏览器的支持各有些不一样,从而形成select选择框在各浏览器的显示有不一样,下面咱们经过对主要 外形CSS属性的支持,打造全兼容select。html
我对select的height、padding、line-height分别利用控制变量的方法写了个DEMO在各浏览器上测试三种状况:height.100.padding.0、height.no.padding.100、no.height.no.padding,结果如 连接图片各浏览器DEMO外观浏览器
咱们能够得出如下研究属性。测试
ie6 | ie7 | ie8 | ie9 | ff | ch | sf | op | |
默认高度 | 22px | 22px | 19px | 20px | 19px | 19px | ||
height | F | T | T | T | T | T | F | T |
padding | F | F | T | T | T | T | F | T |
line-height | F | F | F | F | F | F | T | F |
文字垂直居中 | T | T | T | F | F | T | T | T |
经过上述的研究成果属性汇总,咱们知道IE6是不管如何设置都是固定高度为22px不变的,而其余浏览器除safari都是支持height属性的,那么咱们设置 height:22px。那么如今咱们修正一下safari浏览器,,咱们发现仅有safari支持line-height属性那么正好能够利用line-height修正其高度为22px,在font-size为12px的前提下设置 line-height:22px,最后FF和IE9里面的文字不居中,对其设定 padding:2px 0,咱们发现FF和IE9都居中了,可是各个浏览器的select的高度也并无增长,那么这里有点疑问,在高度设定的状况下,小量数字的padding不增长总体高度?ui
下面是全兼容代码示例。spa
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>demo</title>
<style>
*{padding:0; margin:0}
body{font-size:12px}
select{height:22px; line-height:18px; padding:2px 0}
</style>
</head>
<body>
<div style="margin-top:20px; margin-left:20px; background:#000">
<select>
<option>演示问题一</option>
<option>演示问题二</option>
<option>演示问题三</option>
<option>演示问题四</option>
<option>演示问题五</option>
</select>
</div>
</body>
</html>
另外,若是你想要设置宽度或高度,还想要实如今各浏览器中兼容的效果,那么你最好使用js作出下拉效果,这就和select标签没有关系了。xml
淘宝使用的是js效果实现的下拉效果;而京东使用的是select,但其高度都在20px左右,因此文字的效果看上去是垂直居中的,在Google中你能够看到改变高度文字仍是居中,可是在FF下文字就偏上了,因此要使用select的话,最好仍是按照上面的兼容性写法吧。htm