2012-06-17 21 views
32

He definido los anchos de los contenedores en porcentaje. Me gustaría agregar un borde (3px en el lado derecho de un ancho), dado que el ancho del contenedor está en% mientras que el ancho del borde está en px, ¿cómo puedo ajustar el ancho del contenedor?CSS: Ancho en porcentaje y Bordes

<div class="wrap"> 
    <div class="left">...</div> 
    <div class="right">...</div> 
</div> 

.wrap{ 
    width:100%; 
} 

.left{ 
    width:30%; 
} 

.right{ 
    width:70%; 
} 

Me gustaría agregar 3px border en el lado derecho de .left. Por ejemplo:

.left{ 
    width:30%; 
    border:3px solid #000; 
} 

Desde que he definido anchura en el%, ¿cuál es la mejor manera de volver a ajustar el ancho de la .left. Puedo reducir aproximadamente el ancho al 29%, pero quiero hacerlo con precisión.

+0

añadir el relleno * * al contenedor? Tenga en cuenta que debe eliminar * ancho: 100% * y luego. –

+1

Posible duplicado de [¿Cómo agrego un borde de 1px a un div cuyo ancho es un porcentaje?] (Http: // stackoverflow.com/questions/8278523/how-do-i-add-1px-border-to-a-div-whose-width-is-a-percentage) – Fractalizer

Respuesta

81

Utilice la propiedad box-sizing: border-box. Modifica el comportamiento del modelo de caja para tratar el relleno y el borde como parte del ancho total del elemento (no los márgenes, sin embargo). Esto significa que el ancho o alto del elemento incluye las dimensiones establecidas para el relleno y el borde. En su caso, eso significaría que el ancho del elemento y su ancho de borde consumirían el 30% del espacio disponible.

CSS box model

soporte para él no es perfecto, sin embargo prefijos de proveedores detectará la mayoría si no todos los navegadores modernos:

.left { 
    width: 30%; 
    border: 3px solid #000; 

    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    -ms-box-sizing: border-box; 
    box-sizing: border-box; 
} 

Más información se puede encontrar en la MDN y Quirksmode.

According to Quirksmode, utilizando los prefijos 3 comerciante sobre (-moz-, -webkit- y -ms-), se obtiene el apoyo para todos los navegadores, incluso IE8.

+18

por qué no es este el comportamiento predeterminado – magritte

+1

"Todos los navegadores" mencionado anteriormente significa esto: http://caniuse.com/#search=border-box - Es decir, no IE6 e IE7. –

+0

@Emil Realmente no vale la pena apoyar a partir de 2014, a menos que haya una buena razón comercial para hacerlo – Bojangles

4

La forma más fácil de navegador cruzado es NO establecer el borde en los divs externos, y en su lugar establecerlo en un NUEVO div dentro de .left. Simple, y funciona bien.

+0

Gracias, funciona, la solución más limpia. – Alex

1

Sólo cambia px a vw como

border-width: 10px; 

a

border-width: 10vw; 

Su cuál es el porcentaje no hacer ....

+0

vw y vh no hacen lo que hacen los porcentajes. Son unidades de visualización, y están basadas fuera del ancho de la ventana gráfica, ignorando los elementos dentro de la ventana gráfica. – Carlin

Cuestiones relacionadas