Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Menu pionowe a w nim nagłówki pozornie wyśrodkowane.
Asmox
post
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Witam,
na wstępie od razu tłumaczę o co mi chodzi, gdyż temat zapewne jest nie do końca jasny. Myślę, że najlepiej wszystko wyjaśni załączony obrazek:
http://imageshack.us/photo/my-images/17/rpanel.png/ (Edytor nie chciał mi wstawić png)
Jak widzicie, chciałem zrobić efekt tekstu, który wyjeżdża z prawej strony i ustawia się tak, aby być wyśrodkowanym względem całego boxa.
Budowa nagłówków:
  1. <div id=\"rpanel\">
  2. <div class=\"header\"><span>Menu</span></div>
  3. <div class=\"header\"><span>Tagi</span></div>
  4. <div class=\"header\"><span>Szukaj</span></div>
  5. <div class=\"header\"><span>Szukaj</span></div>
  6. </div>

Każdy nagłówek znajduje się w <span>, a ten w <div>. Dzięki temu pierwszemu mogę ustalić faktyczną szerokość tekstu, a drugi pozwala na zrobienie fajnej ramki. Aby wszystko działało jak należy, napisałem funkcję javascript, która uruchamia się od razu po wczytaniu strony:
Kod
function go() {
    var divHeaders = document.getElementsByClassName(\'header\');
    for (i=0; i<divHeaders.length; i++) {
        if (i==3) continue; // To jest dla porównania z pozostałymi elementami, aby zobaczyć, czy faktycznie tekst jest na środku.
        thisHeader = divHeaders[i];
        thisHeader.style.marginLeft = (200-(100+0.5*(thisHeader.firstChild.offsetWidth))+4-3)+\"px\"; // Te obliczenia wyjaśniam poniżej
        thisHeader.style.textAlign = \"left\"; // Ustawienie elementu do lewej, gdyż po powyższej linijce div się skróci.
    }
}
window.onload = go;

A teraz o co chodzi z obliczeniami:
  • Cały panel (div#rpanel) ma szerokość 200, więc 100 to połowa jego szerokości
  • thisHeader.firstChild.offsetWidth odnosi się do szerokości samego tekstu
  • 4 tu chodziło mi o padding-left
  • no i 3 na końcu to przesunięcie w lewo, odejmuję je od nowego marginesu

No i niestety są rozbieżności, może niezbyt duże, ale jednak są i nie mogę się doszukać błędu, który gdzieś przeoczyłem. Czy mógłbym prosić o pomoc?

Ten post edytował Asmox 16.08.2011, 15:21:16


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


nieźle przekombinowałeś tongue.gif

  1. .header-left {
  2. width: 50%;
  3. float:left;
  4. }
  5. .header {
  6. width:50%;
  7. float:left;
  8. text-align: left; // tak na wszelki wypadek ;)
  9. }
  10. .clear {
  11. clear:both;
  12. }
  13. <div id=\"rpanel\">
  14. <div class="header-left"></div><div class=\"header\"><span>Menu</span></div>
  15. <div class="clear"></div>//w razie gdyby divi chciały do siebie przylgnąć ;)
  16. <div class="header-left"></div><div class=\"header\"><span>Menu</span></div>
  17. <div class="clear"></div>
  18. <div class="header-left"></div><div class=\"header\"><span>Menu</span></div>
  19. <div class="clear"></div>
  20. <div class="header-left"></div><div class=\"header\"><span>Menu</span></div>
  21. <div class="clear"></div>
  22. </div>
Go to the top of the page
+Quote Post
Asmox
post
Post #3





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

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


Niestety, nie bardzo rozumiem Twoje rozwiązanie... W dodatku nie działa u mnie biggrin.gif
Chciałem, aby tekst był wyśrodkowany względem całego menu, a dookoła niego była ramka łącząca tekst z prawym brzegiem. Stosując Twoje rozwiązanie wyszło mi tak, jakbym nic nowego nie robił. Wszystko jest ściągnięte do lewej i nic z tego nie wyszło :/ Mógłbyś mi wytłumaczyć, co zamierzyłeś?


--------------------
Go to the top of the page
+Quote Post

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 Aktualny czas: 19.08.2025 - 21:37