Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS][HTML] Stałe tło
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

wydaje się, że prosta sprawa ale utknąłem w jednym miejscu kodu i jakoś nie mogę tego przeskoczyć... Mam prostą stronkę, powiedzmy coś takiego:

  1. <div id="page">
  2. <div class="top"></div>
  3. <div class="middle"></div>
  4. <div class="footer"></div>
  5. </div>
  6. </body>


I mam w szablonie graficznym w tło dodać takie dosyć duże zdjęcie, stałe wobec div-a "page". A więc prosta sprawa:

  1. body{
  2. margin : 0;
  3. padding : 0;
  4. background : url('images/layout.jpg') top center no-repeat fixed;}


Otrzymujemy efekt taki, że jeżeli jest więcej treści w div-ie "page" to jest on przewijalny w dół, ale tło jest statyczne, tzn tyle ile zmieściło się zdjęcia od góry ekranu.

Problem w tym, że zdjęcie w tle ma jakiś przekaz ale nie mieści się na ekranie w całości. Tyle ile od góry mamy miejsca tyle go widać... Chciałbym uzyskac efekt taki, że tło jest stałe tak jak teraz ale jeśli uzytkownik przewija stronę w dół, to w momencie gdy zaczyna dochodzi do stopki tło także zaczyna się przesuwać w górę... Widzę to oczami wyobraźni ale jakoś nie mogę tego zakodować... A może to jest niemożliwe technicznie...? Nie wiem czy dobrze to opisałem więc jak coś jest niejasne to proszę pytać. Jeśli macie jakieś pomysły to proszę o podpowiedź.

PS. Celem testów można podłożyć pod plik tła w powyższym kodzie jakiekolwiek zdjęcie z aparatu o wysokości np. 1500px, a do znacznika "middle" dopisać jakąś wysokość typu 3000px, etc.
fate
Jeżeli Cię zrozumiałem to mam trywialne rozwiazanie myślę. Musisz dać minimalną wysokość diva taka jak wysokosc obrazka tła wtedy wyświetli Ci całe tło no izostawić tą pozycję fixed jak treść będzie większa będzie się przewijało jak chciałeś. Nie wszystkie przeglądarki obsługują min-height więc tło może być w divie kontenerze obejmujacym a tresc w umieszczonym w nim koljnym divie.
Spróbuj jak o to biega sekret.gif
Sephirus
Nie wiem czy o to chodziło ale...

Pisane na szybko w czystym JS - musisz zmienić/dopasować pod siebie

http://jsfiddle.net/s8cN9/1/
lukash82
Witam,

@Sephirus prawie idealnie zobrazowałeś to co sobie wyobrażałem... Spróbuje obydwu rozwiązań.

Witam ponownie,

1 rozwiązanie niestety nie działa. Drugie działa tak jak to miało być w zamyśle, ale tylko dla div-a przez co tworzy się dodatkowy suwak przy większej ilości treści. Próbowałem to przełożyć na wyższy poziom do <body> ale coś niebardzo to działa..., albo sam coś pochrzaniłem...

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="pl">
  3. function scrollTheFreakingBackground() {
  4. var body = document.getElementById('body');
  5. var scrollPosition = parseInt(body.scrollTop);
  6. var scrollHeight = parseInt(body.scrollHeight);
  7. var offsetHeight = parseInt(body.offsetHeight);
  8. var pictureHeight = 1200;
  9. var scrollPercent = scrollPosition / (scrollHeight - offsetHeight);
  10. var newPositionOfBackground = -1 * (pictureHeight - offsetHeight) * scrollPercent;
  11. body.style.backgroundPosition = 'center ' + newPositionOfBackground + 'px';
  12. }
  13. document.getElementById('body').addEventListener('scroll',scrollTheFreakingBackground,false);
  14. body{
  15. margin : 0;
  16. padding : 0;
  17. overflow : auto;
  18. background : green url('http://www.mega-tapety.info/wallpapers/krajobrazy/morzairzeki/tapety_na_pulpit_mega-tapety.info%20(177).jpg') top center no-repeat;}
  19. .txt{
  20. height : 2000px;
  21. width : 500px;
  22. background : red;
  23. margin : 0 auto;}
  24. </head>
  25. <body id="body">
  26. <div class="txt"></div>
  27. </body>
  28. </html>
Sephirus
Namotałeś nieco - z tego względu, że tło musi być tego samego elementu co przewijanie - zaraz poprawię i wrzuce wink.gif

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="pl">
  3. <meta charset="utf-8"/>
  4. <style type="text/css">
  5. body {
  6. margin : 0;
  7. padding : 0;
  8. overflow : auto;
  9. height:200px;
  10. background : green url('http://www.mega-tapety.info/wallpapers/krajobrazy/morzairzeki/tapety_na_pulpit_mega-tapety.info%20(177).jpg') center 0 no-repeat;
  11. }
  12. .txt{
  13. height : 2000px;
  14. width : 500px;
  15. background : rgba(255,0,0,0.5);
  16. margin : 0 auto;}
  17. <script type="text/javascript">
  18. function scrollTheFreakingBackground() {
  19. var body = document.getElementById('body');
  20. var scrollPosition = parseInt(body.scrollTop);
  21. var scrollHeight = parseInt(body.scrollHeight);
  22. var offsetHeight = parseInt(window.innerHeight);
  23. var pictureHeight = 1200;
  24. var scrollPercent = scrollPosition / (scrollHeight - offsetHeight);
  25. if(pictureHeight > scrollHeight) {
  26. var newPositionOfBackground = -1 * (pictureHeight - scrollHeight) * scrollPercent;
  27. } else {
  28. var newPositionOfBackground = (scrollHeight - pictureHeight) * scrollPercent;
  29. }
  30. body.style.backgroundPosition = 'center ' + Math.round(newPositionOfBackground) + 'px';
  31. }
  32.  
  33. window.addEventListener('load',function () {
  34. window.addEventListener('scroll',scrollTheFreakingBackground,true);
  35. },false);
  36. </head>
  37. <body id="body">
  38. <div class="txt">
  39. </div>
  40. </body>
  41. </html>


Powinno śmigać na stronach mniejszych niż obrazek i większych niż obrazek - musisz jedynie dopracować kompatybilność z przeglądarkami (konkretnie z IE) smile.gif

EDIT: Ten kod przedstawia tylko idee - musisz go nieco zoptymalizować by zwiększyć wydajność (nie przy każdym wywołaniu ta funkcja musi pobierać wszystkie te parametry wink.gif)
lukash82
Super, o to chodziło. Choć teraz zastanawiam się nad ostatecznym efektem jaki został uzyskany. Tło strasznie przeskakuje przy przewijaniu i na dłuższą metę może to się okazać średnio efektowne... Ale wielkie dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.