Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CSS][HTML] Stałe tło, ale nie do końca...
lukash82
post 4.12.2012, 11:37:35
Post #1





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post 4.12.2012, 16:42:21
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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)

Ten post edytował Sephirus 4.12.2012, 16:50:54


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 23:22