Digamos que tengo un fragmento html como este:
<div style="width:300px;">
<label for="MyInput">label text</label>
<input type="text" id="MyInput" />
</div>
Este no es mi código exacto, pero lo importante es que hay una etiqueta y una entrada de texto en la misma línea en un contenedor de ancho fijo. ¿Cómo puedo diseñar la entrada para llenar el ancho restante del contenedor sin envolver y sin conocer el tamaño de la etiqueta?
Respuestas:
Por mucho que todos odien las tablas para el diseño, ayudan con cosas como esta, ya sea usando etiquetas de tabla explícitas o usando display: table-cell
fuente
Aquí hay una solución simple y limpia sin usar JavaScript o hacks de diseño de tabla. Es similar a esta respuesta: el ancho de entrada automático del texto de entrada se llena al 100% con otros elementos flotantes
Es importante ajustar el campo de entrada con un intervalo que es
display:block
. Lo siguiente es que el botón tiene que venir primero y el campo de entrada segundo.Luego puede flotar el botón a la derecha y el campo de entrada llena el espacio restante.
Un violín simple: http://jsfiddle.net/v7YTT/90/
Actualización 1: si su sitio web está dirigido solo a navegadores modernos, sugiero usar cuadros flexibles . Aquí puedes ver el soporte actual .
Actualización 2: Esto incluso funciona con múltiples botones u otros elementos que comparten el total con el campo de entrada. Aquí hay un ejemplo .
fuente
Sugiero usar Flexbox:
¡Sin embargo, asegúrese de agregar los prefijos de proveedor adecuados!
fuente
label
? Estaría especialmente interesado en cómo el código HTML de la pregunta original se podría usar layoutedborder-box
...flex: 2
y noflex: 1
?Utilice flexbox para esto. Tienes un contenedor que va a flexionar a sus hijos en una fila. El primer niño toma su espacio según sea necesario. El segundo se flexiona para tomar todo el espacio restante:
fuente
row
predeterminado, no tiene que especificarlo.La forma más fácil de lograr esto sería:
CSS:
HTML:
Parece que: http://jsfiddle.net/JwfRX/
fuente
Un truco muy fácil es usar una
CSS calc
fórmula. Todos los navegadores modernos, IE9, una amplia gama de navegadores móviles deberían admitir esto.fuente
puedes probar esto:
fuente
Si estás usando Bootstrap 4:
Mejor aún, use lo que está integrado en Bootstrap:
https://jsfiddle.net/nap1ykbr/
fuente