Próbuję uzyskać element div position:fixed
wyrównany do środka na mojej stronie.
Zawsze mogłem to robić z absolutnie pozycjonowanymi elementami DIV, używając tego „hackowania”
left: 50%; width: 400px; margin-left:-200px
... gdzie wartość margin-left to połowa szerokości div.
Wydaje się, że nie działa to w przypadku elementów DIV ze stałą pozycją, zamiast tego umieszcza je w skrajnym lewym rogu na 50% i ignoruje deklarację marginesu z lewej strony.
Jakieś pomysły, jak to naprawić, aby móc wyśrodkować i wyrównać ustalone elementy?
Dodam też dodatkowe M&M, jeśli możesz mi powiedzieć lepszy sposób na wyśrodkowanie i wyrównywanie bezwzględnie pozycjonowanych elementów niż ten, który opisałem powyżej.
Odpowiedzi:
Odpowiedź Koena nie skupia dokładnie elementu.
Właściwym sposobem jest użycie
CCS3 transform
własności. Chociaż nie jest obsługiwany w niektórych starych przeglądarkach . I nie musimy nawet ustalać stałego ani krewnegowidth
.Porównanie pracy jsfiddle tutaj .
źródło
left: 50%
przenosi element div na 50% strony. Musisz jednak pamiętać, że przenosi go, zaczynając od lewej strony elementu div, dlatego element div nie jest jeszcze wyśrodkowany.translate(-50%, 0)
który zasadniczotranslateX(-50%)
uwzględnia bieżącą szerokość elementu div i przesuwa go o -50% jego szerokości w lewą stronę od rzeczywistego miejsca.Dla tych, którzy mają ten sam problem, ale z responsywnym projektem, możesz również użyć:
W ten sposób zawsze utrzymasz swój stały
div
środek na ekranie, nawet przy responsywnym projekcie.źródło
-(75/2)
w tym przypadku)Możesz również użyć do tego flexboxa.
źródło
<center>
która była przestarzała, i używając nowoczesnej techniki, takiej jakdisplay: flex
i niektóre powiązane właściwości.Z powyższego postu myślę, że najlepszy sposób
width: 100%
margin-left: auto
imargin-right: auto
, lub dla tabeli utwórz goalign="center"
.Mam nadzieję, że to pomoże.
źródło
max-width
s dla elementów o stałej pozycji. Chcesz mieć stały pasek boczny, który responsywnie zajmuje 30% Twojejmax-width: 1200px
strony internetowej? To cię tam zaprowadzi.Normalne elementy div powinny używać
margin-left: auto
imargin-right: auto
, ale to nie działa w przypadku stałych elementów div. Sposób obejścia tego jest podobny do odpowiedzi Andrew , ale nie używa przestarzałej<center>
rzeczy. Zasadniczo po prostu nadaj stałemu elementowi opakowanie opakowanie.Spowoduje to wyśrodkowanie ustalonego elementu div w elemencie div, jednocześnie umożliwiając mu reagowanie w przeglądarce. tj. element div zostanie wyśrodkowany, jeśli jest wystarczająco dużo miejsca, ale zderzy się z krawędzią przeglądarki, jeśli go nie ma; podobnie jak reaguje zwykły wyśrodkowany element DIV.
źródło
Jeśli chcesz wyśrodkować, wyrównując ustaloną pozycję div w pionie i poziomie, użyj tego
źródło
To powinno zrobić to samo.
źródło
Jeśli wiesz, że szerokość wynosi 400 pikseli, byłby to najłatwiejszy sposób, aby to zrobić.
źródło
Działa to, jeśli chcesz, aby element obejmował całą stronę jak inny pasek nawigacyjny.
width: calc (width: 100% - width, cokolwiek innego nie jest wyśrodkowane)
Na przykład, jeśli Twój boczny pasek nawigacyjny ma 200 pikseli:
szerokość: calc (100% - 200px);
źródło
Szerokość: 70% jest dość łatwa; po lewej: 15%;
Ustawia szerokość elementu na 70% okna i 15% skrzydeł po obu stronach
źródło
Użyłem następujących z Twitter Bootstrap (v3)
To znaczy zrobić element o pełnej szerokości, który ma stałą pozycję i po prostu wepchnąć do niego pojemnik, kontener jest wyśrodkowany względem pełnej szerokości. Powinien też zachowywać się dobrze responsywnie.
źródło
Rozwiązanie wykorzystujące flex box; w pełni responsywny:
źródło
jeśli nie chcesz używać metody opakowania. możesz to zrobić:
źródło