2009-08-30 7 views
16

Tengo un problema con el relleno en mi formulario en mi sitio web. Si he configurado un alto/ancho para un elemento de formulario y luego le agrego un relleno. En todos los navegadores que he probado, excepto Firefox, el relleno se agrega al alto/ancho.Diferencias de relleno de forma en Firefox y Opera/Chrome/IE

Si tengo una entrada con 200 de ancho y 20px de alto. y relleno en 5 (todas las formas), la suma y el ancho y la altura totales serían 210px y 30px, pero en Firefox es 200px y 20px.

¿Cómo puedo trabajar en esto?

+0

Enlace a la página? ¿Estableciste un DOCTYPE? –

+0

No está en línea todavía. ; \ He leído sobre alguien que tiene problemas con esto antes, pero no he encontrado ninguna respuesta. He establecido doctype a xhtml trans. – guzh

+0

El documento también es válido en xhtml strict – guzh

Respuesta

27

Dale la input este CSS:

box-sizing: border-box; 

Puede leer más sobre box-sizing en QuirksMode, the W3C spec y MDN. Aquí está its browser support. Utilice los prefijos -moz- o -webkit- si así lo requieren sus navegadores de destino.


Esta respuesta había sugerido previamente el valor initial, que me había encontrado con las teclas de flecha arriba/abajo en el inspector de Chrome Web. Pero resulta que initial es una palabra clave CSS, aplicable a cualquier propiedad, que representa el valor inicial de la propiedad: el valor predeterminado del navegador. initial es menos seguro que nombrar explícitamente qué modelo de caja usar. Si se especificaron box-sizing: initial y se modificó el valor predeterminado de un navegador para box-sizing, el relleno de input podría romperse de nuevo.

+3

¡gracias! Eso era exactamente lo que estaba buscando, 'box-sizing: border-box;' did el truco :) lo siento por la respuesta tardía! – guzh

+0

o. Cuando veo mi pregunta nuevamente, parece que he estado acostumbrado al problema del relleno. Supongo que 'box-sizing: content-box;' es la opción correcta para obtener el ancho/alto total de 210px/30px. Creo que el modelo de caja tradicional es más lógico (cf [Quirksmode] (http://www.quirksmode.org/css/box.html)) .. – guzh

+0

FYI, agregando '* {box-sizing: border-box; } 'a su archivo CSS establece todos los elementos en border-box, lo que mantendrá el ancho y alto de un elemento incluso cuando se agregue margen y relleno. El cuadro modal por defecto 'content-box' agrega relleno y márgenes al ancho de su elemento, lo que en opinión de muchas personas es ilógico y difícil de trabajar. Lea más aquí http://www.paulirish.com/2012/box-sizing-border-box-ftw/. EDITAR: Olvidé agregar, 'border-box' es compatible con IE8 y superior, por lo que es seguro de usar. – Gavin

0

¿Ha intentado poner display: block en el formulario? Parece que FF podría tratarlo como si fuera un elemento en línea.

+0

'display: inline-block' might be better – Eric

3

Intente utilizar un marco CSS como blueprint-css. Eche un vistazo a las páginas de ejemplo que se envían con blueprint (hay un archivo llamado forms.html). Esto debería resolver su problema de relleno, así como un montón de otros problemas que pueda enfrentar.

+0

Vi el modelo de formulario css-file y parece que' input [type = text] 'hizo el truco en el campo de entrada al menos ..! ¡Ahora solo necesito resolverlo en el área de texto, lo investigaré! Gracias (: – guzh

-2

Prueba esto:

/* Set all margins and paddings to 0 on all browsers */ 

* { 
    margin: 0; 
    padding: 0; 
} 
+0

Esto es incorrecto, los estilos predeterminados del navegador no deberían tener nada que ver con el fenómeno que pregunta acerca de –

0

http://necolas.github.com/normalize.css/

/* 
* 1. Addresses box sizing set to content-box in IE 8/9. 
* 2. Removes excess padding in IE 8/9. 
* 3. Removes excess padding in IE 7. 
* Known issue: excess padding remains in IE 6. 
*/ 

input[type="checkbox"], 
input[type="radio"] { 
    box-sizing: border-box; /* 1 */ 
    padding: 0; /* 2 */ 
    *height: 13px; /* 3 */ 
    *width: 13px; /* 3 */ 
} 

/* 
* 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. 
* 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome 
* (include `-moz` to future-proof). 
*/ 

input[type="search"] { 
    -webkit-appearance: textfield; /* 1 */ 
    -moz-box-sizing: content-box; 
    -webkit-box-sizing: content-box; /* 2 */ 
    box-sizing: content-box; 
} 
Cuestiones relacionadas