Ok, esto es aparentemente imposible de hacer bien. Tengo un cuadro de texto y un cuadro de selección. Quiero que tengan exactamente el mismo ancho para que se alineen en el margen izquierdo y el margen derecho.
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
input, select {
width: 200px;
}
</style>
</head>
<body>
<input type="text" value="ABC"><br>
<select>
<option>123</option>
</select>
</body>
</html>
Eso es lo que piensas, ¿verdad? No El cuadro de selección es 6px más corto en Firefox. Ver captura de pantalla.
Ok, editemos el código y creemos dos estilos.
<style type="text/css">
input {
width: 200px;
}
select {
width: 206px;
}
</style>
Ok eso funciona!
Oh, espera, mejor prueba en Chrome ...
¿Alguien puede decirme cómo alinearlos en todos los navegadores? ¿Por qué no puedo simplemente hacer ancho: 200 px en total, por qué todos los navegadores lo muestran de manera diferente? Además, mientras estamos en eso, ¿por qué el cuadro de texto y el cuadro de selección tienen diferentes alturas? ¿Cómo los conseguimos a la misma altura? He probado la altura y la altura de la línea en vano.
Solución:
Ok, encontré la solución con la ayuda de las respuestas a continuación. La clave es usar la propiedad box-sizing: border-box para cuando especifique el ancho que incluye el borde y el relleno. Vea una excelente explicación aquí . Entonces el navegador no puede rellenarlo.
El código está debajo, también establecí la altura de los cuadros al mismo tamaño y sangré el texto dentro del cuadro para que se alinee. También debe establecer el borde, ya que Chrome tiene un borde de aspecto realmente extraño que usa para seleccionar cuadros que eliminarán la alineación. Esto funcionará para sitios HTML5 (por ejemplo, compatibles con IE9, Firefox, Chrome, Safari, Opera, etc.).
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
input, select {
width: 200px;
border: 1px solid #000;
padding: 0;
margin: 0;
height: 22px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
input {
text-indent: 4px;
}
</style>
</head>
<body>
<input type="text" value="ABC"><br>
<select>
<option>123</option>
<option>123456789 123123123123</option>
<option>123456789 123123123123 134213721381212</option>
</select>
</body>
</html>
Solo una advertencia final: es posible que no desee que se incluyan botones de entrada, casillas de verificación, etc.en este estilo, así que use input:not([type='button'])
para no aplicarlo a ciertos tipos o input[type='text'], input[type='password']
para especificar aquellos a los que sí desea que se aplique.