Wydaje się to trywialne, ale po wszystkich badaniach i kodowaniu nie mogę zmusić go do pracy. Warunki są następujące:
- Rozmiar okna przeglądarki jest nieznany. Dlatego prosimy nie proponować rozwiązania obejmującego bezwzględne rozmiary pikseli.
- Oryginalne wymiary obrazu są nieznane i mogą, ale nie muszą, już pasować do okna przeglądarki.
- Obraz jest wyśrodkowany w pionie i poziomie.
- Zachowaj proporcje obrazu.
- Obraz musi być wyświetlany w całości w oknie (bez przycinania).
- Nie chcę, aby pojawiły się paski przewijania (i nie powinny, jeśli obraz pasuje).
- Obraz automatycznie zmienia rozmiar, gdy zmieniają się wymiary okna, aby zająć całą dostępną przestrzeń bez przekraczania rozmiaru oryginalnego.
Zasadniczo chcę tego:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
Problem z powyższym kodem polega na tym, że nie działa: zdjęcie zajmuje całą potrzebną przestrzeń w pionie, dodając pionowy pasek przewijania.
Do mojej dyspozycji jest PHP, Javascript, JQuery, ale zabiłbym dla rozwiązania tylko CSS. Nie obchodzi mnie, czy to nie działa w IE.
Odpowiedzi:
Aktualizacja 2018-04-11
Oto bez Javascript, tylko CSS . Obraz zostanie dynamicznie wyśrodkowany, a jego rozmiar zostanie dopasowany do okna.
[Inne, stare] rozwiązanie wykorzystujące JQuery ustawia wysokość kontenera obrazu (
body
w poniższym przykładzie) tak, abymax-height
właściwość obrazu działała zgodnie z oczekiwaniami. Obraz zmieni się również automatycznie po zmianie rozmiaru okna klienta.Uwaga: użytkownik gutierrezalex zapakował bardzo podobne rozwiązanie jako wtyczkę JQuery na tej stronie.
źródło
Oto proste rozwiązanie tylko dla CSS ( JSFiddle ), działa wszędzie, w tym na urządzenia mobilne i IE:
CSS 2.0:
HTML:
źródło
CSS3 wprowadza nowe jednostki, które są mierzone względem widocznego obszaru, czyli okna w tym przypadku. Są to
vh
ivw
, które mierzą odpowiednio wysokość i szerokość rzutni. Oto proste rozwiązanie tylko dla CSS:Jedynym zastrzeżeniem jest to, że działa tylko wtedy, gdy na stronie nie ma innych elementów wpływających na wysokość.
źródło
100vh
obraz nie pasuje, ale97vh
działa dobrze?vh
dosłownie oznacza wysokość widoku, więc jeśli jakiekolwiek inne elementy zwiększą wysokość Twojej strony, cała strona będzie> 100vh. Czy to ma sens?.svg
plik renderuje się dobrze, ale zmiana nazwy na.html
powoduje niedokładność): przeglądarka automatycznie dodaje<body>
tag z wartością domyślną,margin:8
nawet jeśli plik nie ma<body>
tagu. Tak więc rozwiązaniem jest dodanie<style>body{margin:0}</style>
Jeśli chcesz umieścić element kontenera wokół swojego obrazu, proste rozwiązanie CSS jest proste. Widzisz, 99% wysokości nie ma znaczenia, kiedy element nadrzędny będzie się rozciągał w pionie, aby zawierać swoje dzieci. Rodzic musi mieć stałą wysokość, powiedzmy ... wysokość rzutni.
HTML
CSS
Graj na skrzypcach .
źródło
<div>
zamiast<img>
?Zmień rozmiar obrazu, aby dopasować go do ekranu najdłuższym bokiem, zachowując proporcje
width: 100vw
- szerokość obrazu będzie wynosić 100% portu widokuheight: auto
- wysokość obrazu zostanie przeskalowana proporcjonalniemax-height: 100vw
- jeśli wysokość obrazu byłaby większa niż widok portu, zostanie zmniejszona w celu dopasowania do ekranu, w konsekwencji szerokość obrazu zostanie zmniejszona ze względu na następującą właściwośćobject-fit: contain
- zastępowana zawartość jest skalowana, aby zachować proporcje, dopasowując się do pola zawartości elementuUwaga:
object-fit
jest w pełni obsługiwany tylko od wersji IE 16.0źródło
object-fit
lub możesz jawnie użyć tego,object-fit: fill;
który jest domyślny .Moja ogólna leniwa reguła CSS:
Może to spowodować powiększenie obrazu, jeśli ma on niską rozdzielczość (ma to związek z jakością obrazu i rozmiarem w wymiarach. Aby wyśrodkować obraz, możesz również spróbować (w CSS)
wyśrodkować obraz
w twoim HTML:
źródło
Wiem, że jest tu już kilka odpowiedzi, ale oto czego użyłem:
źródło
Miałem podobne wymaganie i musiałem to zrobić podstawowym CSS i JavaScript. Brak dostępnego JQuery.
To jest to, co mam podczas pracy.
Uwaga: nie użyłem 100% szerokości obrazu, ponieważ zawsze trzeba było wziąć pod uwagę trochę dopełnienia.
źródło
img
tagi nabody
stronie i ustawmax-height
na49vh
. Wyświetlanie więcej niż dwóch obrazów w widocznym obszarze jest pozostawione jako ćwiczenie dla czytelnika.Uprość to. Dzięki
źródło
Uważam, że to powinno załatwić sprawę.
źródło
A może sprawdź to: http://css-tricks.com/how-to-resizeable-background-image/
źródło
Opierając się na odpowiedzi @ Rohit, rozwiązuje to problemy zgłoszone przez Chrome, niezawodnie zmienia rozmiar obrazów, a także działa w przypadku wielu obrazów ułożonych w pionie, np.
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
Prawdopodobnie jest na to bardziej elegancki sposób.źródło
Użyj tego kodu w swoim tagu stylu
źródło