Mam obraz i chcę ustawić określoną szerokość i wysokość (w pikselach)
Ale jeśli ustawię szerokość i wysokość za pomocą css ( width:150px; height:100px
), obraz zostanie rozciągnięty i może być brzydki.
Jak wypełniać obrazy do określonego rozmiaru za pomocą CSS, a nie rozciągać go?
Przykład wypełnienia i rozciągnięcia obrazu:
Oryginalny obraz:
Rozciągnięty obraz:
Wypełniony obraz:
Pamiętaj, że w powyższym przykładzie wypełnionego obrazu: najpierw rozmiar obrazu jest zmieniany na 150x255 (zachowany współczynnik kształtu), a następnie przycinany do rozmiaru 150x100.
width
iheight
należy odpowiednio dostosowaćOdpowiedzi:
Jeśli chcesz użyć obrazu jako tła CSS, istnieje eleganckie rozwiązanie. Po prostu użyj
cover
lubcontain
webackground-size
właściwości CSS3.Podczas gdy
cover
otrzymasz skalowany obraz,contain
da ci skalowany obraz. Oba zachowają proporcje pikseli.http://jsfiddle.net/uTHqs/ (przy użyciu okładki)
http://jsfiddle.net/HZ2FT/ (przy użyciu zawierają)
Takie podejście ma tę zaletę, że jest przyjazne dla wyświetlaczy Retina zgodnie z krótkim przewodnikiem Thomasa Fuchsa.
Warto wspomnieć, że obsługa przeglądarki dla obu atrybutów wyklucza IE6-8.
źródło
background-repeat: no-repeat;
? Jeśli obraz zakrywa swój pojemnik, i tak się nie powtórzy.Możesz użyć właściwości css
object-fit
.Zobacz przykład tutaj
Dla IE istnieje polifill: https://github.com/anselmh/object-fit
źródło
img
tagów (nie tylkobackground-image
metoda opisana w odpowiedzi powyżej). Dziękuję :)object-fit
nie jest obsługiwana w wielu przeglądarkach .background-size
rzadko jest realnym rozwiązaniem w moich projektach. Jest mniej prawdopodobne, że otrzymasz jakąkolwiek korzyść z SEO i nie możesz podać tagu ALT, podpisu itp. Towarzyszącego obrazowi, w którym możesz chcieć zapewnić dodatkowy kontekst dla czytników ekranu.object-fit: cover;
to. Wielkie dziękiWzmocnienie na powyższym Odpowiedź @afonsoduarte ( NOT Przyjęty jeden) .
w przypadku korzystania z bootstrap
Istnieją trzy różnice:
Zapewnienie
width:100%
stylu.Jest to przydatne, jeśli używasz bootstrap i chcesz, aby obraz rozciągał się na całą dostępną szerokość.
Określenie
height
właściwości jest opcjonalne. Możesz ją usunąć / zachować w razie potrzebyNawiasem mówiąc, nie ma potrzeby podawania atrybutów
height
i elementu, ponieważ zostaną one przesłonięte przez styl. więc wystarczy napisać coś takiego.width
image
źródło
Jedynym prawdziwym sposobem jest umieszczenie wokół obrazu pojemnika i użycie
overflow:hidden
:HTML
CSS
CSS sprawia problemy, gdy chcesz robić to, co chcesz i wyśrodkowować obraz, w jquery można szybko naprawić:
http://jsfiddle.net/x86Q7/2/
źródło
margin-top
obraz na przykład50px
(patrz: jsfiddle.net/x86Q7/1 ), ale jak przyciąć go z prawdziwego centrum ? (Bez jQuery?)Rozwiązanie CSS bez JS i bez obrazu tła:
Metoda 1 „margin auto” (IE8 + - NIE FF!):
http://jsfiddle.net/5xjr05dt/
Metoda 2 „transformacja” (IE9 +):
http://jsfiddle.net/5xjr05dt/1/
Metodę 2 można wykorzystać do wyśrodkowania obrazu w pojemniku o stałej szerokości / wysokości. Oba mogą się przepełnić - a jeśli obraz jest mniejszy niż pojemnik, nadal będzie wyśrodkowany.
http://jsfiddle.net/5xjr05dt/3/
Metoda 3 „podwójne opakowanie” (IE8 + - NIE FF!):
http://jsfiddle.net/5xjr05dt/5/
Metoda 4 „podwójne opakowanie ORAZ podwójny obraz” (IE8 +):
http://jsfiddle.net/5xjr05dt/26/
Wydaje się, że metody 1 i 3 nie działają z Firefoksem
źródło
Innym rozwiązaniem jest umieszczenie obrazu w pojemniku o pożądanej szerokości i wysokości. Korzystając z tej metody, nie musisz ustawiać obrazu jako obrazu tła elementu.
Następnie możesz to zrobić za pomocą
img
znacznika i po prostu ustawić maksymalną szerokość i maksymalną wysokość elementu.CSS:
HTML:
Teraz, gdy zmienisz rozmiar kontenera, obraz automatycznie powiększy się tak bardzo, jak to możliwe, bez wychodzenia poza granice i zniekształcania.
Jeśli chcesz wyśrodkować obraz w pionie i poziomie, możesz zmienić css kontenera na:
Oto JS Fiddle http://jsfiddle.net/9kUYC/2/
źródło
Opierając się na odpowiedzi @Dominic Green za pomocą jQuery, oto rozwiązanie, które powinno działać dla obrazów, które są albo szersze niż są wysokie, albo wyższe niż są szerokie.
http://jsfiddle.net/grZLR/4/
Prawdopodobnie istnieje bardziej elegancki sposób obsługi JavaScript, ale to działa.
źródło
Zachowaj ostrożność, jeśli używasz motywu lub czegoś innego, często deklarują img maksymalną szerokość na 100%. Nie musisz nic robić. Przetestuj to :)
https://jsfiddle.net/o63u8sh4/
źródło
Pomogłem zbudować wtyczkę jQuery o nazwie Fillmore , która obsługuje
background-size: cover
przeglądarki, które ją obsługują, i ma pewien podkład dla tych, którzy tego nie robią. Spójrz!źródło
Myślę, że na tę odpowiedź jest już późno. W każdym razie mam nadzieję, że pomoże to komuś w przyszłości. Napotkałem problem z ustawieniem kart pod kątem. Wyświetlane są karty dla szeregu zdarzeń. Jeśli szerokość obrazu zdarzenia jest duża dla karty, obraz powinien zostać pokazany przez przycięcie z dwóch stron i wysokość 100%. Jeśli wysokość obrazu jest długa, dolna część obrazu jest przycinana, a szerokość wynosi 100%. Oto moje czyste rozwiązanie CSS:
HTML:
CSS
źródło
Spróbuj czegoś takiego: http://jsfiddle.net/D7E3E/4/
Używanie kontenera z przepełnieniem: ukryty
EDYCJA: @Dominic Green mnie pokonał.
źródło
Spowoduje to wypełnienie zdjęć do określonego rozmiaru, bez rozciągania lub przycinania
źródło
Aby dopasować obraz do pełnego ekranu, spróbuj:
powtórzenie w tle: okrągłe;
źródło
źródło