Estoy tratando de centrar verticalmente un elemento span
o div
dentro de otro div
elemento. Sin embargo cuando lo pongo vertical-align: middle
, no pasa nada. He intentado cambiar las display
propiedades de ambos elementos, y nada parece funcionar.
Esto es lo que estoy haciendo actualmente en mi página web:
.main {
height: 72px;
vertical-align: middle;
border: 1px solid black;
padding: 2px;
}
.inner {
vertical-align: middle;
border: 1px solid red;
}
.second {
border: 1px solid blue;
}
<div class="main">
<div class="inner">
This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Aquí hay un jsfiddle de la implementación que muestra que no funciona: http://jsfiddle.net/gZXWC/
Usando CSS3:
Css:
Nota: Esto podría no funcionar en viejos IE
fuente
inline-flex
tener varios elementos en una fila dentro del elemento interno..inner { width: 100%; }
. De esta manera, parece funcionar.outer { display: table; } .inner { display: table-cell; vertical-align: middle; }
pero sin forzar un ancho mínimo.justify-content: center;
alinear horizontalmente, lo que funcionó muy bienPrueba esto, me funciona muy bien:
fuente
#element span {height:100%;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;}
- tenga en cuenta que la altura es importante para garantizar que el span herede la altura completa de su contenedor (probablemente un div) de lo contrario ¡todavía no obtendrás centrado vertical!box
endisplay
Establecer la altura de la línea a la misma altura que contiene div también funcionará
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
fuente
line-height
también cambiará la altura del elemento interno. b) El elemento interno todavía no está centrado verticalmente con precisión. c) No funciona en elementos que no contienen texto, por ejemplo:<img>
o elementos con altura fija.En caso de que no pueda confiar en flexbox ... Colóquelo
.child
en.parent
el centro. Funciona cuando los tamaños de píxeles son desconocidos (en otras palabras, siempre) y tampoco hay problemas con IE9 +.fuente
Debes ponerte
vertical-align: middle
el elemento interno, no el elemento externo. Establezca laline-height
propiedad en el elemento externo para que coincida con laheight
del elemento externo. Luego establecerdisplay: inline-block
yline-height: normal
en el elemento interior. Al hacer esto, el texto en el elemento interno se ajustará con una altura de línea normal. Funciona en Chrome, Firefox, Safari e IE 8+Violín
fuente
line-height: normal;
ydisplay:inline;
funciona también. La ventaja de este método es que no interfieretext-align:center;
, con lo que el usodisplay: table-cell;
puede crear problemas. Muy a menudo queremos alinear tanto horizontal como verticalmente. Vea este violín editado: jsfiddle.net/br090prs/36line-height: normal
ydisplay: inline-block
es para que el texto interno se ajuste correctamente. Si está seguro de que el texto en el div interno nunca se ajustará, entonces estas propiedades no serán necesarias.Utilicé esto para alinear todo en el centro del contenedor wrap en caso de que ayude a alguien, lo encontré más simple:
fuente
Aquí tiene un ejemplo de dos formas de hacer una alineación vertical. Los uso y funcionan bastante bien. Uno usa posicionamiento absoluto y el otro usa flexbox .
Ejemplo de alineación vertical
Con flexbox, puede alinear un elemento por sí mismo dentro de otro elemento con el
display: flex;
usoalign-self
. Si necesita alinearlo también horizontalmente, puede usarloalign-items
yjustify-content
en el contenedor.Si no desea usar flexbox, puede usar la propiedad de posición. Si hace que el contenedor sea relativo y el contenido absoluto, el contenido podrá moverse libremente dentro del contenedor. Entonces, si usa
top: 0;
yleft: 0;
en el contenido, se colocará en la esquina superior izquierda del contenedor.Luego, para alinearlo, solo necesita cambiar las referencias superior e izquierda al 50%. Esto colocará el contenido en el centro del contenedor desde la esquina superior izquierda del contenido.
Por lo tanto, debe corregir esto traduciendo el contenido de la mitad de su tamaño a la izquierda y arriba.
fuente
Aquí hay un gran artículo sobre cómo alinear verticalmente. Me gusta la forma flotante.
http://www.vanseodesign.com/css/vertical-centering/
El HTML:
Y el estilo correspondiente:
fuente
HTML
CSS
Configuramos el div padre para que se muestre como una tabla y el div hijo para que se muestre como una celda de tabla. Entonces podemos usar la alineación vertical en el div hijo y establecer su valor en medio. Cualquier cosa dentro de este div hijo estará centrada verticalmente.
fuente
Es sencillo. Simplemente agregue
display:table-cell
en su clase principal.¡Mira este jsfiddle !
fuente
Aquí está la última solución más simple: no es necesario cambiar nada, solo agregue tres líneas de reglas CSS a su contenedor del div en el que desea centrarse. Me encanta
Flex Box
#LoveFlexBoxPrima
El
justify-content
valor se puede establecer en las siguientes opciones:flex-start
, que alineará el div secundario donde comienza el flujo flexible en su contenedor principal. En este caso, se mantendrá en la cima.center
, que alineará el div hijo al centro de su contenedor padre. Esto es realmente bueno, porque no es necesario agregar un div adicional para envolver a todos los niños para colocar el contenedor en un contenedor principal para centrarlos. Por eso, esta es la verdad centro vertical (decolumn
flex-direction
manera similar, si cambia elflow-direction
arow
, se centrará horizontalmente.flex-end
, que alineará el div hijo donde termina el flujo flexible en su contenedor principal. En este caso, se moverá al fondo.space-between
, que extenderá a todos los niños desde el principio del flujo hasta el final del flujo. Si la demostración, agregué otro div hijo, para mostrar que están dispersos.space-around
, similar aspace-between
, pero con la mitad del espacio al principio y al final del flujo.fuente
Dado que
vertical-align
funciona como se espera en untd
, puede poner un solo celledtable
en eldiv
para alinear su contenido.Clunky, pero funciona hasta donde puedo decir. Es posible que no tenga los inconvenientes de las otras soluciones.
fuente
Simplemente coloque el contenido dentro de una tabla con una altura del 100% y configure la altura para el div principal
fuente
Para centrar verticalmente un elemento span o div dentro de otro div, agregue la posición relativa al div padre y la posición absoluta al div hijo. Ahora, el div hijo se puede colocar en cualquier lugar dentro del div. Ejemplo debajo de los centros, tanto horizontal como verticalmente.
css:
fuente
Este es un enfoque moderno y utiliza la funcionalidad CSS Flexbox. Ahora puede alinear verticalmente el contenido dentro de su contenedor principal simplemente agregando estos estilos al
.main
contenedor¡Y estás listo para irte!
fuente