Jak automatycznie zmienić rozmiar dużego obrazu, aby zmieścił się w pojemniku div o mniejszej szerokości, zachowując jednocześnie jego stosunek szerokości do wysokości?
Przykład: stackoverflow.com - kiedy obraz jest wstawiany do panelu edytora, a obraz jest zbyt duży, aby zmieścił się na stronie, obraz jest automatycznie zmieniany.
html
css
image
autoresize
001
źródło
źródło
Odpowiedzi:
Nie stosuj wyraźnej szerokości lub wysokości do znacznika obrazu. Zamiast tego podaj:
Ponadto,
height: auto;
jeśli chcesz określić tylko szerokość.Przykład: http://jsfiddle.net/xwrvxser/1/
źródło
<a>
Obraz z dołączonym tagiem nie zmienił rozmiaru. Zastosowanie reguł do znacznika A rozwiązało ten problem.dopasowanie obiektowe
Okazuje się, że jest na to inny sposób.
wykona pracę. To CSS 3.
Fiddle: http://jsfiddle.net/mbHB4/7364/
źródło
object-fit: cover
Obecnie nie ma sposobu, aby zrobić to poprawnie w sposób deterministyczny, stosując obrazy o stałym rozmiarze, takie jak pliki JPEG lub PNG.
Aby proporcjonalnie zmienić rozmiar obrazu, musisz ustawić albo wysokość, albo szerokość na „100%”, ale nie oba jednocześnie. Jeśli ustawisz oba na „100%”, obraz zostanie rozciągnięty.
Wybór wysokości lub szerokości zależy od obrazu i wymiarów pojemnika:
height="100%"
obraz.width="100%"
obraz.Jeśli obraz jest plikiem SVG, który jest formatem wektorowym o zmiennej wielkości, możesz automatycznie dopasować rozszerzenie do kontenera.
Musisz tylko upewnić się, że plik SVG nie ma żadnej z tych właściwości ustawionych w
<svg>
znaczniku:Większość programów do rysowania wektorów ustawia te właściwości podczas eksportowania pliku SVG, więc będziesz musiał ręcznie edytować plik za każdym razem, gdy eksportujesz, lub napisać skrypt, aby to zrobić.
źródło
background-size: contain
.Oto rozwiązanie, które zarówno pionowo, jak i poziomo wyrówna twój obraz w obrębie div bez rozciągania, nawet jeśli dostarczony obraz jest zbyt mały lub zbyt duży, aby zmieścić się w div.
Treść HTML:
Treść CSS:
Część jQuery:
źródło
Uprość to!
Daj kontenerowi stały,
height
a następnieimg
tag wewnątrz, ustawwidth
imax-height
.Różnica polega na tym, że ustawiłeś na
width
100%, a nie namax-width
.źródło
Piękny hack.
Istnieją dwa sposoby na sprawienie, by obraz był responsywny.
Uruchom tutaj
Ale należy stosować
img
tag umieścić obrazów jak to lepiej niżbackground-image
pod względem SEO , jak można napisać słowo kluczowe walt
tegoimg
tagu. Oto, jak możesz sprawić, by obraz był responsywny.Uruchom tutaj
źródło
Możesz ustawić obraz jako tło na div, a następnie użyć właściwości background-size CSS :
Będzie to „skalowanie obrazu tła, aby być tak duży, jak to możliwe, że obszar tła jest całkowicie pokryte przez obraz tła Niektóre części obrazu tła nie może być w widoku w obszarze pozycjonowania tle.” - W3Schools
źródło
alt
wartości i takich rzeczy (chociaż możesz również dodać fikcyjny obraz, który jest niewidoczny dla technologii nie-asystujących), lub może być konieczne kliknięcie go.background-size: contain
i myślę, że osobiście wybrałbym obojętną trasę obrazu tylko dlatego, że nie ma tak naprawdę łatwego sposobu na zrobienie tego, co tu opisano bez JavaScriptSprawdź moje rozwiązanie: http://codepen.io/petethepig/pen/dvFsA
Jest napisany w czystym CSS, bez żadnego kodu JavaScript. Może obsługiwać obrazy o dowolnym rozmiarze i dowolnej orientacji.
Biorąc pod uwagę taki HTML:
kod CSS to:
źródło
Właśnie opublikowałem wtyczkę jQuery, która robi dokładnie to, czego potrzebujesz, z wieloma opcjami:
https://github.com/GestiXi/image-scale
Stosowanie:
HTML
JavaScript
źródło
To rozwiązanie nie rozciąga obrazu i wypełnia cały pojemnik, ale wycina część obrazu.
HTML:
CSS:
źródło
Widzę, że wiele osób sugerowało dopasowanie obiektu, co jest dobrą opcją. Ale jeśli chcesz, aby działał również w starszych przeglądarkach , istnieje inny sposób na zrobienie tego z łatwością.
To dość proste. Podjąłem podejście polegające na umieszczeniu obrazu w pojemniku z wartością bezwzględną, a następnie umieszczeniu go dokładnie na środku za pomocą kombinacji:
Gdy znajdzie się w centrum, daję obrazowi,
Dzięki temu obraz uzyskuje efekt Object-fit: cover.
Oto demonstracja powyższej logiki.
https://jsfiddle.net/furqan_694/s3xLe1gp/
Ta logika działa we wszystkich przeglądarkach.
źródło
Następujące działa dla mnie idealnie:
źródło
Mam znacznie lepsze rozwiązanie bez potrzeby korzystania z JavaScript. Jest w pełni responsywny i często go używam. Często trzeba dopasować obraz o dowolnym współczynniku kształtu do elementu kontenera o określonym współczynniku kształtu. Konieczne jest posiadanie w pełni responsywnego rozwiązania.
Możesz ustawić maksymalną szerokość i maksymalną wysokość niezależnie; obraz będzie respektował najmniejszy (w zależności od wartości i proporcji obrazu). Możesz także ustawić obraz tak, aby był wyrównany według własnego uznania (na przykład w przypadku obrazu produktu na nieskończonym białym tle możesz łatwo ustawić go na środku dołu).
źródło
Podaj potrzebną wysokość i szerokość obrazu div, który zawiera znacznik <img>. Nie zapomnij podać wysokości / szerokości w odpowiednim znaczniku stylu.
W znaczniku <img> podaj
max-height
imax-width
jako 100%.Możesz dodać szczegóły w odpowiednich klasach po tym, jak dobrze to zrobisz.
źródło
Poniższy kod jest dostosowany do poprzednich odpowiedzi i jest testowany przeze mnie za pomocą obrazu o nazwie
storm.jpg
.Jest to pełny kod HTML prostej strony wyświetlającej obraz. To działa idealnie i zostało przetestowane przeze mnie na stronie www.resizemybrowser.com. Umieść kod CSS na górze kodu HTML, pod sekcją head. Umieść kod obrazu w dowolnym miejscu.
źródło
źródło
Musisz podać przeglądarce wysokość miejsca, w którym ją umieszczasz:
źródło
Edycja: poprzednie pozycjonowanie obrazu na podstawie tabeli miało problemy w Internet Explorerze 11 (
max-height
nie działa wdisplay:table
elementach). Zastąpiłem go pozycjonowaniem opartym na inline, które nie tylko działa dobrze zarówno w Internet Explorerze 7, jak i Internet Explorerze 11, ale wymaga również mniej kodu.Oto moje zdanie na ten temat. Działa to tylko wtedy, gdy kontener ma określony rozmiar (
max-width
imax-height
wydaje się, że nie dogaduje się z kontenerami, które nie mają konkretnego rozmiaru), ale napisałem zawartość CSS w sposób, który pozwala na jej ponowne użycie (dodajpicture-frame
klasę ipx125
klasa wielkości do istniejącego kontenera).W CSS:
I w HTML:
PRÓBNY
Pokaż fragment kodu
Edycja: Możliwe dalsze ulepszenia przy użyciu JavaScript (skalowanie obrazów):
źródło
line-height
. Jeśli tekst alternatywny ma więcej niż jedną linię, zacznie wyglądać naprawdę źle ...Rozwiązałem ten problem za pomocą następującego kodu:
źródło
Jak tu odpowiedziano , możesz także użyć
vh
jednostek zamiast,max-height: 100%
jeśli nie działa w przeglądarce (np. Chrome):źródło
vh
? a co nie działa w Chrome?max-height: xx%
(jednostka procentowa) nie działa w Chrome z niektórymi elementamiimg
, alevh
jednostka działa. Jednak procenty pracowaćheight
,width
,max-width
, itd.Wyśrodkowałem i skalowałem proporcjonalnie obraz wewnątrz hiperłącza zarówno w poziomie, jak i w pionie w ten sposób:
Został przetestowany w przeglądarce Internet Explorer, Firefox i Safari.
Więcej informacji na temat centrowania znajduje się tutaj .
źródło
Akceptowana odpowiedź od Thorn007 nie działa, gdy obraz jest zbyt mały .
Aby rozwiązać ten problem, dodałem współczynnik skali . W ten sposób powiększa obraz i wypełnia pojemnik div.
Przykład:
Uwagi:
-webkit-transform:scale(4); -webkit-transform-origin:left top;
styl.źródło
Jeśli używasz Bootstrap, wystarczy dodać
img-responsive
klasę doimg
tagu:Obrazy ładowania początkowego
źródło
Proste rozwiązanie (poprawka 4-krokowa !!), które wydaje mi się działać, jest poniżej. W przykładzie użyto szerokości, aby określić całkowity rozmiar, ale można także odwrócić ją, aby użyć wysokości.
%
do względnego rozmiaru lub automatycznego skalowania (na podstawie kontenera obrazu lub wyświetlacza)px
(lub innego) dla statycznego lub ustaw wymiarNa przykład,
źródło
Wszystkie udzielone odpowiedzi, w tym zaakceptowana, działają tylko przy założeniu, że
div
opakowanie ma stały rozmiar. Oto jak to zrobić bez względu na rozmiardiv
Oto opakowania i jest to bardzo przydatne, jeśli opracujesz responsywną stronę:Zapisz te deklaracje w swoim
DIV
selektorze:Następnie umieść te deklaracje w swoim
IMG
selektorze:BARDZO WAŻNE:
Wartość
maxHeight
musi być taka sama dla selektorówDIV
iIMG
.źródło
Prostym rozwiązaniem jest użycie Flexbox. Zdefiniuj CSS kontenera, aby:
Dostosuj szerokość zawartego obrazu do 100% i powinieneś uzyskać ładny wyśrodkowany obraz w pojemniku z zachowanymi wymiarami.
źródło
Rozwiązanie jest proste z odrobiną matematyki ...
Wystarczy umieścić obraz w div, a następnie w pliku HTML, w którym określasz obraz. Ustaw wartości szerokości i wysokości w procentach, używając wartości pikseli obrazu, aby obliczyć dokładny stosunek szerokości do wysokości.
Załóżmy na przykład, że masz obraz o szerokości 200 pikseli i wysokości 160 pikseli. Można śmiało powiedzieć, że wartość szerokości wyniesie 100%, ponieważ jest to większa wartość. Aby następnie obliczyć wartość wysokości, wystarczy podzielić wysokość przez szerokość, która daje wartość procentową 80%. W kodzie będzie to wyglądało mniej więcej tak ...
źródło
Najprostszym sposobem na to jest użycie
object-fit
:Jeśli używasz Bootstrap, po prostu dodaj
img-responsive
klasę i zmień naźródło
Sprawdź moją odpowiedź, Spraw , aby obraz był responsywny - najprostszy sposób -
źródło
Lub możesz po prostu użyć:
Teraz obraz zajmie całą przestrzeń div.
źródło