Jak uzyskać div, aby automatycznie dostosowywał się do rozmiaru ustawionego dla niego tła bez ustawiania dla niego określonej wysokości (lub minimalnej wysokości)?
css
html
background
height
JohnIdol
źródło
źródło
img
znaczniki, dlaczego po prostu nie ukryć faktów<img>
i nie zawracać sobie głowy żadnym zbackground-image
nich? Jaka jest zaleta robienia rzeczy w ten sposób?background-image
jest to, że może używać trybów mieszania CSS , podczas gdyimg
nie może.Istnieje bardzo fajny i fajny sposób, aby obraz tła działał jak
img
element, dzięki czemu dostosowuje sięheight
automatycznie. Musisz znać obrazwidth
iheight
proporcje. Ustawheight
kontener na 0 i ustawpadding-top
procentową w oparciu o współczynnik obrazu.Będzie to wyglądać następująco:
Właśnie dostałeś obraz tła z automatyczną wysokością, który będzie działał jak element img. Oto działający prototyp (możesz zmienić rozmiar i sprawdzić wysokość div): http://jsfiddle.net/TPEFn/2/
źródło
@mixin div-same-size-as-background-img($url) { background-image: url($url); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: percentage(image-height($url) / image-width($url)); }
position:relative
na div i włożyć kolejny div wposition:absolute; top:0; bottom:0; left:0; right:0;
zestawieNie ma możliwości automatycznego dopasowania rozmiaru obrazu tła za pomocą CSS.
Możesz włamać się do niego, mierząc obraz tła na serwerze, a następnie stosując te atrybuty do div, jak wspomnieli inni.
Możesz również zhakować trochę javascript, aby zmienić rozmiar div na podstawie rozmiaru obrazu (po pobraniu obrazu) - to w zasadzie to samo.
Jeśli potrzebujesz div do automatycznego dopasowania obrazu, mogę zapytać, dlaczego po prostu nie umieścisz
<img>
tagu wewnątrz div?źródło
src
zimg
z zapytaniami mediów, ale można zmienić plik używany jako tło z zapytaniami mediów.Ta odpowiedź jest podobna do innych, ale ogólnie jest najlepsza dla większości aplikacji. Musisz znać rozmiar obrazu przed ręką, co zwykle robisz. Umożliwi to dodawanie tekstu nakładki, tytułów itp. Bez ujemnego dopełniania lub bezwzględnego pozycjonowania obrazu. Kluczem jest ustawienie% wypełnienia, aby dopasować proporcje obrazu, jak pokazano w poniższym przykładzie. Użyłem tej odpowiedzi i zasadniczo dodałem tło obrazu.
źródło
Może to może pomóc, nie jest to dokładnie tło, ale masz pomysł:
źródło
float: left;
złamał swoją pozycjęJestem prawie pewien, że nigdy nie będzie to widoczne tutaj. Ale jeśli twój problem był taki sam jak mój, oto moje rozwiązanie:
Chciałem mieć div na środku obrazu, a to mi na to pozwoli.
źródło
Istnieje czyste rozwiązanie CSS, którego pominięto w innych odpowiedziach.
Właściwość „content:” służy głównie do wstawiania treści tekstowej do elementu, ale może być również używana do wstawiania treści obrazkowych.
Spowoduje to zmianę rozmiaru div do rzeczywistej wielkości piksela obrazu. Aby zmienić również szerokość, dodaj:
źródło
Możesz to zrobić po stronie serwera: mierząc obraz, a następnie ustawiając rozmiar div, LUB ładując obraz za pomocą JS, przeczytaj jego atrybuty, a następnie ustaw rozmiar DIV.
A oto pomysł, umieść ten sam obraz wewnątrz div jako tag IMG, ale daj mu widoczność: ukryty + graj z pozycją względną + daj temu div obraz jako tło.
źródło
Miałem ten problem i znalazłem odpowiedź Hasanaviego, ale dostałem mały błąd podczas wyświetlania obrazu tła na szerokim ekranie - Obraz tła nie rozprzestrzenił się na całą szerokość ekranu.
Oto moje rozwiązanie - oparte na kodzie Hasanaviego, ale lepsze ... i to powinno działać zarówno na bardzo szerokich ekranach, jak i na ekranach mobilnych.
Jak można zauważyć,
background-size: contain;
nieruchomości nie mieszczą się w bardzo szerokich ekranach ibackground-size: cover;
właściwość nie pasuje do ekranów mobilnych, więc użyłem tego@media
atrybutu do zabawy z rozmiarami ekranów i rozwiązania tego problemu.źródło
Co powiesz na to :)
Demo: http://jsfiddle.net/josephmcasey/KhPaF/
źródło
Jeśli jest to pojedynczy z góry określony obraz tła i chcesz, aby div reagował bez zniekształcania proporcji obrazu tła, możesz najpierw obliczyć współczynnik kształtu obrazu, a następnie utworzyć div, który zachowa jego proporcje, wykonując następujące czynności :
Powiedzmy, że chcesz mieć współczynnik proporcji 4/1, a szerokość div wynosi 32%:
Wynika to z faktu, że wypełnienie jest obliczane na podstawie szerokości elementu zawierającego.
źródło
Może to pomóc, nie jest to dokładnie tło, ale masz prosty pomysł
źródło
Możesz zrobić coś takiego
źródło
Jeśli znasz współczynnik obrazu w czasie kompilacji, chcesz, aby wysokość była oparta na wysokości okna i jesteś w stanie celować w nowoczesne przeglądarki (IE9 +) , możesz do tego użyć jednostek rzutni:
Nie do końca to, o co prosiła OP, ale prawdopodobnie dobre dopasowanie dla wielu osób oglądających to pytanie, więc chciałem dać tutaj inną opcję.
Fiddle: https://jsfiddle.net/6Lkzdnge/
źródło
Spojrzałem na niektóre rozwiązania i są świetne, ale myślę, że znalazłem zaskakująco łatwy sposób.
Najpierw musimy uzyskać stosunek z obrazu tła. Po prostu dzielimy jeden wymiar na inny. Wtedy otrzymujemy coś takiego jak na przykład 66,4%
Gdy mamy współczynnik obrazu, możemy po prostu obliczyć wysokość div, mnożąc współczynnik przez szerokość rzutni:
Dla mnie to działa, odpowiednio ustawia wysokość div i zmienia ją po zmianie rozmiaru okna.
źródło
Załóżmy, że masz coś takiego:
i chcesz dodać do niego tło, ale nie znasz wymiaru obrazu.
Miałem podobny problem i rozwiązałem go za pomocą siatki:
HTML
CSS
z-index
służy tylko do umieszczenia obrazu w tle, możesz oczywiście umieścić goimg.background
naddiv.content
.UWAGA : może powodować, że
div.content
obraz ma tę samą wysokość obrazu, więc jeślidiv.content
jakieś dzieci ustawią się zgodnie z jego wysokością, możesz chcieć ustawić liczbę inną niż „auto”.źródło
Miałem ten problem z Umbraco CMS iw tym scenariuszu możesz dodać obraz do div, używając czegoś takiego dla atrybutu „style” div:
źródło
Przez jakiś czas zajmowałem się tym problemem i postanowiłem napisać wtyczkę jquery, aby rozwiązać ten problem. Ta wtyczka znajdzie wszystkie elementy z klasą „show-bg” (lub możesz przekazać jej własny selektor) i obliczyć wymiary obrazu tła. wszystko co musisz zrobić, to dołączyć ten kod, zaznaczyć żądane elementy za pomocą class = "show
Cieszyć się!
https://bitbucket.org/tomeralmog/jquery.heightfrombg
źródło
Najlepszym rozwiązaniem, jakie mogę wymyślić, jest podanie szerokości i wysokości w procentach. Umożliwi to zmianę rozmiaru ekranu na podstawie rozmiaru monitora. bardziej responsywny układ ..
Na przykład. ty masz
Jest to najlepsza opcja, jeśli chcesz mieć responsywny układ, nie polecam float, w niektórych przypadkach float jest w porządku. ale w większości przypadków unikamy używania zmiennoprzecinkowego, ponieważ wpłynie to na wiele rzeczy podczas testowania w różnych przeglądarkach.
Mam nadzieję że to pomoże :)
źródło
w rzeczywistości jest to dość łatwe, gdy wiesz, jak to zrobić:
sztuczka polega na ustawieniu dołączonej div tak, jak normalnej div z wartościami wymiarów takimi samymi jak wartości wymiarów tła (w tym przykładzie 100% i 40vw).
źródło
Rozwiązałem to za pomocą jQuery. Dopóki nowe reguły CSS nie pozwolą na takie zachowanie natywnie, uważam, że jest to najlepszy sposób na zrobienie tego.
Skonfiguruj swoje divy
Poniżej masz div, na którym ma się pojawiać tło („bohater”), a następnie wewnętrzną treść / tekst, który chcesz nałożyć na obraz tła („wewnętrzny”). Możesz (i powinieneś) przenieść style wbudowane do swojej klasy bohatera. Zostawiłem je tutaj, aby szybko i łatwo zobaczyć, jakie style są do niego stosowane.
Oblicz proporcje obrazu
Następnie obliczyć współczynnik kształtu obrazu, dzieląc wysokość obrazu przez szerokość. Na przykład, jeśli wysokość obrazu wynosi 660, a szerokość 1280, współczynnik proporcji wynosi 0,5156.
Skonfiguruj zdarzenie zmiany rozmiaru okna jQuery, aby dostosować wysokość
Na koniec dodaj detektor zdarzeń jQuery do zmiany rozmiaru okna, a następnie oblicz wysokość div twojego bohatera na podstawie współczynnika kształtu i zaktualizuj go. To rozwiązanie zwykle pozostawia dodatkowy piksel na dole ze względu na niedokładne obliczenia przy użyciu współczynnika kształtu, więc dodajemy -1 do uzyskanego rozmiaru.
Upewnij się, że działa przy ładowaniu strony
Powinieneś wykonać powyższe wywołanie zmiany rozmiaru, gdy strona ładuje się, aby na początku obliczać rozmiary obrazu. Jeśli tego nie zrobisz, div div bohatera nie dostosuje się, dopóki nie zmienisz rozmiaru okna. Ustawiam osobną funkcję, aby wykonać zmiany rozmiaru. Oto pełny kod, którego używam.
źródło
Jeśli możesz zrobić obraz w Photoshopie, gdzie główna warstwa ma krycie równe 1 lub mniej więcej i jest w zasadzie przezroczysta, umieść to zdjęcie w div, a następnie utwórz prawdziwy obraz jako tło. NASTĘPNIE ustaw krycie obrazu na 1 i dodaj żądane wymiary rozmiaru.
To zdjęcie jest zrobione w ten sposób i nie można nawet przeciągnąć niewidocznego obrazu ze strony, która jest fajna.
źródło
po prostu dodaj do
div
źródło