Mam witrynę z wieloma stronami i różnymi obrazami w tle i wyświetlam je z CSS, takich jak:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
Chcę jednak wyświetlać różne obrazy (pełny ekran) na jednej stronie za pomocą <img>
elementów i chcę, aby miały one takie same właściwości jak powyższa background-image: cover;
właściwość (obrazy nie mogą być wyświetlane z CSS, muszą być wyświetlane z dokumentu HTML).
Zwykle używam:
div.mydiv img {
width: 100%;
}
Lub:
div.mydiv img {
width: auto;
}
aby obraz był pełny i elastyczny. Jednak obraz zbyt mocno się kurczy ( width: 100%
), gdy ekran staje się zbyt wąski, i pokazuje kolor tła ciała na dolnym ekranie. Druga metoda width: auto;
powoduje, że obraz jest tylko w pełnym rozmiarze i nie reaguje na rozmiar ekranu.
Czy istnieje sposób wyświetlania obrazu w ten sam sposób, co background-size: cover
robi?
Odpowiedzi:
Rozwiązanie nr 1 - Właściwość dopasowania obiektu (brak obsługi IE )
Po prostu ustaw
object-fit: cover;
na obrazie.Zobacz MDN - dotyczący
object-fit: cover
:Zobacz także to demo Codepen, które porównuje
object-fit: cover
zastosowane do obrazu zbackground-size: cover
zastosowanym do obrazu tłaRozwiązanie nr 2 - Zamień obraz na obraz w tle na css
źródło
W rzeczywistości istnieje całkiem proste rozwiązanie css, które działa nawet na IE8:
źródło
Zakładając, że możesz ustawić element kontenera, który chcesz wypełnić, wydaje się, że działa, ale wydaje się nieco pospieszny. Zasadniczo po prostu używam
min/max-width/height
na większym obszarze, a następnie skaluję ten obszar z powrotem do oryginalnych wymiarów.źródło
Znalazłem proste rozwiązanie do emulacji zarówno okładki, jak i zawartości, które jest czystym CSS i działa dla kontenerów o dynamicznych wymiarach, a także nie ogranicza żadnych proporcji obrazu.
Pamiętaj, że jeśli nie potrzebujesz obsługi IE ani Edge'a przed 16, lepiej użyj dopasowania obiektowego.
rozmiar tła: okładka
Tutaj stosuje się 1000%, w przypadku gdy naturalny rozmiar obrazu jest większy niż rozmiar, który jest wyświetlany. Na przykład, jeśli obraz ma wymiary 500 x 500, ale kontener ma tylko 200 x 200. Dzięki temu rozwiązaniu obraz zostanie przeskalowany do 2000 x 2000 (ze względu na minimalną szerokość / minimalną wysokość), a następnie przeskalowany do 200 x 200 (z powodu
transform: scale(0.1)
).Współczynnik x10 można zastąpić x100 lub x1000, ale zwykle renderowanie obrazu 2000 x 2000 na div 20x20 nie jest idealne. :)
rozmiar tła: zawiera
Zgodnie z tą samą zasadą możesz także użyć go do emulacji
background-size: contain
:źródło
transform
w wielu odpowiedziachNie , nie możesz tego zrozumieć,
background-size:cover
ale ...To podejście jest cholernie bliskie: wykorzystuje JavaScript do ustalenia, czy obraz jest poziomy czy pionowy, i odpowiednio stosuje style.
JS
CSS
http://jsfiddle.net/b3PbT/
źródło
Musiałem emulować
background-size: contain
, ale nie mogłem użyć zobject-fit
powodu braku wsparcia. Moje obrazy miały pojemniki o określonych wymiarach, co w końcu działało dla mnie:źródło
min-height: 100%; max-height:100%;
i uzyskać równowartość wielkości tła: okładka;min-height: 100%; max-height:100%;
nie zachowałaby proporcji, więc nie jest dokładnie równoważna.Spróbuj ustawić zarówno
min-height
imin-width
, zedisplay:block
:( skrzypce )
Pod warunkiem, że elementem zawierającym obraz jest
position:relative
lubposition:absolute
, obraz przykryje pojemnik. Jednak nie będzie wyśrodkowany.Możesz łatwo wyśrodkować obraz, jeśli wiesz, czy przepełni się on w poziomie (ustaw
margin-left:-50%
), czy w pionie (ustawmargin-top:-50%
). Może być możliwe użycie zapytań o media CSS (i trochę matematyki), aby to ustalić.źródło
Dzięki CSS możesz symulować
object-fit: [cover|contain];
. To użycietransform
i[max|min]-[width|height]
. To nie jest idealne. To nie działa w jednym przypadku: jeśli obraz jest szerszy i krótszy niż pojemnik.źródło
Co możesz zrobić, to użyć atrybutu „style”, aby dodać obraz tła do elementu, w ten sposób nadal będziesz wywoływać obraz w HTML, ale nadal będziesz mógł używać zachowania background-size: cover css:
HTML:
CSS:
W ten sposób dodaję zachowanie rozmiar tła: pokrycie do elementów, które muszę dynamicznie ładować do HTML. Następnie możesz użyć niesamowitych klas css, takich jak background-position: center. Bum
źródło
W przypadku IE musisz także dołączyć drugą linię - szerokość: 100%;
źródło
nie wolno mi „dodawać komentarza”, więc robi to, ale tak naprawdę to, co zrobił Eru Penkman, jest dość trafne, aby uzyskać to jako tło, wszystko, co musisz zrobić, to zmienić
DO
źródło
Wiem, że to stare, jednak wiele rozwiązań, które widzę powyżej, ma problem z tym, że obraz / wideo jest zbyt duży dla kontenera, więc nie działa tak jak okładka wielkości tła. Jednak postanowiłem stworzyć „klasy użytkowe”, aby działały one dla obrazów i filmów. Po prostu nadajesz kontenerowi .media-cover-wrapper, a sam element multimedialny klasę .media-cover
Następnie masz następujące jQuery:
Dzwoniąc, pamiętaj o zmianie rozmiaru strony:
Następnie następujący CSS:
Tak, może wymagać jQuery, ale reaguje całkiem dobrze i działa dokładnie tak, jak rozmiar tła: okładka i możesz go użyć na obrazie i / lub wideo, aby uzyskać tę dodatkową wartość SEO.
źródło
Możemy przyjąć podejście ZOOM. Możemy założyć, że maksymalnie 30% (lub więcej do 100%) może być efektem powiększenia, jeśli wysokość obrazu LUB szerokość obrazu jest mniejsza niż żądana wysokość LUB szerokość. Możemy ukryć resztę niepotrzebnego obszaru z przepełnieniem: ukryty.
Spowoduje to dostosowanie obrazów o różnej szerokości LUB wysokości.
źródło
napotkałem te same dokładne objawy. powyżej pracował dla mnie.
źródło