html - texto - CSS vertical-alinear: medio no funciona
centrar texto vertical y horizontal css (14)
Aquí está la última solución más simple: no necesita cambiar nada, solo agregue tres líneas de reglas de CSS a su contenedor del div donde desea centrar su atención. Me encanta Flex Box #LoveFlexBox
.main {
/* I changed height to 200px to make it easy to see the alignment. */
height: 200px;
vertical-align: middle;
border: 1px solid #000000;
padding: 2px;
/* Just add the following three rules to the container of which you want to center at. */
display: flex;
flex-direction: column;
justify-content: center;
/* This is true vertical center, no math needed. */
}
.inner {
border: 1px solid #000000;
}
.second {
border: 1px solid #000000;
}
<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 class="inner">This box should be centered in the larger box
<div class="second">Another box in here</div>
</div>
</div>
Prima
el valor justify-content se puede configurar con las siguientes opciones:
flex-start, que alineará el div infantil con el lugar donde comienza el flujo flexible en su contenedor principal. En este caso, se mantendrá en la parte superior.center, que alineará el div infantil con el centro de su contenedor principal. 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 centrar los elementos secundarios. Debido a eso, este es el verdadero centro vertical (en laflex-directionlacolumn. De manera similar, si cambia laflow-directiondelflow-directiona larow, se centrará horizontalmente.flex-end, que alineará el div infantil con el lugar 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 comienzo del flujo hasta el final del flujo. Si la demostración, agregué otro div para niños, para mostrar que están dispersos.space-around, similar alspace-between, pero con la mitad del espacio al principio y al final del flujo.
Estoy intentando centrar verticalmente un elemento span o div dentro de otro elemento div . Sin embargo, cuando pongo vertical-align: middle , no pasa nada. Intenté cambiar las propiedades de display de ambos elementos y parece que nada funciona.
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/
Aquí hay un gran artículo sobre cómo alinear vetical. Me gusta la forma de flotar.
http://www.vanseodesign.com/css/vertical-centering/
El HTML:
<div id="main">
<div id="floater"></div>
<div id="inner">Content here</div>
</div>
Y el estilo correspondiente:
#main {
height: 250px;
}
#floater {
float: left;
height: 50%;
width: 100%;
margin-bottom: -50px;
}
#inner {
clear: both;
height: 100px;
}
Aquí tiene un ejemplo de dos maneras 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
Usando flexbox, puede alinear un elemento por sí mismo dentro de otro elemento con display: flex; usando align-self . Si necesita alinearlo también horizontalmente, puede usar align-items y justify-content en el contenedor.
Si no quiere usar flexbox, puede usar la propiedad de posición. Si hace que el contenedor sea relativo y el contenido sea absoluto, el contenido podrá moverse libremente dentro del contenedor. Entonces, si usas top: 0; y a la left: 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 posicionará el contenido en el centro del contenedor desde la esquina superior izquierda del contenido.
Por lo tanto, debe corregir esto traduciendo el contenido a la mitad de su tamaño a la izquierda y a la parte superior.
Como vertical-align funciona como se espera en una td , puede poner una sola table celdas en el div para alinear su contenido.
<div>
<table style="width: 100%; height: 100%;"><tr><td style="vertical-align: middle; text-align: center">
Aligned content here...
</td></tr></table>
</div>
Clunky, pero funciona todo lo que puedo decir. Puede que no tenga los inconvenientes de las otras soluciones.
Debería poner vertical-align: middle en el elemento interno, no el elemento externo. Establezca la propiedad de line-height en el elemento externo para que coincida con la height del elemento externo. A continuación, configure display: inline-block y line-height: normal en el elemento interno. 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+
HTML
<div class="main">
<div class="inner">Vertically centered text</div>
</div>
CSS
.main {
height: 72px;
line-height:72px;
}
.inner {
display: inline-block;
vertical-align: middle;
line-height: normal;
}
Es sencillo. Simplemente agregue display:table-cell en su clase principal.
.main {
height: 72px;
vertical-align: middle;
display:table-cell;
border: 1px solid #000000;
}
¡Mira este jsfiddle !
Esta parece ser la mejor manera: ha pasado algún tiempo desde mi publicación original y esto es lo que se debe hacer ahora: http://jsfiddle.net/m3ykdyds/200
/* CSS file */
.main {
display: table;
}
.inner {
border: 1px solid #000000;
display: table-cell;
vertical-align: middle;
}
/* HTML File */
<div class="main">
<div class="inner"> This </div>
</div>
También puede usar lo siguiente:
Usando CSS3:
<!-- HTML -->
<div class="wrapper">
<div>Hi</div>
</div>
/* CSS */
.wrapper {
display : flex;
align-items : center;
}
Establecer la altura de la línea a la misma altura que contiene div también funcionará
DEMO http://jsfiddle.net/kevinPHPkevin/gZXWC/7/
.inner {
line-height:72px;
border: 1px solid #000000;
}
Prueba esto, funciona muy bien para mí:
/* Internet Explorer 10 */
display:-ms-flexbox;
-ms-flex-pack:center;
-ms-flex-align:center;
/* Firefox */
display:-moz-box;
-moz-box-pack:center;
-moz-box-align:center;
/* Safari, Opera, and Chrome */
display:-webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
/* W3C */
display:box;
box-pack:center;
box-align:center;
Simplemente coloque el contenido dentro de una tabla con una altura del 100% y configure la altura para la div principal
<div style="height:80px;border: 1px solid #000000;">
<table style="height:100%">
<tr><td style="vertical-align: middle;">
This paragraph should be centered in the larger box
</td></tr>
</table>
</div>
Usé esto para alinear todo en el centro del div wrapper en caso de que ayude a alguien, lo encontré más simple:
div.wrapper {
/* --- This works --- */
display: flex;
/* Align Vertically */
align-items: center;
/* Align Horizontally */
justify-content: center;
/* --- ---------- ----- */
width: 100%;
height:100px;
background-color: blue;
}
div.inner {
width: 50px;
height: 50px;
background-color: orange;
}
<div class="wrapper">
<div class="inner">
</div>
</div>
Usando CSS3:
<div class="outer">
<div class="inner"/>
</div>
Css:
.outer {
display : flex;
align-items : center;
}
Nota: Esto podría no funcionar en los viejos IE''s
.child en el centro de .parent . Funciona cuando los tamaños de píxeles son desconocidos (en otras palabras, siempre) y no hay problemas con IE9 + también.
.parent { position: relative; }
.child {
position: absolute;
top : 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform : translate(-50%, -50%);
}
<div class="parent" style="background:lightyellow; padding:6em">
<div class="child" style="background:gold; padding:1em">—</div>
</div>
HTML
<div id="myparent">
<div id="mychild">Test Content here</div>
</div>
CSS
#myparent {
display: table;
}
#mychild {
display: table-cell;
vertical-align: middle;
}
Configuramos el div principal para que se muestre como una tabla y el div infantil para que se muestre como una celda de tabla. Entonces podemos usar vertical-align en el div infantil y establecer su valor en middle. Cualquier cosa dentro de este div infantil se centrará verticalmente.