para - El centro de CSS muestra el bloque en línea?
lista de codigos css (8)
Acabo de cambiar 2 parámetros:
.wrap {
display: block;
width:661px;
}
Tengo un código de trabajo aquí: http://jsfiddle.net/WVm5d/ (es posible que necesite agrandar la ventana de resultados para ver el efecto de centro de alineación)
Pregunta
El código funciona bien pero no me gusta tener display: table;
. Es la única forma en que podría hacer que el centro de alineación de la clase envolvente. Creo que sería mejor si hubiera una forma de usar display: block;
o display: inline-block;
. ¿Es posible resolver el centro de alineación de otra manera?
Agregar un fijo al contenedor no es una opción para mí.
También pegaré mi código aquí si el enlace de JS Fiddle se rompe en el futuro:
HTML
<div class="wrap">
<div class="sidebar">
Sidebar
</div>
<div class="container">
<div class="box">
Height1
</div>
<div class="box">
Height2<br />
Height2
</div>
<div class="box">
Height3<br />
Height3<br />
Height3
</div>
<div class="box">
Height1
</div>
<div class="box">
Height2<br />
Height2
</div>
<div class="box">
Height3<br />
Height3<br />
Height3
</div>
</div>
<div class="sidebar">
Sidebar
</div>
</div>
CSS
body {
background: #bbb;
}
.wrap {
background: #aaa;
margin: 0 auto;
display: table;
overflow: hidden;
}
.sidebar {
width: 200px;
float: left;
background: #eee;
}
.container {
margin: 0 auto;
background: #ddd;
display: block;
float: left;
padding: 5px;
}
.box {
background: #eee;
border: 1px solid #ccc;
padding: 10px;
margin: 5px;
float: left;
}
.box:nth-child(3n+1) {
clear: left;
}
El gran artículo que encontré que funcionó mejor para mí fue agregar un% al tamaño
.wrap {
margin-top:5%;
margin-bottom:5%;
height:100%;
display:block;}
La solución aceptada no me funcionaría, ya que necesito un elemento hijo con display: inline-block
para estar centrado tanto horizontal como verticalmente dentro de un elemento primario de ancho completo.
Utilicé las propiedades justify justify-content
y align-items
Flexbox, que respectivamente le permiten centrar los elementos horizontal y verticalmente. Al establecer ambos para center
en el elemento primario, el elemento secundario (o incluso elementos de elementos múltiples) estará perfectamente en el medio.
Esta solución no requiere un ancho fijo, lo cual no hubiera sido adecuado para mí ya que el texto de mi botón cambiará.
Aquí hay una demostración de CodePen y un fragmento del código relevante a continuación:
.parent {
display: flex;
justify-content: center;
align-items: center;
}
.child {
display: inline-block;
}
<div class="parent">
<a class="child" href="#0">Button</a>
</div>
No necesita usar "display: table". La razón por la cual su intento de autocentrado de margen: 0 no funciona es porque no especificó un ancho.
Esto funcionará bien:
.wrap {
background: #aaa;
margin: 0 auto;
width: some width in pixels since it''s the container;
}
No necesita especificar display: block ya que ese div se bloqueará de manera predeterminada. También es probable que pierda el desbordamiento: oculto.
Prueba esto. Agregué text-align: center
to body y display:inline-block
para envolver, y luego eliminé tu display: table
body {
background: #bbb;
text-align: center;
}
.wrap {
background: #aaa;
margin: 0 auto;
display: inline-block;
overflow: hidden;
}
Si tiene un <div>
con text-align:center;
, entonces cualquier texto dentro de él se centrará con respecto al ancho de ese elemento contenedor. inline-block
elementos de inline-block
se tratan como texto para este fin, por lo que también estarán centrados.
Solo usa:
line-height:50px
Reemplaza "50px" con la misma altura que tu div.
También puede hacer esto con el posicionamiento, establecer div principal a relativo y div infantil a absoluto.
.wrapper {
position: relative;
}
.childDiv {
position: absolute;
left: 50%;
transform: translateX(-50%);
}