¿Por qué display:block;width:auto;
en mi entrada de texto no se comporta como un div y llena el ancho del contenedor?
Tenía la impresión de que un div es simplemente un elemento de bloque con ancho automático. En el siguiente código, ¿no deberían el div y la entrada tener dimensiones idénticas?
¿Cómo obtengo la entrada para llenar el ancho? El 100% de ancho no funcionará porque la entrada tiene relleno y un borde (lo que causa un ancho final de 1 píxel + 5 píxeles + 100% + 5 píxeles + 1 píxeles). Los anchos fijos no son una opción, y estoy buscando algo más flexible.
Prefiero una respuesta directa a una solución alternativa. Esto parece una peculiaridad de CSS y comprenderlo puede ser útil más adelante.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Debo señalar que ya puedo hacer esto con soluciones de envoltura. Además de este problema con la semántica de la página y las relaciones del selector CSS, estoy tratando de comprender la naturaleza del problema y si se puede superar cambiando la naturaleza de la ENTRADA.
Ok, esto es realmente extraño! He descubierto que la solución es simplemente agregar max-width:100%
a una entrada con width:100%;padding:5px;
. Sin embargo, esto plantea aún más preguntas (que haré en una pregunta separada), pero parece que el ancho usa el modelo de cuadro CSS normal y el ancho máximo usa el modelo de cuadro de borde de Internet Explorer. Que raro.
Ok, ese último parece ser un error en Firefox 3. Internet Explorer 8 y Safari 4 limitan el ancho máximo al 100% + relleno + borde, que es lo que dice hacer la especificación. Finalmente, Internet Explorer hizo algo bien.
¡Dios mío, esto es asombroso! En el proceso de jugar con esto, y con mucha ayuda de los venerables gurús Dean Edwards y Erik Arvidsson , logré juntar tres soluciones separadas para hacer un verdadero navegador cruzado de 100% de ancho en elementos con relleno y bordes arbitrarios. Ver la respuesta a continuación. Esta solución no requiere ningún marcado HTML adicional, solo una clase (o selector) y un comportamiento opcional para Internet Explorer heredado.
input
elementos que aparentemente no cumplen con la especificación CSS 2.1, mientras que la pregunta a la que se vinculó pregunta cómo evitar el desbordamiento de cuadros que ocurre perfectamente dentro de los límites de la especificación CSS 2.1 por cierto. Tanto las preguntas como sus soluciones se superponen, pero llamarlas duplicados exactos es simplemente incorrecto.