Digamos que tengo un cuadro de texto que quiero llenar una línea completa. Le daría un estilo como este:
input.wide {display:block; width: 100%}
Esto causa problemas porque el ancho se basa en el contenido del cuadro de texto. Los cuadros de texto tienen margen, bordes y relleno de forma predeterminada, lo que hace que un cuadro de texto con un ancho del 100% sea más grande que su contenedor.
Por ejemplo, aquí a la derecha:
¿Hay alguna forma de hacer que un cuadro de texto llene el ancho de su contenedor sin expandirse más allá?
Aquí hay un ejemplo de HTML para mostrar lo que quiero decir:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
#outer{border: 1px solid #000; width: 320px; margin: 0px;padding:0px}
#inner{margin: 20px; padding: 20px; background: #999;border: 1px solid #000;}
input.wide {display:block; margin: 0px}
input.normal {display:block; float: right}
</style>
</head>
<body>
<div id="outer">
<div id="inner">
<input type="text" class="wide" />
<input type="text" class="normal" />
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
Si se ejecuta esto, puede ver mirando el cuadro de texto "normal" que el cuadro de texto "ancho" sobresale más allá del contenedor. El cuadro de texto "normal" flota hasta el borde real del contenedor. Estoy tratando de hacer que el cuadro de texto "ancho" llene su contenedor, sin expandirse más allá del borde como lo es el cuadro de texto "normal".
Sí: al usar la propiedad CSS3 'box-sizing: border-box', puede redefinir qué significa 'ancho' para incluir el relleno y el borde externos.
Desafortunadamente, debido a que es CSS3, el soporte no es muy maduro, y como el proceso de especificaciones aún no está terminado, mientras tanto tiene diferentes nombres temporales en los navegadores. Entonces:
La alternativa de la vieja escuela es simplemente poner una cantidad de 'relleno derecho' en el elemento adjunto <div> o <td> igual a la cantidad de relleno / borde adicional izquierdo y derecho en 'px' que crees que los navegadores tendrán dar la entrada (Típicamente 6px para IE <8.)
fuente
¡Esto resolvió mi problema!
Sin la necesidad de un div externo. Simplemente aplíquelo a su cuadro de texto dado.
Con esta propiedad "Las propiedades de ancho y alto (y las propiedades mín. / Máx.) Incluyen contenido, relleno y borde, pero no el margen"
Ver descripción de la propiedad en w3schools .
¡Espero que esto ayude a alguien!
fuente
Acabo de encontrarme con este problema, y la única solución que pude encontrar que funcionó en todos mis navegadores de prueba (IE6, IE7, Firefox) fue la siguiente:
El código:
Aquí, el desbordamiento horizontal total para el elemento de entrada es 6px - 2x (relleno + borde), por lo que establecemos un relleno derecho para el DIV interno de 6px.
fuente
el soporte de tamaño de caja es bastante bueno en realidad: http://caniuse.com/#search=box-sizing
Entonces, a menos que apunte a IE7, debería poder resolver este tipo de problemas usando esta propiedad. Una capa como sass o menos facilita el manejo de reglas prefijadas como esa, por cierto.
fuente
En realidad, se debe a que CSS define el 100% en relación con todo el ancho del contenedor, incluidos sus márgenes, bordes y relleno; eso significa que el espacio disponible. en su contenido es una cantidad menor al 100%, a menos que el contenedor no tenga márgenes, bordes o relleno.
Esto es contrario a la intuición y muchos lo consideran un error con el que ahora estamos atrapados . Efectivamente significa que el% de dimensiones no son buenas para nada más que un contenedor de nivel superior, e incluso entonces, solo si no tiene márgenes, bordes o relleno.
Tenga en cuenta que los márgenes, los bordes y el relleno del campo de texto se incluyen en el tamaño CSS especificado para él: son los contenedores los que arrojan las cosas.
He trabajado tolerablemente usando 98%, pero esa es una solución menos que perfecta, ya que los campos de entrada tienden a ser más cortos a medida que el contenedor se hace más grande.
EDITAR: Me encontré con esta pregunta similar : nunca he intentado la respuesta dada, y no estoy seguro si se aplica a su problema, pero parece que lo hará.
fuente
Una solución que puede funcionar (funciona para mí) es aplicar un margen negativo en la entrada (cuadro de texto) ... o ancho fijo para ie7 o soltar el soporte de ie7. Esto da como resultado un ancho perfecto de píxeles ... Para mí es 7, así que agregué 3 y 4, pero aún es perfecto de píxeles ...
¡Tenía el mismo problema y odiaba tener divs adicionales para el borde, etc.!
¡Así que aquí está mi solución que parece funcionar!
Debe usar una hoja de estilo de ie7 only para evitar los starhacks.
fuente
Si no puede usarlo
box-sizing:border-box
, puede intentar eliminarwidth:100%
y poner unsize
atributo muy grande en el<input>
elemento, sin embargo, el inconveniente es que debe modificar el html y no puede hacerlo solo con CSS:fuente
Si no necesita hacerlo dinámicamente (por ejemplo, su formulario tiene un ancho fijo), simplemente puede establecer el ancho de los
<input>
elementos secundarios al ancho de su contenedor menos cualquier decoración como relleno, margen, borde, etc.fuente
Si no puede usar el tamaño de cuadro (por ejemplo, cuando convierte HTML a PDF usando iText). Prueba esto:
CSS
HTML
fuente
Esto funciona:
El primer 'ancho' es una regla alternativa para los navegadores más antiguos.
fuente
Simplemente diseñe la entrada para compensar el relleno adicional. En el siguiente ejemplo, el relleno en la entrada sería de 10 píxeles a la izquierda y a la derecha para un desplazamiento de relleno total de 20 píxeles:
fuente