2009-04-22 13 views
177

Estoy creando un sitio con DIV s. Todo funciona, excepto cuando creo un DIV. Las creo así (ejemplo):¿Cómo evito que la propiedad de relleno cambie de ancho o alto en CSS?

newdiv { 
    width: 200px; 
    height: 60px; 
    padding-left: 20px; 
    text-align: left; 
} 

Cuando agrego la propiedad padding-left, la anchura de las DIV cambios a 220px, y quiero que se quede en 200 px.

Digamos que crear otra DIV llamado anotherdiv exactamente el mismo que newdiv, y lo puso dentro de newdiv pero newdiv no tiene relleno y anotherdiv tiene padding-left: 20px. Obtengo lo mismo, el ancho de newdiv será de 220px.

¿Cómo puedo solucionar este problema?

+3

estoy triste decirlo, pero me gusta la forma en que IE maneja este ... tiene mucho más sentido a yo ... –

+0

Sam, deberías marcar la respuesta de Pramod como la respuesta. –

+0

@sam elija y marque una respuesta :) – Radex

Respuesta

0

cuando agrego la propiedad padding-left, la anchura de los cambios a DIV 220px

Sí, eso es exactamente de acuerdo con las normas. Así es como se supone que debe funcionar.

Digamos que crear otro DIV nombrado anotherdiv exactamente el mismo que newdiv, y ponerlo dentro de newdiv pero newdiv no tiene relleno y anotherdiv tiene padding-left: 20px. Obtengo la misma cosa , el ancho de newdiv será 220px;

No, newdiv se mantendrá 200px de ancho.

+2

Guffa, así no se supone que los estándares funcionen en absoluto. No se supone que el acolchado afecte las dimensiones del elemento al que se aplica. Con el mayor respeto, ¿es posible que esté confundiendo 'relleno' con 'margen'? – da5id

+1

Sí, se supone que el relleno afecta las dimensiones del elemento. Creo que eres tú quien está confundido ... ¿cómo propones que el margen afecte las dimensiones del elemento? – Guffa

+0

En realidad, sabes que ambos estamos en lo cierto. Estoy tan acostumbrado a lidiar con los efectos que olvidé por completo el estándar. Encontré una buena explicación aquí http://www.quirksmode.org/css/box.html – da5id

0

simplemente cambie su ancho div a 160px si tiene un relleno de 20px agrega 40px extra al ancho de su div, por lo que necesita restar 40px del ancho para mantener su div normal y no distorsionado con ancho extra y texto desordenado.

+1

Esto es lo mismo que la respuesta dada por @rvarcher. – 8bitjunkie

320

Añadir propiedad:

-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ 
-moz-box-sizing: border-box; /* Firefox, other Gecko */ 
box-sizing: border-box;   /* Opera/IE 8+ */ 

Nota: Esteno funcionará en Internet Explorer por debajo de la versión 8.

+9

Esta es una gran solución para las fronteras, pero ¿cómo ayuda esto para el relleno? – Kato

+5

¡Esto es pura magia! - ¡Arregla el modelo de caja que todos conocemos y odiamos! es decir, lo hace funcionar de la forma en que la intuición lo sugiere, en lugar de las especificaciones, pero hasta donde yo sé, tampoco rompe ninguna especificación: D Este artículo lo aclara bien ... http://stackoverflow.com/questions/779434/prevention-padding-propety-from-changing-width-or-height-in-css – technicalbloke

+2

@technicalbloke Su enlace simplemente vuelve a esta pregunta. – mhenry1384

9

Si desea aplicar la sangría de texto dentro de un div sin cambiar el tamaño del uso del div el CSS text-indent en vez de padding-left.

.indent { 
 
    text-indent: 1em; 
 
} 
 
.border { 
 
    border-style: solid; 
 
}
<div class="border"> 
 
    Non indented 
 
</div> 
 

 
<br> 
 

 
<div class="border indent"> 
 
    Indented 
 
</div>

+0

Esto no proporciona una respuesta a la pregunta.Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – Devin

+0

Actualicé la respuesta para responder mejor a la pregunta. – mvndaai

+1

Thx, esto es exactamente lo que estaba buscando. E incluso CSS 1 cumple. – Greg

18

probar este

box-sizing: border-box; 
2

simplemente añadir box-sizing: border-box;

+3

Esto es exactamente lo mismo que lo que otras respuestas ya dicen aquí. –

Cuestiones relacionadas