Imagine el siguiente diseño, donde los puntos representan el espacio entre los cuadros:
[Left box]......[Center box]......[Right box]
Cuando elimino el cuadro derecho, me gusta que el cuadro central todavía esté en el centro, así:
[Left box]......[Center box].................
Lo mismo ocurre si quitara el cuadro de la izquierda.
................[Center box].................
Ahora, cuando el contenido dentro del recuadro central se alargue, ocupará tanto espacio disponible como sea necesario mientras permanece centrado. El cuadro de la izquierda y la derecha no se encogerá y por lo tanto cuando no hay espacio en el que se dejó el overflow:hidden
y text-overflow: ellipsis
vendrá en efecto para romper el contenido;
[Left box][Center boxxxxxxxxxxxxx][Right box]
Todo lo anterior es mi situación ideal, pero no tengo idea de cómo lograr este efecto. Porque cuando creo una estructura flexible así:
.parent {
display : flex; // flex box
justify-content : space-between; // horizontal alignment
align-content : center; // vertical alignment
}
Si los cuadros izquierdo y derecho fueran exactamente del mismo tamaño, obtendré el efecto deseado. Sin embargo, cuando uno de los dos es de un tamaño diferente, el cuadro centrado ya no está realmente centrado.
¿Hay alguien que pueda ayudarme?
Actualizar
A justify-self
sería bueno, esto sería ideal:
.leftBox {
justify-self : flex-start;
}
.rightBox {
justify-self : flex-end;
}
flexbox
se supone que funcione. Puedes probar otra metodología.justify-self
temprano hoy, por lo que puede encontrar esto interesante: stackoverflow.com/questions/32551291/…Respuestas:
Aquí hay un método que usa flexbox para centrar el elemento central, independientemente del ancho de los hermanos.
Características clave:
Utilice contenedores flexibles y
auto
márgenes anidados :Así es como funciona:
.container
) de nivel superior es un contenedor flexible..box
) ahora es un elemento flexible..box
elemento se entregaflex: 1
para distribuir el espacio del contenedor por igual ( más detalles ).justify-content: center
.span
elemento es un elemento flexible centrado.auto
márgenes flexibles para desplazar el exterior haciaspan
la izquierda y hacia la derecha.También puede renunciar
justify-content
y usarauto
márgenes exclusivamente.Pero
justify-content
puede funcionar aquí porque losauto
márgenes siempre tienen prioridad.fuente
width
que se especifiquewhite-space: nowrap
fue la última pieza del rompecabezas para evitar que el texto se ajuste cuando el área se vuelve demasiado pequeña.flex: 1
en el primero y el último. Esto los hace crecer igualmente para llenar el espacio disponible dejado por el medio.Sin embargo, si el primer o el último elemento tiene un contenido amplio, ese elemento flexible también crecerá debido al nuevo
min-width: auto
valor inicial.Tenga en cuenta que Chrome no parece implementar esto correctamente. Sin embargo, puede establecerlo
min-width
en-webkit-max-content
o-webkit-min-content
y funcionará también.Solo en ese caso el elemento del medio será empujado fuera del centro.
fuente
En lugar de usar de manera predeterminada el uso de flexbox, el uso de la cuadrícula lo resuelve en 2 líneas de CSS sin marcado adicional dentro de los elementos secundarios de nivel superior.
HTML:
CSS:
Flexbox es genial, pero no debería ser la respuesta para todo. En este caso, la cuadrícula es claramente la opción más limpia.
Incluso hizo un codepen para su placer de prueba: https://codepen.io/anon/pen/mooQOV
fuente
flex
para todo. Mi única objeción es que la alineación vertical se hace más fácil el uso de flex (align-items: center
) en caso de que sus artículos son diferentes alturas y necesidad de estar alineadoPuedes hacer esto así:
fuente
Aquí hay una respuesta que usa cuadrícula en lugar de flexbox. Esta solución no requiere elementos de nieto adicionales en el HTML como lo hace la respuesta aceptada. Y funciona correctamente incluso cuando el contenido de un lado es lo suficientemente largo como para desbordarse hacia el centro, a diferencia de la respuesta de la cuadrícula de 2019.
Lo único que no hace esta solución es mostrar puntos suspensivos u ocultar el contenido adicional en el cuadro central, como se describe en la pregunta.
fuente
Aquí hay otra forma de hacerlo, utilizando
display: flex
en los padres y los niños:fuente
También puede usar esta forma simple de alcanzar la alineación central exacta para el elemento medio:
codepen: https://codepen.io/ErAz7/pen/mdeBKLG
fuente