He buscado otras preguntas y, aunque este problema parece similar a un par de otras, nada de lo que he visto hasta ahora parece abordar el problema que estoy teniendo.
Tengo un div que contiene varios otros divs, cada uno de los cuales está flotando a la izquierda. Estos divs contienen una foto y una leyenda. Todo lo que quiero es que el grupo de fotos se centre en el div que lo contiene.
Como puede ver en el siguiente código, he intentado usar ambos overflow:hidden
y margin:x auto
en los divs principales, y también he agregado un clear:both
(como se sugiere en otro tema) después de las fotos. Nada parece hacer la diferencia.
Gracias. Agradezco cualquier sugerencia.
<div style="position: relative; margin: 0 auto; overflow: hidden; text-align: center;">
<h4>Section Header</h4>
<div style="margin: 2em auto;">
<div style="float: left; margin: auto 1.5em;">
<img src="photo1.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo2.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo3.jpg" /><br />
Photo Caption
</div>
<div style="clear: both; height: 0; overflow: hidden;"> </div>
</div>
</div>
Respuestas:
Primero, elimine el
float
atributo en eldiv
s interno . Luego, pontetext-align: center
el exterior principaldiv
. Y para eldiv
s interno , usedisplay: inline-block
. También podría ser prudente darles anchos explícitos también.fuente
Con Flexbox puede centrar fácilmente a los niños flotantes en el centro (y verticalmente) dentro de un div.
Entonces, si tiene un marcado simple como este:
con CSS:
(Este es el RESULTADO (esperado e indeseable) )
Ahora agregue las siguientes reglas al contenedor:
y los niños flotantes se alinean en el centro ( DEMO )
Solo por diversión, para obtener una alineación vertical, simplemente agregue:
MANIFESTACIÓN
fuente
Logré lo anterior usando posicionamiento relativo y flotando a la derecha.
Código HTML:
CSS:
JSFiddle: http://jsfiddle.net/MJ9yp/
Esto funcionará en IE8 y versiones posteriores, pero no antes (¡sorpresa, sorpresa!)
Lamentablemente, no recuerdo la fuente de este método, por lo que no puedo dar crédito al autor original. Si alguien más lo sabe, ¡publique el enlace!
fuente
La siguiente solución no utiliza bloques en línea. Sin embargo, requiere dos divs auxiliares:
fuente
display: inline-block;
no funcionará en ninguno de los navegadores IE. Aquí está lo que usé.fuente
Solución:
fuente
En mi caso, no pude obtener la respuesta de @Sampson para trabajar para mí, en el mejor de los casos obtuve una sola columna centrada en la página. Sin embargo, en el proceso, aprendí cómo funciona realmente el flotador y creé esta solución. En esencia, la solución es muy simple pero difícil de encontrar, como lo demuestra este hilo que ha tenido más de 146k vistas en el momento de esta publicación sin mencionarlo.
Todo lo que se necesita es totalizar la cantidad de ancho de espacio de pantalla que ocupará el diseño deseado, luego hacer que el padre tenga el mismo ancho y aplicar margen: automático. ¡Eso es!
Los elementos en el diseño dictarán el ancho y la altura del div "exterior". Tome cada "myFloat" o ancho o altura del elemento + sus bordes + sus márgenes y sus rellenos y agréguelos todos juntos. Luego agregue los otros elementos juntos de la misma manera. Esto le dará el ancho principal. Todos pueden tener tamaños algo diferentes y puede hacerlo con menos o más elementos.
Ej. (Cada elemento tiene 2 lados, por lo que el borde, el margen y el relleno se multiplican x2)
Entonces, un elemento que tiene un ancho de 10px, borde 2px, margen 6px, relleno 3px se vería así: 10 + 4 + 12 + 6 = 32
Luego, agregue todos los anchos totalizados de su elemento.
En este ejemplo, el ancho para el div "exterior" sería 112.
fuente