Czy istnieje sposób, aby tło w CSS rozciągało się lub skalowało, aby wypełnić swój pojemnik?
653
W przypadku nowoczesnych przeglądarek możesz to zrobić za pomocą background-size
:
body {
background-image: url(bg.jpg);
background-size: cover;
}
cover
oznacza rozciąganie obrazu w pionie lub w poziomie, aby nigdy nie był układany w kafelki / powtarzany.
To działałoby w Safari 3 (lub nowszym), Chrome, Opera 10+, Firefox 3.6+ i Internet Explorer 9 (lub nowszy).
Aby działał z niższymi wersjami Internet Explorera, wypróbuj następujące CSS:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
Użyj CSS 3 właściwości
background-size
:Jest to dostępne w nowoczesnych przeglądarkach od 2012 roku.
źródło
background-size: 100% 100%;
aby uzyskać pożądany efekt, o który zamierzałem, jeśli to pomoże komukolwiek innemu.cover
icontain
na MDNSkalowanie obrazu za pomocą CSS nie jest całkiem możliwe, ale podobny efekt można osiągnąć w następujący sposób.
Użyj tego znacznika:
z następującym CSS:
i powinieneś skończyć!
Aby przeskalować obraz do „pełnego spadu” i zachować proporcje, możesz to zrobić w zamian:
Działa całkiem nieźle! Jeśli jednak zostanie przycięty jeden wymiar, zostanie on przycięty tylko z jednej strony obrazu, a nie równo przycięty z obu stron (i wyśrodkowany). Przetestowałem to w Firefox, Webkit i Internet Explorer 8.
źródło
margin: 0 auto
włączonym.stretch
. Po ustawieniuwidth
lubheight
współczynnik kształtu pozostaje taki sam. Spróbuj użyćmax-width
i,max-height
aby ograniczyć współczynnik powiększenia ...Użyj atrybutu rozmiaru tła w CSS3:
EDYCJA: Modernizr obsługuje wykrywanie obsługi rozmiaru tła . Możesz użyć obejścia JavaScript napisanego do działania, jednak potrzebujesz go i ładować dynamicznie, gdy nie ma wsparcia. Pozwoli to zachować kod do utrzymania bez uciekania się do natrętnych hacków CSS w niektórych przeglądarkach.
Osobiście używam skryptu, aby sobie z tym poradzić za pomocą jQuery, jest to adaptacja programu imgsizer . Ponieważ w większości projektów używam teraz% szerokości dla układów płynnych na różnych urządzeniach, istnieje niewielka adaptacja do jednej z pętli (uwzględniając rozmiary, które nie zawsze są w 100%):
EDYCJA: Możesz być także zainteresowany finalizacją jQuery CSS3 .
źródło
Wypróbuj rozmiar artykułu w tle . Jeśli zastosujesz wszystkie poniższe elementy, będzie działać w większości przeglądarek oprócz Internet Explorera.
źródło
preserveAspectRatio="none"
w pliku SVG. Więcej informacji na ten temat tutaj . Demo tutaj .Obecnie nie. Będzie dostępny w CSS 3 , ale zajmie to trochę czasu, zanim zostanie zaimplementowany w większości przeglądarek.
źródło
Pracuje w:
Ponadto możesz wypróbować to rozwiązanie np
Podziękowania dla tego artykułu autorstwa Chrisa Coyiera http://css-tricks.com/perfect-full-page-background-image/
źródło
background-size: cover
z wyjątkiem prefiksów przeglądarki i rozwiązania IEJednym słowem: nie. Jedynym sposobem na rozciągnięcie obrazu jest<img>
użycie tagu. Musisz być kreatywny.Tak było kiedyś w 2008 roku, kiedy napisano odpowiedź. Dzisiaj obsługiwane są nowoczesne przeglądarki,
background-size
które rozwiązują ten problem. Uważaj, że IE8 go nie obsługuje.źródło
Zdefiniuj „rozciągnij i skaluj” ...
Jeśli masz format bitmapy, na ogół nie jest świetne (mówiąc graficznie) rozciąganie go i przeciąganie. Możesz użyć powtarzalnych wzorów, aby uzyskać iluzję tego samego efektu. Na przykład, jeśli masz gradient, który staje się jaśniejszy w kierunku dolnej części strony, wówczas użyłbyś grafiki o szerokości jednego piksela i tej samej wysokości co kontener (lub najlepiej większy, aby uwzględnić skalowanie), a następnie ułóż go na strona. Podobnie, jeśli gradient przebiegałby przez stronę, byłby o jeden piksel wyższy i szerszy niż kontener i powtarzany w dół strony.
Zwykle, aby złudzić jego rozciąganie w celu napełnienia pojemnika, gdy pojemnik rośnie lub kurczy się, obraz staje się większy niż pojemnik. Wszelkie nakładki nie będą wyświetlane poza granicami kontenera.
Jeśli chcesz uzyskać efekt, który opiera się na czymś takim, jak pudełko z zakrzywionymi krawędziami, przykleiłbyś lewą stronę pudełka do lewej strony pojemnika z wystarczającym zachodzeniem na siebie (z uzasadnionego powodu) bez względu na to, jak duży jest pojemnik, nigdy kończy się tło, a następnie nakładasz obraz prawej strony pudełka zakrzywionymi krawędziami i umieszczasz go po prawej stronie pojemnika. Tak więc, gdy pojemnik kurczy się lub rośnie, efekt zakrzywionego pudełka wydaje się wraz z nim kurczyć lub rosnąć - w rzeczywistości nie, ale daje iluzję, co się dzieje.
Aby naprawdę zmniejszyć obraz i powiększać się wraz z pojemnikiem, musisz użyć kilku sztuczek warstw, aby obraz wyglądał jak tło, a także javascript, aby zmienić jego rozmiar wraz z pojemnikiem. Obecnie nie ma takiej możliwości w CSS ...
Jeśli używasz grafiki wektorowej, obawiam się, że jesteś daleko poza moim obszarem wiedzy.
źródło
Właśnie z tego zrobiłem. W klasie stretch po prostu zmieniłem wysokość na
auto
. W ten sposób obraz tła ma zawsze taki sam rozmiar jak szerokość ekranu, a wysokość zawsze będzie miała odpowiedni rozmiar.źródło
Dodaj
background-attachment
linię:źródło
Chciałbym zauważyć, że jest to równoważne z robieniem:
źródło
Innym świetnym rozwiązaniem tego problemu jest Backstretch Srobbina, który można zastosować do ciała lub dowolnego elementu na stronie - http://srobbin.com/jquery-plugins/backstretch/
źródło
Spróbuj tego
http://jsfiddle.net/5LZ55/4/
źródło
Dodatkową wskazówką do oszukiwania SolidSmile jest skalowanie (proporcjonalne zmiany rozmiaru) poprzez ustawienie szerokości i użycie auto dla wysokości.
Dawny:
źródło
Użyj tej
border-image : yourimage
właściwości, aby ustawić obraz i przeskalować go do całej granicy ekranu lub okna.źródło