Mam problem z centrowaniem elementu, dla którego position
ustawiono atrybut absolute
. Czy ktoś wie, dlaczego obrazy nie są wyśrodkowane?
body {
text-align: center;
}
#slideshowWrapper {
margin-top: 50px;
text-align: center;
}
ul#slideshow {
list-style: none;
position: relative;
margin: auto;
}
ul#slideshow li {
position: absolute;
}
ul#slideshow li img {
border: 1px solid #ccc;
padding: 4px;
height: 450px;
}
<body>
<div id="slideshowWrapper">
<ul id="slideshow">
<li><img src="img/dummy1.JPG" alt="Dummy 1" /></li>
<li><img src="img/piano_unlicened.JPG" alt="Dummy 2" /></li>
</ul>
</div>
</body>
html
css
css-position
centering
użytkownik1098278
źródło
źródło
Odpowiedzi:
Jeśli ustawiłeś szerokość, możesz użyć:
źródło
Nie znając
width
/height
pozycjonowanego 1 elementu, nadal można wyrównać go w następujący sposób:PRZYKŁAD TUTAJ
Warto zauważyć, że CSS Transform jest obsługiwany w IE9 i nowszych wersjach . (Prefiksy dostawcy pominięto ze względu na zwięzłość)
Wyjaśnienie
Dodanie
top
/left
of50%
przenosi górną / lewą krawędź marginesu elementu na środek rodzica itranslate()
działa z (ujemną) wartością-50%
przesuwa element o połowę jego wielkości. Dlatego element zostanie umieszczony na środku.Jest tak, ponieważ wartość procentowa na
top
/left
właściwości jest względna w stosunku do wysokości / szerokości elementu macierzystego (który tworzy blok zawierający).Podczas gdy wartość procentowa funkcji przekształcenia jest zależna od szerokości / wysokości samego elementu (w rzeczywistości odnosi się do wielkości ramki granicznej )
translate()
.Aby uzyskać wyrównanie jednokierunkowe, użyj
translateX(-50%)
lubtranslateY(-50%)
zamiast.1. Element z
position
innym niżstatic
. Czylirelative
,absolute
,fixed
wartości.źródło
position: absolute; left: 50%; transform: translateX(-50%);
pionowe centrowanie:position: absolute; top: 50%; transform: translateY(-50%);
.translate
właściwość, przetłumacz element według rozmiaru samego siebie , bez względu na rozmiar jego elementu nadrzędnego.Centrowanie czegoś, co zostało
absolute
ustawione, jest raczej skomplikowane w CSS.Zmień
margin-left
na (ujemną) połowę szerokości elementu, który próbujesz wyśrodkować.źródło
Div pionowe i poziome wyrównane centrum
Uwaga: Elementy powinny mieć szerokość i wysokość do ustawienia
źródło
height
zestawu, aby to działało.Prosta sztuczka CSS, wystarczy dodać:
Działa to zarówno na obrazach, jak i na tekście.
źródło
Jeśli chcesz wyśrodkować element absolutny
Jeśli chcesz, aby pojemnik był wyśrodkowany od lewej do prawej, ale nie od góry do dołu
Jeśli chcesz, aby pojemnik był wyśrodkowany od góry do dołu, niezależnie od tego, czy jest od lewej do prawej
Aktualizacja na 15 grudnia 2015 r
Cóż, nauczyłem się tej kolejnej nowej sztuczki kilka miesięcy temu. Zakładając, że masz względny element nadrzędny.
Oto twój absolutny element.
Dzięki temu myślę, że jest to lepsza odpowiedź niż moje stare rozwiązanie. Ponieważ nie musisz określać szerokości ORAZ wysokości. Ten dostosowuje zawartość samego elementu.
źródło
Aby wyśrodkować element „position: bezwzględny”.
źródło
To działało dla mnie:
źródło
aby wyśrodkować pozycję: atrybut absolutny, musisz ustawić lewy: 50% i margines lewy: -50% szerokości div.
dla absolutnego środka w pionie musisz zrobić to samo, ale nie z lewym tylko u góry. (UWAGA: HTML i treść muszą mieć minimalną wysokość 100%;)
i mogą być łączone dla obu
źródło
zobacz demo na: http://jsfiddle.net/MohammadDayeh/HrZLC/
text-align: center
; współpracuje zposition: absolute
elementem podczas dodawanialeft: 0; right: 0;
źródło
Prostsze, najlepsze:
Następnie musisz wstawić tag img do tagu o pozycji sportowej: właściwość względna w następujący sposób:
źródło
prawdopodobnie najkrótszy
źródło
Jeśli nie znasz szerokości elementu, możesz użyć tego kodu:
Demo na skrzypcach: http://jsfiddle.net/wrh7a21r/
Źródło: https://stackoverflow.com/a/1777282/1136132
źródło
Lub możesz teraz użyć Flex Box z absolutną pozycją:
źródło
Nie jestem pewien, co chcesz osiągnąć, ale w tym przypadku wystarczy dodać
width: 100%;
do swojejul#slideshow li
woli.Wyjaśnienie
Te
img
znaczniki są wbudowane elementy blokowe. Oznacza to, że przepływają one liniowo jak tekst, ale mają także szerokość i wysokość jak elementy blokowe. W twoim css są dwietext-align: center;
reguły zastosowane do<body>
i#slideshowWrapper
(co jest redundantne przy okazji), co powoduje, że wszystkie elementy potomne w wierszu i w wierszu są wyśrodkowane w swoich najbliższych elementach bloku, w kodzie są toli
znaczniki. Wszystkie elementy blokowe mają,width: 100%
jeśli są statyczne flow (position: static;
), co jest ustawieniem domyślnym. Problem polega na tym, że gdy mówiszli
tagom, że sąposition: absolute;
, usuwasz je z normalnego przepływu statycznego, a to powoduje, że kurczą się, by dopasować do wewnętrznej zawartości, innymi słowy, jakby „tracą” swojąwidth: 100%
właściwość.źródło
Użycie
left: calc(50% - Wpx/2);
gdzie W jest dla mnie szerokością elementu.źródło
Twoje obrazy nie są wyśrodkowane, ponieważ elementy listy nie są wyśrodkowane; tylko ich tekst jest wyśrodkowany. Pozycję, którą chcesz osiągnąć, możesz osiągnąć przez wyśrodkowanie całej listy lub wyśrodkowanie zdjęć na liście.
Zmieniona wersja twojego kodu znajduje się na dole. W mojej wersji wyśrodkowuję zarówno listę, jak i zawarte w niej obrazy.
Prawda jest taka, że nie można wyśrodkować elementu, którego pozycja jest ustawiona na absolutną.
Ale to zachowanie można naśladować!
Uwaga: Te instrukcje będą działać z każdym elementem bloku DOM, nie tylko img.
Otocz swój obraz div lub innym tagiem (w twoim przypadku li).
Uwaga: Nazwy nadane tym elementom nie są wyjątkowe.
Zmień css lub scss, aby div div pozycjonowanie absolutne i obraz wyśrodkowany.
I masz to! Twoje img powinno być wyśrodkowane!
Twój kod:
Wypróbuj to:
Mam nadzieję, że to było pomocne. Powodzenia!
źródło
Obiekt bezwzględny w obiekcie względnym jest względny względem jego obiektu nadrzędnego, problem polega na tym, że potrzebujesz kontenera o szerokości statycznej
#slideshowWrapper
, a reszta rozwiązania jest taka, jak mówią inni użytkownicyhttp://jsfiddle.net/ejRTU/10/
źródło
Oto proste i najlepsze rozwiązanie dla elementu środkowego z „pozycją: absolutną”
źródło
Możesz spróbować w ten sposób:
źródło
Pozycja bezwzględna usuwa ją z przepływu i umieszcza ją w pozycji 0x0 nadrzędnej (ostatni element bloku ma pozycję bezwzględną lub względną).
Nie jestem pewien, co dokładnie próbujesz osiągnąć, najlepiej ustawić li na a,
position:relative
a to je wyśrodkuje. Biorąc pod uwagę twój obecny CSSSprawdź http://jsfiddle.net/rtgibbons/ejRTU/, aby z nim zagrać
źródło
Nie pamiętam, gdzie widziałem powyższą metodę centrowania, używając ujemnych wartości góra, prawo, dół, lewo. Dla mnie ta technika jest najlepsza w większości sytuacji.
Gdy korzystam z powyższej kombinacji, obraz zachowuje się jak obraz tła z następującymi ustawieniami:
Więcej szczegółów na temat pierwszego przykładu można znaleźć tutaj:
Zachowaj proporcje div z CSS
źródło
Wydaje się, że dzieje się tak, że istnieją dwa rozwiązania; wyśrodkowany przy użyciu marginesów i wyśrodkowany przy użyciu pozycji. Oba działają dobrze, ale jeśli chcesz pozycjonować bezwzględnie element względem tego wyśrodkowanego elementu, musisz użyć metody pozycji absolutnej, ponieważ pozycja bezwzględna drugiego elementu jest domyślnie ustawiona na pierwszy nadrzędny element, który jest pozycjonowany. Tak jak:
Dopóki nie przeczytałem tego wpisu, używając techniki automatycznej margines: 0, aby zbudować menu po lewej stronie mojej treści, musiałem zbudować kolumnę o tej samej szerokości po prawej stronie, aby ją wyrównać. Nie ładna Dzięki!
źródło
Użyj
margin-left: x%;
gdzie x jest połową szerokości elementu.źródło
źródło