2010-07-07 9 views
12

Tengo el siguiente "línea" en mi página WebCSS marca de texto llenar toda la anchura disponible

<div style="width:100%"> 
"Some Text" <DropDown> "Some more text" <TextBox> <Button> <Button> 
</div> 

El control desplegable que realmente no tienen control sobre el ancho, ya que los tamaños para adaptarse a lo que sea el más largo el valor de la opción es. Los botones son de ancho fijo. ¿Cómo puedo obtener el TextBox para llenar todo el ancho restante disponible?

Intenté ponerlo en una tabla pero me encontré con el mismo problema, es decir, ¿cómo hago para que todas las demás columnas sean lo más pequeñas posible y que la columna TextBox complete el ancho restante?

Las soluciones de Hacky están bien si es necesario, hace tiempo que renuncié a pretender siquiera preocuparme por los estándares de CSS cuando es tan difícil hacer lo más simple.

Editar: para aclarar, por cuadro de texto que quiero decir <input type="text"/>

+0

Puede controlar el ancho de la lista desplegable con un atributo de estilo ancho. et al – Pradyumna

+0

@Pradyumma: No quiero establecer el ancho del menú desplegable. Debe dimensionar para adaptarse a su contenido. – fearofawhackplanet

+0

Para el registro, por TextBox te refieres a '' no a '' correcto? – scunliffe

Respuesta

22

Sé que esto es una cuestión de edad, pero la solución correcta no está aquí, así que por si acaso alguien encuentra allí hasta aquí:

La solución es envolver la caja de texto en un lapso.

HTML:

<label>Input</label> 
<span> 
    <input/> 
</span> 

CSS:

label { 
    float: left; 
} 

input { 
    width: 100%; 
    box-sizing:border-box; 
} 

span { 
    display: block; 
    overflow: hidden; 
} 

Ver this fiddle para un ejemplo (ahora un poco fuera de fecha ya me quita el relleno en favor del uso de la frontera de la caja en la entrada).

+1

Esto es asqueroso, pero funciona :) – singpolyma

+5

He creado otra versión de este violín que borra todo el código superfluo: http://jsfiddle.net/josh_fuggle/EjLfP/1/ –

+0

@ josh-fuggle Gracias Josh I ha actualizado la respuesta para incluir su violín, ya que de hecho es mucho más claro. – dekin88

1

puede establecer el ancho del cuadro de texto al 100% (con CSS como lo hizo con el div), por lo que será abarcó a la alcance completo de su padre (suponiendo que la etiqueta padre extiende la pantalla completa).

+1

Esto simplemente pone el cuadro de texto en su propia línea. Quiero todo el contenido en una sola línea. – fearofawhackplanet

2

Yo sugeriría lo siguiente:

<div style="width:100%; white-space:nowrap"> 
"Some Text" <DropDown> "Some more text" <TextBox style="width:100%"> <Button> <Button> 
</div> 
+0

Eso tampoco funciona, todavía hace que el cuadro de texto tenga el 100% de ancho de div, por lo que ahora se sale de la derecha de la pantalla. – fearofawhackplanet

0

La única manera que veo factible es con Javascript, por lo que obtener el ancho de la div (en píxeles), deducir el tamaño actual de los otros controles y agregue el resultado como con de la entrada. Eso requeriría que coloque el texto dentro de un control de tramo (para que pueda obtener su tamaño).

1

Establezca el ancho de textbox al 100% con la propiedad css display: inline;?

+0

Si configura el estilo 'display: inline', el estilo de ancho ya no funcionará porque el elemento es' inline'. Para usar el estilo de ancho, necesita tener la pantalla como bloque o bloque en línea ... o algo que le permita establecer el ancho. Si no desea que la propiedad width afecte su estilo, 'display: inline' funciona muy bien porque el estilo de ancho ya no se aplica. – Frinavale

5

Esto es lo que funcionó para mí. Tenga en cuenta que en algunos casos tuve que usar &nbsp; entre los artículos, de lo contrario, cayó a la siguiente línea.

.flexContainer { 
 
    display: flex; 
 
    width:100%; 
 
} 
 
input { 
 
    width: 100%; 
 
}
<div class="flexContainer"> 
 
<span>text:&nbsp;</span> <input/> &nbsp; <label>text</label> 
 
</div>

1

esto no es factible en el CSS en lo que se refiere a Chrome. La forma más factible es manipular el size attribute del control de formulario a través de JavaScript. Si la longitud de la cadena es 25, agregue un extra de al menos 10 para el espacio libre.

HTML

<!-- "The quick brown fox jumps over the lazy dog" is 43 characters long --> 
<input type="text" value="The quick brown fox jumps over the lazy dog" id="textbox1" /> 

JavaScript/jQuery

<script> 
    var value = jQuery('#textbox1').val();     // 43 
    jQuery('#textbox1').attr('size', value.length + 10); // resizes the textbox 
</script> 

Otra opción también está pre-calcular el tamaño de un guión de fondo.

PHP/HTML

<?php 
$value = "The quick brown fox jumps over the lazy dog"; 
?> 
<input type="text" value="<?php echo $value; ?>" size="<?php echo (strlen($value) + 10); ?>" /> 
Cuestiones relacionadas