He estado investigando un poco y resulta que el problema del margen en elementos con overflow hidden tiene su explicación. También tiene una solución sencilla.
DESCRIPCIÓN Tenemos un elemento que se debe de expandir para contener a los floats que tiene en su interior. Pero, a su vez, este elemento está junto a otros flotantes. Para que se produzca esta expansión, establecemos la propiedad overflow en hidden (también vale auto). El problema surje cuando este elemento está junto a flotantes (no confundir con los flotantes internos) y, además, le añadimos un margen para crear un efecto de columna. Entonces, unos navegadores (ej. IE7 o Firefox3 bajo Windows) calculan este margen desde el borde de la caja que contiene a este elemento (y a los floats adyacentes), mientras que otros (ej. Opera, Safari, Firefox en Linux) lo calculan desde el límite de los floats laterales. - Al parecer, la mayoría de los navegadores modernos calculan los márgenes del elemento con overflow:hidden desde los bordes de las caja flotantes que pudieran tener a su lado. ¿QUÉ DICEN LAS ESPECIFICACIONES? Establecer la propiedad overflow a hidden (o cualquier valor distinto de visible) hace que que se genere un nuevo contexto de formato de bloque [1]. CSS2.1 impide que el elemento con este nuevo contexto se solape con los flotantes. Para ello da la opción de que la caja se haga más estrecha o bien limpie los flotantes pasando a estar debajo de ellos [2]. En CSS3 sucede lo mismo. En CSS2 no he visto nada. Por lo tanto, según esto, ni Internet Explorer 6 y 7 ni Firefox bajo Windows siguen la especificación CSS2.1 en adelante, ya que contraen el contenido inline del elemento, pero no la caja, que se solapa con los flotantes laterales y, como consecuencia, calculan mal los márgenes. SOLUCIÓN Para que el comportamiento sea congruente con los diferentes navegadores, la solución no podía ser más sencilla: * Envolver el elemento con overflow:hidden dentro de otro y establecer los márgenes sólo al elemento padre. Aunque se puede alegar que esto añade marcado no semántico (una etiqueta nueva sólo para añadir márgenes), hay que tener en cuenta que no se aplica a todos los elementos con overflow:hidden, tan sólo a los que estén posicionados junto a floats y queramos que tengan un margen para crear el efecto de columna. Además, según el caso, puede que este elemento padre ya estuviese creado, con lo que sólo añadiríamos el margen en las css. Saludos Referencias [1] http://www.w3.org/TR/CSS21/visuren.html#block-formatting [2] http://www.w3.org/TR/CSS21/visuren.html#bfc-next-to-float El 4 de marzo de 2009 20:22, Martin Etxauri <t...@eragin.com> escribió: > Aupa > > No se si la mayoría por aquí conoceréis esto que mando pero ahí va. > No convencido del famoso <br> limpiador con el clear:both para cerrar > bien las capas que contienen elementos flotados y que no sobresalgan > por encima de estas, he encontrado un artículo [1] donde explican > varios métodos y señalan uno como definitivo (o al menos el mejor en > su opinión), y es tan simple como ponerle a dicha capa (la contenedora > de los elementos flotados) overflow: auto; > > Yo personalmente he alucinado con el tema y me parece que funciona muy > bien. En el mismo artículo advierte que con algunas combinaciones de > margin y padding pueden salir algún scroll pero es cuestión de tener > cuidado. > > Espero que sea de utilidad > > saludos > > > [1] http://www.sitepoint.com/blogs/2005/02/26/simple-clearing-of-floats/ > _______________________________________________ > Lista de distribución Ovillo > Para escribir a la lista, envia un correo a Ovillo@lists.ovillo.org > Puedes modificar tus datos o desuscribirte en la siguiente dirección: > http://lists.ovillo.org/mailman/listinfo/ovillo > _______________________________________________ Lista de distribución Ovillo Para escribir a la lista, envia un correo a Ovillo@lists.ovillo.org Puedes modificar tus datos o desuscribirte en la siguiente dirección: http://lists.ovillo.org/mailman/listinfo/ovillo