Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Menu pionowe a w nim nagłówki pozornie wyśrodkowane.
Forum PHP.pl > Forum > Po stronie przeglądarki
Asmox
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?
CuteOne
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>
Asmox
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ś?
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.