Propiedad min-width

DefiniciónEstablece la anchura mínima de los elementos de bloque
Valores
permitidos
Uno y sólo uno de los siguientes valores:
Si se utilizan porcentajes, hace referencia a la anchura del elemento en el que se encuentra
Valor inicial0
Se aplica aTodos los elementos, salvo los elementos en línea que no sean imágenes, las filas de tabla y los grupos de filas de tabla.
Válida enmedios visuales
Se heredano
Definición en
el estándar
w3.org/TR/CSS21/visudet.html#propdef-min-width

Ejemplos de uso

Por defecto, los elementos de bloque ocupan toda la anchura disponible en el elemento que los contiene. De esta forma, si se reduce el tamaño de la ventana del navegador, el sitio disponible disminuye y la anchura de los elementos de bloque es menor. Si se utiliza la propiedad min-width, se puede forzar a que un elemento sólo reduzca su anchura hasta cierto límite, a partir del cual su anchura ya no disminuye.

En el siguiente ejemplo, los dos <div> ocupan todo el sitio disponible en cada momento. Si se reduce el tamaño de la ventana del navegador, los dos <div> reducen su tamaño para adaptarse al nuevo sitio disponible.

No obstante, el segundo <div> tiene establecida una anchura mínima mediante min-width: 500px, de modo que a partir de ese valor, el <div> no reduce su anchura aunque el sitio disponible siga reduciéndose. Por lo tanto, si se reduce mucho el tamaño de la ventana del navegador, aparece una barra de scroll horizontal.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit
(min-width: 500px) Lorem ipsum dolor sit amet, consectetuer adipiscing elit

La propiedad min-width no admite valores negativos y los valores en porcentaje toman como referencia la anchura del elemento contenedor.

El navegador Internet Explorer 6 no incluye esta propiedad, por lo que se debe utilizar un truco que hace uso de CSS y JavaScript para simular el comportamiento de la propiedad min-width:

#contenedor {
  min-width: 300px;
  width: expression(document.body.clientWidth < 301? "300px": "auto" );
}

El ejemplo anterior hace uso de una función llamada expression() que sólo funciona en los navegadores de tipo Internet Explorer (desde su versión 5). Esta función permite establecer una medida utilizando expresiones matemáticas o mediante código JavaScript.

En este caso, se utiliza JavaScript para establecer de forma dinámica la anchura del elemento #contenedor. Si la anchura de la página (obtenida mediante document.body.clientWidth) es menor que 301px, se establece su anchura a 300px. En cualquier otro caso, se deja que el navegador calcule automáticamente la anchura necesaria mediante el valor auto.

El principal inconveniente de utilizar la función expression() es que el código CSS resultante no es válido según el estándar oficial y por tanto, no supera satisfatoriamente el proceso de validación de herramientas como el validador de CSS del W3C

Por otra parte, establecer medidas mediante operaciones matemáticas puede resultar muy útil para tener un control preciso cuando se utilizan unidades como em y porcentajes. Por este motivo, la futura versión CSS 3 incluirá una función llamada calc() cuyo funcionamiento es idéntico a expression().

El siguiente ejemplo muestra el uso de calc() para establecer la anchura de un elemento mediante una operación matemática compleja:

#contenedor {
  float: left;
  margin: 1em; border: solid 1px;
  width: calc(100%/3 - 2*1em - 2*1px);
}

La anchura del elemento #contenedor anterior se establece a una tercera parte del sitio disponible (100%/3) y después se le resta el sitio que ocupan los dos márgenes laterales de 1em de anchura cada uno (2*1em) y el espacio ocupado por los dos bordes laterales de 1px de anchura cada uno (2*1px).