Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [css][xhtml] Loader
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
Fluke
Witam.

Mam problem mały z "Loader'em". Wiem jak zrobić loader na całą stronę ale nie wiem jak w konkretnym div.

Przyklad:

CSS:
  1. body {
  2. width: 60%;
  3. margin: 0 auto;
  4. padding-top: 20px;
  5. }
  6. #main {
  7.  
  8. border: 1px solid #cecece;
  9. }
  10.  
  11. #content {
  12. padding: 20px;
  13. }
  14. #loader {
  15. position: absolute;
  16. background-color: #000000;
  17. opacity: 0.5;
  18. }



Oraz xhtml:
  1. <div id="main">
  2. <div id="content">
  3. <div id="loader"></div>
  4. <p>Jakiś tekst</p>
  5. <p>Jakiś tekst</p>
  6. <p>Jakiś tekst</p>
  7. <p>Jakiś tekst</p>
  8. <p>Jakiś tekst</p>
  9. </div>
  10. </div>


Wiem, że jeśli bym chciał loader na całą stronę to musiał bym w CSS loader'owi przypisać:
  1. #loader {
  2. position: fixed;
  3. width: 100%;
  4. height: 100%;
  5. top: 0px;
  6. left: 0px;
  7. background-color: #000000;
  8. opacity: 0.5;
  9. }


Ale ja chcę uzyskać ten efekt w konkretnym div i żeby się zmieniał płynnie. Nie mam pojęcia jak to zrobić. Jedynym chyba rozwiązaniem na jakie wpadłem to tylko ustawić div na stałą wysokość i szerokość i tak samo zrobić z loader'em. Ale muszę niestety mieć płynnego div'a.

Z góry dziękuję
Pozdrawiam.
Sephirus
Jeżeli dobrze Cię rozumiem to chcesz mieć po prostu w divie loader na jego całą szerokość?

Zasada/idea jest prosta - DIV nie musi mieć position:absolute - wystarczy position:relative.

Aby loaderek umieszczony w divie przyjmował wysokość i szerokość divka to najproście użyć JS - zasada jest prosta - w momencie gdy chcesz pokazać loaderek robisz tak:

[JAVASCRIPT] pobierz, plaintext
  1.  
  2. function pokaz_loader(id)
  3. {
  4. var loader = document.getElementById(id);
  5.  
  6. loader.style.height = loader.parentNode.offsetHeight + 'px';
  7. loader.style.width= loader.parentNode.offsetWidth + 'px';
  8. loader.style.display = 'block'; // tu możesz zmienić jego klasę cokolwiek by go pokazać
  9. }
  10.  
[JAVASCRIPT] pobierz, plaintext


O to chodziło?

Bo jeżeli chcesz otrzymać to poprzez CSS to użyj width/height:inherit - tylko pamiętaj - inherit nie działa na starszych przeglądarkach (patrz badzIEwie)

  1. .loader {position:absolute; width:inherit; height:inherit; background-color:rgba(0,0,0,0.5); top:0; left:0;}
  2. .contener {position:relative; width:500px; height:300px; background-color:red;}


  1. <div class="contener">
  2. <div class="loader"></div>
  3. </div>


HTH wink.gif Pomogłem? ;P
Fluke
Jeśli chodzi o JS to raczej odpada. Próbowałem tą metodą tylko jest jedna sprawa: gdy mamy przeglądarkę otwartą na całą szerokość i uruchomimy loader, a następnie zmniejszymy wielkość przeglądarki to wielkość div`a się nie zmienia i wychodzi po za kontener.

Ale udało się za pomocą CSS, tylko:

  1. #content {
  2. padding: 20px;
  3. position: relative;
  4. }
  5. #loader {
  6. position: absolute;
  7. width: 100%;;
  8. height: 100%;
  9. top: 0px;
  10. left: 0px;
  11. background-color: red;
  12. opacity: 0.5;
  13. }



  1. <div id="main">
  2. <div id="content">
  3. <div id="loader"></div>
  4. Jakiś tekst
  5. </div>
  6. </div>


I w width oraz height trzeba umieścić 100% a nie inherit bo nie działa.
Z góry dziękuje:)
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.