CSS: 100% szerokości lub wysokości przy zachowaniu współczynnika proporcji?
174
Obecnie w STYLE mogę używać width: 100%i autona wysokości (lub odwrotnie), ale nadal nie mogę ograniczyć obrazu do określonej pozycji, odpowiednio będąc zbyt szerokim lub zbyt wysokim.
czy możesz opublikować link lub zrzut ekranu, aby pokazać przykład problemu?
Mauro
Odpowiedzi:
138
Jeśli zdefiniujesz tylko jeden wymiar na obrazku, proporcje obrazu będą zawsze zachowane.
Czy problem polega na tym, że obraz jest większy / wyższy niż wolisz?
Możesz umieścić go wewnątrz DIV, który jest ustawiony na maksymalną wysokość / szerokość, jaką chcesz dla obrazu, a następnie ustawić przepełnienie: ukryte. To wykroiłoby wszystko poza to, czego chcesz.
Jeśli obraz ma 100% szerokości i wysokości: auto i uważasz, że jest za wysoki, jest to szczególnie spowodowane zachowaniem współczynnika proporcji. Musisz przyciąć lub zmienić proporcje.
Podaj więcej informacji o tym, co konkretnie próbujesz osiągnąć, a ja postaram się pomóc.
--- EDYTUJ NA PODSTAWIE OPINII ---
Czy znasz właściwości max-width i max-height ? Zawsze możesz je ustawić zamiast tego. Jeśli nie ustawisz żadnego minimum i ustawisz maksymalną wysokość i szerokość, obraz nie zostanie zniekształcony (zostanie zachowany współczynnik proporcji) i nie będzie większy niż którykolwiek z wymiarów jest najdłuższy i osiągnie maksimum.
jeśli obraz jest wyższy niż szeroki, użyłbym wysokości = 100% i szerokości = auto, jeśli obraz jest szerszy niż wysoki, użyłbym szerokości = 100%, wysokości = auto. po prostu nigdy nie wiem, o co chodzi? kadrowanie według maksymalnej wysokości / szerokości zadziałałoby - ale jeśli jest sposób na to - wolałbym tego użyć ...
Weston Watson
2
Czy projektujesz układ płynny czy o stałej szerokości? Jeśli korzystasz z układu o stałej szerokości, zawsze możesz ustawić szerokość na 100%, a obraz będzie odpowiednio skalowany, ale może być bardzo wysoki. Czy próbujesz umieścić obraz w bloku tekstu, czy użyć go jako banera lub tła? Gdybyś mógł pokazać stronę, na której planujesz jej użyć, lub opisać kontekst, mógłbym ci bardziej pomóc. Zobacz również zmiany powyżej.
Andrew,
użycie maksymalnej wysokości na moim img pozwoliło mi ograniczyć obrazy przy jednoczesnym zachowaniu ich proporcji
północnoamerykańska
2
object-fitnie używać?
LeeGee
77
Kilka lat później, szukając tego samego wymagania, znalazłem opcję CSS używającą rozmiaru tła.
#container{
width:100px;/*or 70%, or what you want*/
height:200px;/*or 70%, or what you want*/
background-size: cover;
background-position: center;
background-repeat:no-repeat;}
idealne rozwiązanie, które niestety nie jest obsługiwane przez IE8 :(
japrescott,
Jest to idealne rozwiązanie, ale jeśli robisz to w karuzelach, powoduje to, że obrazy są puste przez sekundę po każdym slajdzie.
kloddant
58
Ustawiając max-widthwłaściwość CSS na 100%, obraz wypełni szerokość elementu nadrzędnego, ale nie będzie renderowany w rozmiarze większym niż rzeczywisty, zachowując w ten sposób rozdzielczość.
Ustawienie heightwłaściwości tak, aby autozachowywało proporcje obrazu, użycie tej techniki umożliwia zastąpienie statycznej wysokości i umożliwia proporcjonalne wyginanie obrazu we wszystkich kierunkach.
Dzięki za przypomnienie object-fit. Dokładnie to, czego potrzebowałem.
Ash Clarke
5
Jest to idealne rozwiązanie, ale niestety object-fitnie jest obsługiwane w żadnej wersji IE ani Edge od 28 marca 2017 r.
Simon G
2
Od marca 2019 ta funkcja ma 90% wsparcia - więc to naprawdę należy uznać za poprawną odpowiedź.
Hampus Ahlgren
object-fit: containobject-fit: coverwidthpx
Zwróć
Próbowałem object-fitz max-widthi max-heightjak w innych odpowiedziach, ale to nie zadziałało. działa to doskonale w przypadku losowych rozmiarów obrazu, nawet z widthiheight 100%
Halfacht
27
Miałem ten sam problem. Problem dla mnie polegał na tym, że właściwość wysokości była już zdefiniowana w innym miejscu, naprawiłem to w ten sposób:
Dokładnie to, czego szukałem. Dzięki milionowi koleś.
London Smith
Idealne, gdy rozmiar obrazu może być mniejszy lub większy niż nadrzędny element div, a jego rozmiar zostanie zmieniony na idealne centrum z maksymalną szerokością LUB maksymalną wysokością. Nie musisz używać obrazu jako tła, które po prostu przepełni rodzica, jeśli zostanie ustawione na "okładka".
głosował za pierwszą część. druga część mi nie wyszła ... :(
Vikas Bansal
Tylko jeden problem - jeśli obraz jest większy niż 100% pojemnika, wysypie się i będzie wymagał pasków przewijania lub przycięcia. Nie jestem pewien, jak osiągnąć to samo i nadal ograniczać maksymalny rozmiar do kontenera. Jeśli ustawisz maksymalną szerokość i wysokość, nie zachowa już proporcji.
JustAMartin
5
Jedna z odpowiedzi zawiera stwierdzenie background-size: include css, które bardzo mi się podoba, ponieważ jest to proste stwierdzenie tego, co chcesz zrobić, a przeglądarka po prostu to robi.
Niestety prędzej czy później będziesz musiał zastosować cień, który niestety nie będzie dobrze współgrał z rozwiązaniami dotyczącymi obrazu tła.
Powiedzmy więc, że masz kontener, który jest responsywny, ale ma dobrze zdefiniowane granice minimalnej i maksymalnej szerokości i wysokości.
Kontener ma obraz, który musi uwzględniać piksele wysokości kontenera, aby uniknąć uzyskania bardzo wysokiego obrazu, który przepełnia się lub jest przycięty.
Obraz powinien również definiować maksymalną szerokość równą 100%, aby po pierwsze umożliwić renderowanie mniejszych szerokości, a po drugie, aby był oparty na procentach, co czyni go parametrycznym.
Dzięki za te rozwiązania i link do jsdfiddle. To faktycznie zadziałało w mojej galerii obrazów reakcji, w której używam zarówno obrazów o większej wysokości, jak i obrazów o większej szerokości. :)
Eugenijus S.
4
Używam tego do prostokątnego pojemnika o stałej wysokości i szerokości, ale z obrazami o różnych rozmiarach.
Najlepiej jest używać auto na wymiarze, który powinien uwzględniać proporcje. Jeśli nie ustawisz drugiej właściwości na auto, większość przeglądarek będzie obecnie zakładać, że chcesz przestrzegać współczynnika proporcji, ale nie wszystkie z nich (na przykład IE10 na Windows Phone 8 nie)
To bardzo proste rozwiązanie, które wymyśliłem po podążaniu za linkiem conca i sprawdzeniu rozmiaru tła. Wysadza obraz w górę, a następnie dopasowuje go do środka w zewnętrznym pojemniku bez skalowania.
Nawet jeśli nie jest to właściwe, ponieważ używasz! Important override na wysokości, jeśli używasz CMS, takiego jak WordPress, który ustawia dla Ciebie wysokość i szerokość, działa to dobrze.
Użyj JQuery lub czegoś podobnego, ponieważ CSS jest ogólnym nieporozumieniem (niezliczone pytania i dyskusje na temat prostych celów projektowych pokazują to).
W CSS nie jest możliwe zrobienie tego, co chcesz: obraz powinien mieć szerokość 100%, ale jeśli ta szerokość powoduje wysokość, która jest zbyt duża, obowiązuje maksymalna wysokość - i oczywiście prawidłowe proporcje powinny być zachowane.
Odpowiedzi:
Jeśli zdefiniujesz tylko jeden wymiar na obrazku, proporcje obrazu będą zawsze zachowane.
Czy problem polega na tym, że obraz jest większy / wyższy niż wolisz?
Możesz umieścić go wewnątrz DIV, który jest ustawiony na maksymalną wysokość / szerokość, jaką chcesz dla obrazu, a następnie ustawić przepełnienie: ukryte. To wykroiłoby wszystko poza to, czego chcesz.
Jeśli obraz ma 100% szerokości i wysokości: auto i uważasz, że jest za wysoki, jest to szczególnie spowodowane zachowaniem współczynnika proporcji. Musisz przyciąć lub zmienić proporcje.
Podaj więcej informacji o tym, co konkretnie próbujesz osiągnąć, a ja postaram się pomóc.
--- EDYTUJ NA PODSTAWIE OPINII ---
Czy znasz właściwości max-width i max-height ? Zawsze możesz je ustawić zamiast tego. Jeśli nie ustawisz żadnego minimum i ustawisz maksymalną wysokość i szerokość, obraz nie zostanie zniekształcony (zostanie zachowany współczynnik proporcji) i nie będzie większy niż którykolwiek z wymiarów jest najdłuższy i osiągnie maksimum.
źródło
object-fit
nie używać?Kilka lat później, szukając tego samego wymagania, znalazłem opcję CSS używającą rozmiaru tła.
Ma działać w nowoczesnych przeglądarkach (IE9 +).
I styl:
Odniesienie: http://www.w3schools.com/cssref/css3_pr_background-size.asp
I demo: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size
źródło
Ustawiając
max-width
właściwość CSS na100%
, obraz wypełni szerokość elementu nadrzędnego, ale nie będzie renderowany w rozmiarze większym niż rzeczywisty, zachowując w ten sposób rozdzielczość.Ustawienie
height
właściwości tak, abyauto
zachowywało proporcje obrazu, użycie tej techniki umożliwia zastąpienie statycznej wysokości i umożliwia proporcjonalne wyginanie obrazu we wszystkich kierunkach.źródło
height
doauto
przyczyn reflow, gdy obraz jest płynąłProste, eleganckie rozwiązanie robocze:
źródło
object-fit
. Dokładnie to, czego potrzebowałem.object-fit
nie jest obsługiwane w żadnej wersji IE ani Edge od 28 marca 2017 r.object-fit: contain
object-fit: cover
width
px
object-fit
zmax-width
imax-height
jak w innych odpowiedziach, ale to nie zadziałało. działa to doskonale w przypadku losowych rozmiarów obrazu, nawet zwidth
iheight 100%
Miałem ten sam problem. Problem dla mnie polegał na tym, że właściwość wysokości była już zdefiniowana w innym miejscu, naprawiłem to w ten sposób:
źródło
Proste rozwiązanie:
Przy okazji, jeśli chcesz wyśrodkować go w nadrzędnym kontenerze div, możesz dodać te właściwości css:
Powinno naprawdę działać zgodnie z oczekiwaniami :)
źródło
Jedna z odpowiedzi zawiera stwierdzenie background-size: include css, które bardzo mi się podoba, ponieważ jest to proste stwierdzenie tego, co chcesz zrobić, a przeglądarka po prostu to robi.
Niestety prędzej czy później będziesz musiał zastosować cień, który niestety nie będzie dobrze współgrał z rozwiązaniami dotyczącymi obrazu tła.
Powiedzmy więc, że masz kontener, który jest responsywny, ale ma dobrze zdefiniowane granice minimalnej i maksymalnej szerokości i wysokości.
Kontener ma obraz, który musi uwzględniać piksele wysokości kontenera, aby uniknąć uzyskania bardzo wysokiego obrazu, który przepełnia się lub jest przycięty.
Obraz powinien również definiować maksymalną szerokość równą 100%, aby po pierwsze umożliwić renderowanie mniejszych szerokości, a po drugie, aby był oparty na procentach, co czyni go parametrycznym.
Zauważ, że ma ładny cień;)
Ciesz się przykładem na żywo na tych skrzypcach: http://jsfiddle.net/pligor/gx8qthqL/2/
źródło
Używam tego do prostokątnego pojemnika o stałej wysokości i szerokości, ale z obrazami o różnych rozmiarach.
źródło
Najlepiej jest używać auto na wymiarze, który powinien uwzględniać proporcje. Jeśli nie ustawisz drugiej właściwości na auto, większość przeglądarek będzie obecnie zakładać, że chcesz przestrzegać współczynnika proporcji, ale nie wszystkie z nich (na przykład IE10 na Windows Phone 8 nie)
źródło
To bardzo proste rozwiązanie, które wymyśliłem po podążaniu za linkiem conca i sprawdzeniu rozmiaru tła. Wysadza obraz w górę, a następnie dopasowuje go do środka w zewnętrznym pojemniku bez skalowania.
źródło
background-size: contain;
dopasować obraz do tła.Nie po to, żeby wskakiwać do starego problemu, ale ...
Nawet jeśli nie jest to właściwe, ponieważ używasz! Important override na wysokości, jeśli używasz CMS, takiego jak WordPress, który ustawia dla Ciebie wysokość i szerokość, działa to dobrze.
źródło
Obecnie można stosować
vw
ivh
urządzeń, co stanowi 1% v iewport'S w IDþ i h ośmiu odpowiednio.https://css-tricks.com/fun-viewport-units/
Na przykład:
... sprawi, że obraz będzie tak szeroki, jak to możliwe, zachowując proporcje, ale bez szerszego ani większego niż 100% obszaru roboczego.
źródło
Użyj JQuery lub czegoś podobnego, ponieważ CSS jest ogólnym nieporozumieniem (niezliczone pytania i dyskusje na temat prostych celów projektowych pokazują to).
W CSS nie jest możliwe zrobienie tego, co chcesz: obraz powinien mieć szerokość 100%, ale jeśli ta szerokość powoduje wysokość, która jest zbyt duża, obowiązuje maksymalna wysokość - i oczywiście prawidłowe proporcje powinny być zachowane.
źródło
Myślę, że tego właśnie szukałeś, szukałem tego sam, ale potem przypomniałem sobie to ponownie, zanim znalazłem kod.
ewolucja cyfrowa jest na dobrej drodze.
źródło