Directorio de artículos
Prefacio
Anteriormente resumí un artículo sobre varios métodos de centrado horizontal y vertical. Puede saber que los métodos para lograr el centrado horizontal y vertical son realmente innumerables, pero cada uno tiene sus propias ventajas y desventajas. Quiero aplicarlos en la práctica. Para usar Estos métodos correctamente, es necesario confiar en la acumulación habitual, y estar familiarizado con algunos de ellos puede resolver la mayoría de los problemas de centrado. Recientemente, he aprendido varios métodos mágicos, así que compartámoslos.
texto
Método de centrado horizontal
text-align
+display:inline-block
Usar con atributos.table
+margin
Usar con atributosabsolute
+transform
Usar con atributos
Método uno, text-align
+display:inline-block
#parent{
text-align: center;}
#child{
display: inline-block;}
Primero creamos un estilo normal
<style type="text/css">
#parent{
width: 100%;
height: 200px;
background: pink;
}
#child{
width: 200px;
height: 200px;
background: #987;
}
</style>
<div id="parent">
<div id="child">
水平居中
</div>
</div>
El efecto que se muestra en este momento es así.
Agreguemos dos atributos al estilo.
#parent{
width: 100%;
height: 200px;
background: pink;
text-align: center;
}
#child{
width: 200px;
height: 200px;
background: #987;
display: inline-block;
}
<div id="parent">
<div id="child">
水平居中
</div>
</div>
En este momento, el nivel está centrado
, analicemos, ¿por qué usar estos dos atributos? ¿Por qué usarlo inline-block
en lugar de inline
él?
text-align
Atributo: es establecer la alineación para el contenido del texto
left
: alineación izquierda
center
: alineación central
right
: alineación derecha ¿
Entonces tendrá preguntas en este momento? El conocimiento inicial de este atributo funciona en el texto, entonces, ¿por quédiv
también funciona en los elementos en este momento ? La clave es que eldisplay
atributo y el valor se establecen para el elemento secundarioinline-block
.
display
Los atributos tienen varios atributos comunes ::
block
elementos de nivel de bloque
inline
: los elementos
width
y height
atributos en
inline-block
línea no serán válidos : los elementos de nivel de bloque en línea (nivel de bloque + en línea)
width
y los height
atributos son válidos
Cuando el elemento hijo es un elemento en línea, text-align
funcionará.
inline-block
Usando las características de los elementos en línea,
¿por qué no establecer la propiedad de visualización del elemento secundario inline
? Debido a que los elementos en línea tienen sus propios problemas, cuando insertamos un elemento en línea de un elemento, chlid
el atributo de width
suma height
no será válido. Puedes probar inline
el efecto.
Entonces lo usamos inline-block
para hacer efectivas child
las propiedades width
y height
propiedades, con el fin de lograr el efecto que queremos.
Ventajas y desventajas
- Ventajas: La compatibilidad del navegador es relativamente buena, para la versión 6-9 del navegador IE,
text-align
yinline-block
ambos son compatibles. - Desventajas: Los
text-align
atributos se heredan, lo que hace que el texto de los elementos secundarios se muestre en el centro. (Resuelto, restauretext-align
los atributos en el elemento hijo )
Si el texto del elemento secundario no necesita estar centrado, debe procesarse text-align
El valor establecido en el elemento secundario left
puede anular el text-align
valor del atributo del elemento principal .
Método dos, usar con table
+ margin
atributos
.child{
dispaly: table;
margin: 0 auto;
}
Agregue contenido css clave en el estilo normal del primer método
#parent{
width: 100%;
height: 200px;
background: pink;
}
#child{
width: 200px;
height: 200px;
background: #987;
display: table;
margin: 0 auto;
}
<div id="parent">
<div id="child">
水平居中
</div>
</div>
Se logra el mismo
análisis de efectos
margin
:
- Establecido en un valor, lo que significa que la parte superior derecha e inferior izquierda son iguales.
- Establecido en dos valores, el primero significa arriba y abajo, y el segundo significa izquierda y derecha.
- Establecido en tres valores, el primero representa hacia arriba, el segundo representa hacia la izquierda y hacia la derecha, y el tercero representa hacia abajo.
- Establecer en cuatro valores, superior derecha, inferior izquierda.
Siempre margin: 0 auto;
que se auto
indique, se asigna automáticamente según el navegador. Entonces el navegador dividirá los márgenes izquierdo y derecho por igual
display: table;
:
El mismo efecto se puede obtener display
la configuración a block
, pero el estilo en línea inline
se child
invalidará la anchura y la altura. Por lo tanto, se display
puede establecer en dos valores: table
, block
.
Ventajas y desventajas
- Ventajas: solo es necesario configurar los elementos secundarios para realizar la visualización horizontal en el centro
- Desventaja:
si el elemento secundario abandona el flujo del documento, el valor del atributo de margen deja de ser válido.
El llamado elemento está fuera del flujo del documento, la situación posible es que el elemento hijo se establezca en las siguientes tres situaciones, lo que invalidará el valor del atributo de margen.position: absolute;
position: fixed;
float: left/right
Método tres, usar con atributos absolute
+transform
#parent{
position: relative;
}
#child{
position: absolute;
left: 50%;
transform: translateX(-50%);
}
Use estilo normal más los atributos anteriores
#parent{
width: 100%;
height: 200px;
background: pink;
position: relative;
}
#child{
width: 200px;
height: 200px;
background: #987;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
<div id="parent">
<div id="child">
水平居中
</div>
</div>
Análisis Después de que el
position: absolute;
elemento actual se establece en posicionamiento absoluto:
- Si el elemento principal no tiene un posicionamiento definido, el elemento actual se coloca en relación con la página.
- Si el posicionamiento está habilitado para el elemento padre (bajo no posicionamiento
static
), el elemento actual se posiciona con relación al elemento padre.
left: 50%;
La distancia izquierda del elemento secundario en relación con el elemento principal es del 50%;
transform: translateX(-50%);
El elemento secundario se mueve la mitad del ancho del elemento secundario hacia la izquierda. transform significa traducción, translateX () significa traducción horizontal.
Ventajas y desventajas
- Ventajas: si el elemento principal está fuera del flujo de documentos, no afecta el efecto de centrado horizontal del elemento secundario.
- Desventajas: el atributo de transformación es un atributo nuevo en CSS3 y el soporte del navegador no es bueno.
Método de centrado vertical
Después de hablar sobre el método de centrado horizontal, aquí hay dos esquemas de centrado vertical comunes. Hay dos formas habituales.
table-cell
+vertical-algin
atributoabsolute
+transform
Usar con atributos
Método uno, table-cell
+ vertical-algin
usar juntos
Código clave en el método uno
#parent{
display: table-cell;
vertical-align: middle;
}
El estilo general se modifica en la siguiente forma:
#parent{
width: 200px;
height: 300px;
background: pink;
}
#child{
width: 200px;
height: 200px;
background: #987;
}
Agregue el código de clave anterior.
#parent{
width: 200px;
height: 300px;
background: pink;
display: table-cell;
vertical-align: middle;
}
#child{
width: 200px;
height: 200px;
background: #987;
}
El efecto es el siguiente: El
análisis se
vertical-align: middle;
utiliza para establecer la alineación vertical del contenido del texto y vertical-align
los valores son los siguientes:
- arriba: alinear en la parte superior
- medio: alineación central
- parte inferior: la parte inferior de la alineación
display: table-cell;
tabla-celda, quetable
es para establecer el elemento actual como un<table>
elemento,table-cell
es para establecer el elemento actual como un<td>
elemento (celda)
La integración de los dos elementos centrales juntos puede lograr el efecto de centrado. Cuando configuramos el display
atributo del elemento principal para que table-cell
sea equivalente a establecer el elemento principal en una celda de la tabla, el contenido de la celda se puede alinear de dos formas Sí, una es la alineación horizontal y la otra es la alineación vertical.Como elemento hijo, div
es equivalente al contenido de la celda, y finalmente muestra el efecto del centrado vertical.
Ventajas y desventajas
- Ventajas: La compatibilidad del navegador es mejor (principalmente para la versión anterior del navegador, porque el usado
table-cell
y losvertical-algin
atributos son el contenido de la versión CSS2, y la compatibilidad del CSS2 con la versión anterior del navegador es mejor) - Desventajas: los
vertical-algin
atributos se heredan, lo que hace que el texto del elemento padre se muestre en el centro.
Agregue contenido de texto al elemento principal, y este contenido también se mostrará en el centro.
Método dos, usar con absolute
+ transform
atributos
Clave
#parent{
position: relative;
}
#child{
position: absolute;
top: 50%;
transform: translateY(-50%);
}
lograr
#parent{
width: 200px;
height: 300px;
background: pink;
position: relative;
}
#child{
width: 200px;
height: 200px;
background: #987;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
<div id="parent">
<div id="child">
垂直居中
</div>
</div>
Esta parte es similar al tercer tipo de archivo, que está centrado horizontalmente, puede consultar lo anterior aquí.
Disposición centrada
De hecho, esta es la integración de métodos verticales y horizontales.
table
+margin
Logra el centrado horizontal,table-cell
+vertical-algin
Logra el centrado vertical.absolute
+transform
Realice la visualización centrada en las direcciones horizontal y vertical.
Método 1: table
+ margin
realizar el centrado horizontal, table-cell
+ vertical-algin
realizar el centrado vertical
#parent{
width: 400px;
height: 400px;
background: pink;
display: table-cell;
vertical-align: middle;
}
#child{
width: 200px;
height: 200px;
background: #987;
display: table;
margin: 0 auto;
}
<div id="parent">
<div id="child">
居中布局
</div>
</div>
Ventajas y
desventajas de las primeras soluciones Desventajas:
Podemos saber que el parent
medio ha table-cell
hecho <td>
convertirse en un elemento padre, pero child
el table
valor de la media <table>
se ha convertido en un elemento secundario, por lo que aquí es necesario mejorar. Modifique
el display
valor del atributo del elemento hijo para block
lograr el mismo efecto, lo que también resuelve el problema de los fragmentos de lenguaje.
#child{
width: 200px;
height: 200px;
background: #987;
display: block;
margin: 0 auto;
}
Ventajas: la compatibilidad del navegador es mejor.
Método 2: absolute
+ transform
Realice la visualización centrada en las direcciones horizontal y vertical
Clave
#parent {
position: relative;
}
#child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50% , -50%);
}
Es fácil entender que combina métodos de centrado horizontal y vertical y centrado a través de propiedades de posicionamiento.
Código de implementación
#parent {
width: 400px;
height: 400px;
background: pink;
position: relative;
}
#child {
width: 200px;
height: 200px;
background: #987;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50% , -50%);
}
Ventajas y desventajas
Desventajas: compatibilidad relativamente baja
Ventajas: se puede aplicar a más escenarios y el método es bueno
para resumir
Ninguna solución es óptima. Necesitamos lograr el mismo efecto de acuerdo con los escenarios de aplicación reales.