Jak możesz wyrównać obraz wewnątrz zawierającego div
?
Przykład
W moim przykładzie muszę wyśrodkować <img>
w pionie za <div>
pomocą class ="frame
„:
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
wysokość jest ustalona, a wysokość obrazu jest nieznana. Mogę dodawać nowe elementy, .frame
jeśli to jedyne rozwiązanie. Próbuję to zrobić w przeglądarce Internet Explorer 7 i nowszych, WebKit, Gecko.
Zobacz jsfiddle tutaj .
.frame {
height: 25px; /* Equals maximum image height */
line-height: 25px;
width: 160px;
border: 1px solid red;
text-align: center;
margin: 1em 0;
}
img {
background: #3A6F9A;
vertical-align: middle;
max-height: 25px;
max-width: 160px;
}
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
css
image
vertical-alignment
Arnaud Le Blanc
źródło
źródło
Odpowiedzi:
Jedyny (a najlepiej cross-browser) sposób co wiem jest użycie
inline-block
pomocnika zheight: 100%
ivertical-align: middle
na obu elementów.Istnieje więc rozwiązanie: http://jsfiddle.net/kizu/4RPFa/4570/
Pokaż fragment kodu
Lub, jeśli nie chcesz mieć dodatkowego elementu we współczesnych przeglądarkach i nie masz nic przeciwko używaniu wyrażeń Internet Explorera, możesz użyć pseudoelementu i dodać go do Internet Explorera za pomocą wygodnego wyrażenia, które działa tylko raz na element , więc nie będzie żadnych problemów z wydajnością:
Rozwiązanie z
:before
iexpression()
dla Internet Explorera: http://jsfiddle.net/kizu/4RPFa/4571/Pokaż fragment kodu
Jak to działa:
Kiedy masz dwa
inline-block
elementy blisko siebie, możesz wyrównać je względem siebie, dziękivertical-align: middle
czemu otrzymasz coś takiego:Gdy ma blok o stałej wysokości (w
px
,em
lub w innym urządzeniu absolutnej), można ustawić wysokość wewnętrznych bloków%
.inline-block
zheight: 100%
blokiem o stałej wysokości wyrównałbyinline-block
w nim kolejny element (<img/>
w twoim przypadku) pionowo w jego pobliżu.źródło
.frame
i.frame:before
. Proponowanym tutaj rozwiązaniem jest dodaniemargin-left: -4px
do.frame
. Mam nadzieję że to pomoże.<img src=""/>
NIE znajduje się wewnątrz<span></span>
dodanego pomocnika. Jest na zewnątrz. Prawie wyciągnąłem każdy kosmyk włosów, nie zdając sobie z tego sprawy.Może to być przydatne:
źródło
position:fixed;
Rozwiązanie matejkramny to dobry początek, ale zbyt duże obrazy mają niewłaściwy współczynnik.
Oto mój widelec:
Demo: https://jsbin.com/lidebapomi/edit?html,css,output
HTML:
CSS:
źródło
top: 0;
. Powodujebottom: 0;
to zastosowanie tylko w pionie.Trzy liniowe rozwiązanie:
Dotyczy to wszystkiego.
Od tutaj .
źródło
position: absolute;
ponieważ potrzebujesz płynnej szerokości.Czysty roztwór CSS:
Kluczowe rzeczy
źródło
Aby uzyskać bardziej nowoczesne rozwiązanie i jeśli nie ma potrzeby obsługi starszych przeglądarek, możesz to zrobić:
Oto długopis: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
źródło
align-self
dla pojedynczych przedmiotówalign-self
polega na tym, że elementy elastyczne rozciągną wysokość pojemnika nadrzędnego.W ten sposób możesz wyśrodkować obraz w pionie ( demonstracja ):
źródło
font-size: 0
przypadkudiv
. W przypadku dość dużych pojemników możesz go przegapić, ale jeśli masz 100div
pikseli, a img to 80 pikseli, będzie o kilka pikseli niższy.Możesz także użyć Flexboksa, aby uzyskać poprawny wynik:
źródło
Istnieje bardzo proste rozwiązanie z Flexbox!
źródło
Możesz spróbować ustawić CSS PI na
display: table-cell; vertical-align: middle;
źródło
PI
”?Możesz wypróbować poniższy kod:
źródło
Rozwiązanie dla obrazu tła
Całkowicie usunąłem element obrazu i ustawiłem go jako tło div z klasą
.frame
http://jsfiddle.net/URVKa/2/
Działa to przynajmniej dobrze w Internet Explorerze 8, Firefox 6 i Chrome 13.
Sprawdziłem, a to rozwiązanie nie zadziała, aby zmniejszyć obrazy o wysokości większej niż 25 pikseli. Istnieje właściwość o nazwie,
background-size
która określa rozmiar elementu, ale CSS 3 koliduje z wymaganiami programu Internet Explorer 7.Radzę ci albo zmienić priorytety przeglądarki i zaprojektować najlepsze dostępne przeglądarki, albo uzyskać kod po stronie serwera, aby zmienić rozmiar obrazów, jeśli chcesz skorzystać z tego rozwiązania.
źródło
Wyobraź sobie, że masz
I css:
źródło
Możesz to zrobić:
Próbny
http://jsfiddle.net/DZ8vW/1
CSS
JavaScript
źródło
http://jsfiddle.net/MBs64/
Kluczowa właściwość jest
display: table-cell;
dla.frame
.Div.frame
jest wyświetlany jako zgodny z tym, więc musisz zawinąć go w element bloku.Działa to w Firefox, Opera, Chrome, Safari i Internet Explorer 8 (i nowszych).
AKTUALIZACJA
W przypadku przeglądarki Internet Explorer 7 musimy dodać wyrażenie CSS:
źródło
Moje rozwiązanie: http://jsfiddle.net/XNAj6/2/
źródło
Działa to w przypadku nowoczesnych przeglądarek (2016 w momencie edycji), jak pokazano w tym demo na codepen
Bardzo ważne jest, aby albo nadać obrazom klasę, albo użyć dziedziczenia, aby kierować na obrazy, których potrzebujesz wyśrodkować. W tym przykładzie wykorzystaliśmy
.frame img {}
tak, że.frame
celem byłyby tylko obrazy owinięte przez div z klasą .źródło
Wypróbuj to rozwiązanie z czystym CSS http://jsfiddle.net/sandeep/4RPFa/72/
Być może jest to główny problem z Twoim HTML. Nie używasz cudzysłowów podczas definiowania c
lass
&image height
w swoim HTML.CSS:
Kiedy pracuję z
img
tagiem, pozostawia od 3 do 2 pikseli miejscatop
. Teraz zmniejszam sięline-height
i działa.CSS:
Ta
line-height
właściwość jest renderowana inaczej w różnych przeglądarkach. Musimy więc zdefiniować różneline-height
przeglądarki właściwości.Sprawdź ten przykład: http://jsfiddle.net/sandeep/4be8t/11/
Sprawdź ten przykład na temat
line-height
różnych w różnych przeglądarkach: wprowadzaj różnice wysokości w Firefox i Chromeźródło
Nie jestem pewien co do Internet Explorera, ale pod Firefox i Chrome, jeśli masz
img
wdiv
kontenerze, poniższe treści CSS powinny działać. Przynajmniej dla mnie działa dobrze:źródło
display:table-cell;
nie akceptuje% jako szerokościRozwiązanie za pomocą tabeli i komórek tabeli
Czasami należy to rozwiązać, wyświetlając jako tabelę / komórkę tabeli. Na przykład szybki ekran tytułowy. Jest to również zalecany sposób przez W3. Polecam sprawdzić ten link o nazwie Wyśrodkowanie bloku lub obrazu z W3C.org.
Zastosowane tutaj wskazówki to:
Ja osobiście nie zgadzam się na użycie pomocników do tego celu.
źródło
Prosty sposób, który działa dla mnie:
Działa bardzo dobrze dla Google Chrome. Wypróbuj ten w innej przeglądarce.
źródło
Do wyśrodkowania obrazu wewnątrz kontenera (może to być logo) oprócz niektórych takich tekstów:
Zasadniczo zawijasz obraz
źródło
Jeśli możesz żyć z marginesami wielkości pikseli, po prostu dodaj
font-size: 1px;
do.frame
. Pamiętaj jednak, że teraz na.frame
1em = 1px, co oznacza, że musisz również ustawić margines w pikselach.http://jsfiddle.net/feeela/4RPFa/96/
Teraz nie jest już wyśrodkowany w Operze…
źródło
Miałem ten sam problem. To działa dla mnie:
źródło
Możesz użyć tego:
źródło
Używając
table
itable-cell
metody, wykonuj zadanie, szczególnie dlatego, że celujesz w niektóre stare przeglądarki, tworzę dla ciebie fragment, który możesz uruchomić i sprawdzić wynik:źródło
Bawiłem się używając paddingu do centrowania. Będziesz musiał zdefiniować rozmiar pojemnika zewnętrznego najwyższego poziomu, ale rozmiar pojemnika wewnętrznego powinien się zmienić i możesz ustawić wypełnienie na różne wartości procentowe.
jsfiddle
źródło
Najlepszym rozwiązaniem jest to
źródło
Użyj tego:
I możesz się różnić
font-size
.źródło
Chcesz wyrównać obraz, który ma tekst / tytuł i oba są w div?
Zobacz w JSfiddle lub Run Snippet Code.
Pamiętaj tylko, aby mieć identyfikator lub klasę we wszystkich elementach (div, img, title itp.).
Dla mnie działa to rozwiązanie we wszystkich przeglądarkach (w przypadku urządzeń mobilnych musisz dostosować swój kod za pomocą: @media).
źródło