Przeszukałem inne pytania i chociaż ten problem wydaje się podobny do kilku innych, nic, co do tej pory widziałem, nie rozwiązuje problemu, który mam.
Mam element div, który zawiera kilka innych elementów div, z których każdy jest przesunięty w lewo. Każdy z tych elementów div zawiera zdjęcie i podpis. Chcę tylko, aby grupa zdjęć była wyśrodkowana w zawierającym div.
Jak widać z poniższego kodu, próbowałem używać obu overflow:hidden
i margin:x auto
w nadrzędnych divach, a także dodałem clear:both
(jak zasugerowałem w innym temacie) po zdjęciach. Wydaje się, że nic nie robi różnicy.
Dziękuję Ci. Doceniam wszelkie sugestie.
<div style="position: relative; margin: 0 auto; overflow: hidden; text-align: center;">
<h4>Section Header</h4>
<div style="margin: 2em auto;">
<div style="float: left; margin: auto 1.5em;">
<img src="photo1.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo2.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo3.jpg" /><br />
Photo Caption
</div>
<div style="clear: both; height: 0; overflow: hidden;"> </div>
</div>
</div>
Odpowiedzi:
Najpierw usuń
float
atrybut z wewnętrznegodiv
s. Następnie załóżtext-align: center
główny wierzchdiv
. A dla wewnętrznychdiv
użyjdisplay: inline-block
. Mądrze byłoby również nadać im wyraźne szerokości.źródło
Dzięki Flexbox możesz łatwo wyśrodkować dzieci pływające w poziomie (i w pionie) wewnątrz elementu div.
Więc jeśli masz takie proste znaczniki:
z CSS:
(To jest (oczekiwany - i niepożądany) WYNIK )
Teraz dodaj następujące reguły do opakowania:
a pływające dzieci są wyrównane do środka ( DEMO )
Dla zabawy, aby uzyskać wyrównanie w pionie, po prostu dodaj:
PRÓBNY
źródło
Powyższe osiągnąłem używając względnego pozycjonowania i pływania w prawo.
Kod HTML:
CSS:
JSFiddle: http://jsfiddle.net/MJ9yp/
To zadziała w IE8 i nowszych, ale nie wcześniej (niespodzianka, niespodzianka!)
Nie pamiętam niestety źródła tej metody, więc nie mogę podać nazwiska pierwotnego autora. Jeśli ktoś wie, proszę zamieścić link!
źródło
Poniższe rozwiązanie nie używa bloków wbudowanych. Jednak wymaga dwóch pomocniczych elementów div:
źródło
display: inline-block;
nie będzie działać w żadnej z przeglądarek IE. Oto, czego użyłem.źródło
Rozwiązanie:
źródło
W moim przypadku nie mogłem uzyskać odpowiedzi od @Sampsona, która pracowała dla mnie, w najlepszym przypadku otrzymałem jedną kolumnę pośrodku strony. Jednak w trakcie tego procesu dowiedziałem się, jak faktycznie działa float i stworzyłem to rozwiązanie. W istocie poprawka jest bardzo prosta, ale trudna do znalezienia, o czym świadczy ten wątek, który miał ponad 146 tysięcy wyświetleń w czasie tego postu bez wzmianki.
Wszystko, co jest potrzebne, to zsumować szerokość przestrzeni ekranu, jaką zajmie żądany układ, a następnie nadać rodzicowi taką samą szerokość i zastosować margines: auto. Otóż to!
Elementy układu będą określać szerokość i wysokość „zewnętrznego” elementu div. Weź każdy „myFloat” lub szerokość lub wysokość elementu + jego krawędzie + jego marginesy i wypełnienia i dodaj je wszystkie razem. Następnie dodaj pozostałe elementy razem w ten sam sposób. To da ci szerokość rodzica. Wszystkie mogą mieć nieco inne rozmiary i możesz to zrobić z mniejszą lub większą liczbą elementów.
Np. (Każdy element ma 2 boki, więc obramowanie, margines i dopełnienie są mnożone x2)
Tak więc element o szerokości 10 pikseli, obramowaniu 2 piks., Marginesie 6 piks. I dopełnieniu 3 piks. Wyglądałby tak: 10 + 4 + 12 + 6 = 32
Następnie zsumuj wszystkie zsumowane szerokości elementu.
W tym przykładzie szerokość „zewnętrznego” elementu div będzie wynosić 112.
źródło