Wyobraź sobie następujący układ, w którym kropki reprezentują przestrzeń między polami:
[Left box]......[Center box]......[Right box]
Po usunięciu prawego pudełka chcę, aby środkowe pudełko nadal znajdowało się na środku, na przykład:
[Left box]......[Center box].................
To samo dotyczy sytuacji, gdybym usunął lewe pudełko.
................[Center box].................
Teraz, gdy zawartość w środkowym polu wydłuży się, zajmie tyle dostępnego miejsca, ile potrzeba, pozostając wyśrodkowana. Okno w lewo i prawo nie będzie się kurczyć, a więc kiedy, gdzie nie ma miejsca opuścił overflow:hidden
i text-overflow: ellipsis
wejdzie w efekcie przełamać zawartości;
[Left box][Center boxxxxxxxxxxxxx][Right box]
To wszystko jest moją idealną sytuacją, ale nie mam pojęcia, jak osiągnąć ten efekt. Ponieważ kiedy tworzę taką strukturę flex:
.parent {
display : flex; // flex box
justify-content : space-between; // horizontal alignment
align-content : center; // vertical alignment
}
Jeśli lewe i prawe pudełko będą dokładnie tej samej wielkości, uzyskam pożądany efekt. Jednak gdy jedno z dwóch ma inny rozmiar, wyśrodkowane pudełko nie jest już naprawdę wyśrodkowane.
Czy jest ktoś, kto może mi pomóc?
Aktualizacja
justify-self
Byłoby miło, to byłoby idealne:
.leftBox {
justify-self : flex-start;
}
.rightBox {
justify-self : flex-end;
}
flexbox
powinno działać. Możesz wypróbować inną metodologię.justify-self
wcześniej dzisiaj, więc może ci się wydać to interesujące: stackoverflow.com/questions/32551291/…Odpowiedzi:
Oto metoda wykorzystująca flexbox do wyśrodkowania środkowego elementu, niezależnie od szerokości rodzeństwa.
Kluczowe cechy:
Użyj zagnieżdżonych kontenerów elastycznych i
auto
marginesów:Oto jak to działa:
.container
) najwyższego poziomu to kontener elastyczny..box
element podrzędny div ( ) jest teraz elementem elastycznym..box
przedmiot jest podanyflex: 1
w celu równomiernego rozłożenia powierzchni pojemnika ( więcej szczegółów ).justify-content: center
.span
element jest wyśrodkowanym elementem elastycznym.auto
marginesów, aby przesunąć zewnętrznespan
s w lewo i w prawo.Możesz także zrezygnować
justify-content
i używaćauto
wyłącznie marginesów.Ale
justify-content
może działać tutaj, ponieważauto
marginesy zawsze mają priorytet.źródło
width
na określeniewhite-space: nowrap
było ostatnim elementem układanki, aby zapobiec zawijaniu się tekstu, gdy obszar stanie się zbyt mały.flex: 1
na pierwszy i ostatni. To sprawia, że rosną równomiernie, aby wypełnić dostępną przestrzeń pozostawioną przez środkową.Jeśli jednak pierwszy lub ostatni element ma szeroką zawartość, ten element elastyczny również wzrośnie ze względu na nową
min-width: auto
wartość początkową.Uwaga Wydaje się, że Chrome nie implementuje tego poprawnie. Jednakże, można ustawić
min-width
na-webkit-max-content
lub-webkit-min-content
i to będzie działać zbyt.Tylko w takim przypadku środkowy element zostanie wypchnięty ze środka.
źródło
Zamiast domyślnie używać flexboksa, użycie gridu rozwiązuje to w 2 liniach CSS bez dodatkowych znaczników w elementach potomnych najwyższego poziomu.
HTML:
CSS:
Flexbox rządzi, ale nie powinien być odpowiedzią na wszystko. W tym przypadku kratka jest zdecydowanie najczystszą opcją.
Zrobiłem nawet kod dla przyjemności testowania: https://codepen.io/anon/pen/mooQOV
źródło
flex
wszystko. Mój jedyny zarzut to, że pionowe wyrównanie staje się łatwiejsze przy użyciu Flex (align-items: center
) w przypadku, gdy elementy są różne wysokości i muszą być wyrównaneMożesz to zrobić w następujący sposób:
źródło
Oto odpowiedź wykorzystująca grid zamiast flexbox. To rozwiązanie nie wymaga dodatkowych elementów wnuków w kodzie HTML, jak to ma miejsce w zaakceptowanej odpowiedzi. I działa poprawnie nawet wtedy, gdy zawartość po jednej stronie staje się wystarczająco długa, aby przelewać się do środka, w przeciwieństwie do odpowiedzi siatki z 2019 r.
Jedyną rzeczą, której to rozwiązanie nie robi, jest wyświetlenie wielokropka lub ukrycie dodatkowej zawartości w środkowym polu, jak opisano w pytaniu.
źródło
Oto inny sposób, aby to zrobić, używając
display: flex
u rodziców i dzieci:źródło
możesz również użyć tego prostego sposobu, aby uzyskać dokładne wyrównanie do środka środkowego elementu:
codepen: https://codepen.io/ErAz7/pen/mdeBKLG
źródło