Pregunta de CSS para novatos. Pensé width:auto
que un display:block
elemento significaba "llenar el espacio disponible". Sin embargo, para un <input>
elemento, este no parece ser el caso. Por ejemplo:
<body>
<form style='background-color:red'>
<input type='text' style='background-color:green;display:block;width:auto'>
</form>
</body>
Entonces dos preguntas:
¿Existe una definición de exactamente qué ancho: auto significa? La especificación CSS me parece vaga, pero tal vez me perdí la sección relevante.
¿Hay alguna manera de lograr mi comportamiento esperado para un campo de entrada? llenar el espacio disponible como lo hacen otros elementos a nivel de bloque?
¡Gracias!
Respuestas:
El
<input>
ancho de An se genera a partir de susize
atributo. El valor predeterminadosize
es lo que impulsa el ancho automático.Puede intentarlo
width:100%
como se ilustra en mi ejemplo a continuación.No llena el ancho:
Ancho de relleno:
Tamaño más pequeño, ancho más pequeño:
ACTUALIZAR
Esto es lo mejor que pude hacer después de unos minutos. Tiene 1 px de descuento en FF, Chrome y Safari, y es perfecto en IE. (El problema es que # ^ & * IE aplica los bordes de manera diferente a todos los demás, por lo que no es consistente).
fuente
border:2px inset #eee; margin:-2px
. Aunque no lo he probado yo mismo, pero algo por el estilo."¿Existe una definición de qué ancho: auto significa exactamente? La especificación CSS me parece vaga, pero tal vez me perdí la sección relevante".
En realidad, nadie respondió la parte anterior de la pregunta del cartel original.
Aquí está la respuesta: http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
fuente
Como se indica en la otra respuesta, width: auto no funciona debido a que el ancho que genera el atributo de tamaño de la entrada, que no se puede establecer en "auto" o algo similar.
Hay algunas soluciones que puede utilizar para hacer que funcione bien con el modelo de caja, pero nada fantástico que yo sepa.
Primero, puede configurar el relleno en el campo usando porcentajes, asegurándose de que el ancho sume el 100%, por ejemplo:
Otra cosa que puede intentar es usar el posicionamiento absoluto, con la izquierda y la derecha configuradas en 0. Usando este marcado:
Y este CSS:
Este posicionamiento absoluto hará que la entrada llene el conjunto de campos principal horizontalmente, independientemente del margen o relleno de la entrada. Sin embargo, una gran desventaja de esto es que ahora tiene que lidiar con la altura del conjunto de campos, que será 0 a menos que la configure. Si todas sus entradas tienen la misma altura, esto funcionará para usted, simplemente establezca la altura del conjunto de campos a la altura que debería ser la entrada.
Aparte de esto, hay algunas soluciones JS, pero no me gusta aplicar un estilo básico con JS.
fuente
Debido a que
input
'swidth
es controlado por ella desize
atributo, así es como me inicializar uninput
width
acuerdo con su contenido:fuente
#angular
respuesta específica no es una respuesta válida a la pregunta del OP (y no estoy votando a favor), llegué a este tema solo para encontrar esta idea en particular.Puede que no sea exactamente lo que desea, pero mi solución es aplicar el estilo de ancho automático a un div contenedor y luego establecer su entrada al 100%.
fuente
La única opción que se me ocurre es utilizar
width:100%
. Si también desea tener un relleno en el campo de entrada, además de colocar un contenedorlabel
a su alrededor, mueva el formato a esa etiqueta, mientras que también especifique el relleno en la etiqueta. Los campos de entrada son rígidos.fuente
Respuesta 1 - "respuesta" dio una buena respuesta / enlace. En pocas palabras, "auto" es el valor predeterminado, por lo que es como eliminar cualquier cambio en el ancho de un elemento.
Respuesta 2: úsala
width: 100%
en su lugar. Llena el 100% del contenedor principal, en este caso, el "formulario".fuente
Enlaces absolutamente asombrosos que describen una característica absolutamente asombrosa:
https://css-tricks.com/snippets/css/a-guide-to-flexbox
https://www.htmllion.com/css-flexbox.html
La esencia:
display: flex;
.flex-grow: 1;
en cada uno de los elementos contenidos.Editar - ejemplo :
fuente