CSS: Ancho en porcentaje y Bordes

Resuelto user1355300 asked hace 12 años • 5 respuestas

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

<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 un borde de 3px en el lado derecho de .left. Por ejemplo:

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

Dado que he definido el ancho en %, ¿cuál es la mejor manera de reajustar el ancho del .left? Puedo reducir aproximadamente el ancho al 29%, pero quiero hacerlo con precisión.

user1355300 avatar Jun 17 '12 15:06 user1355300
Aceptado

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

modelo de caja CSS

La compatibilidad con él no es perfecta; sin embargo, los prefijos de los proveedores se adaptarán a la mayoría, si no a 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;
}

Puede encontrar más información en MDN y Quirksmode .

Según Quirksmode , al utilizar los 3 prefijos de proveedores anteriores ( -moz-y -webkit-) -ms-, obtienes soporte para todos los navegadores, incluso IE8.

Bojangles avatar Jun 17 '2012 09:06 Bojangles

La forma más sencilla entre navegadores es NO establecer el borde en los divs externos y, en su lugar, configurarlo en un NUEVO div interno .left. Sencillo y funciona bien.

Emil Stenström avatar Jun 17 '2012 10:06 Emil Stenström