Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyśrodkowanie DIVa pod IE
Forum PHP.pl > Forum > Po stronie przeglądarki > CSS
witus
Witajcie,

Od pewnego czasu borykam się z problemem pod IE. Mianowicie - jestem w fazie tworzenia theme pod Wordpressa i mam mały kłopot. Centralna część strony składa się z dwóch bloków - tego, w którym jest główny tekst, wiadomości (div "lewa") oraz drugi, gdzie jest menu itd. (div "prawa"). Całość jest zamknięta w dużego diva (div "pelny"). O ile w Firefoxie wszystko jest na środku (a musi być, bo jest powiązane z headerem i przyszłą stopką), tak w IE wszystko zlewa się na lewą stronę. Na początku był nawet taki kłopot, że w IE jeden div zleciał pod drugiego, ale zrobiłem osobny arkusz CSS i udało się zrobić divy lewy oraz prawy w jednej linii (display: inline).

Tak to wygląda pod IE: http://img21.imageshack.us/img21/5725/44834235.jpg

Styl 3 divów dla IE:

  1. .pelny{
  2. width: 951px;
  3. display: inline;
  4. }
  5.  
  6. .lewa{
  7. float:left;
  8. width: 649px;
  9. background-image: url(img/pasekleft.jpg);
  10. display: inline;
  11. }
  12.  
  13. .prawa{
  14. width: 302px;
  15. background-image: url(img/pasekright.jpg);
  16. float: left;
  17. display: inline;
  18.  
  19. }


Dla diva "pelny" kombinowałem, dawałem mu różne marginy i tym podobne sprawy, ale zachowuje się jakby całkiem je lekceważył. Nie wiem co jest - proszę o szybką pomoc, bo praktycznie tylko ta rzecz blokuje mi kontynuowanie prac (a deadline robi swoje). Nawet w Operze i Chrome wszystko jest OK.
wookieb
Było setki jeżeli nei tysiące razy.
Dla elementu nadrzędnego diva dajesz
Kod
text-align: center;

Tylko musisz pamietac zeby dla tego diva dac spowrotem
Kod
text-align: left;

czy jak tam wolisz. i Wystarczyło uzyc szukajki i nie zmarnowalbys troche minut na napisanie tego tematu.
Poza tym ten inline to raczej mało potrzebny.
witus
Cytat(wookieb @ 16.04.2009, 12:54:34 ) *
Było setki jeżeli nei tysiące razy.
Dla elementu nadrzędnego diva dajesz
Kod
text-align: center;

Tylko musisz pamietac zeby dla tego diva dac spowrotem
Kod
text-align: left;

czy jak tam wolisz. i Wystarczyło uzyc szukajki i nie zmarnowalbys troche minut na napisanie tego tematu.
Poza tym ten inline to raczej mało potrzebny.


Mówiąc element nadrzędny masz na myśli .body? Dałem text-align dla body - nie zadziałało. Dałem dla diva .pelny - także nie działa. Zresztą tą metodę praktykowałem już wcześniej i także nie dawało rezultaty. Co do wyszukiwarki zaś - po wpisaniu DIV i IE otrzymamy komunikat, że za krótkie wyrażenie. Wiem, złośliwy jestem, ale i tak przejrzałem 2 ostatnie strony i nie znalazłem odpowiedzi na nurtujące mnie pytanie. To samo w Google.
wookieb
Pokaż strony. A jeszcze lepszy będzie link.
A wiesz co dla google oznacza DIV IE? Zapomniałeś ładnie sformułować zapytania "centered div in ie" lepiej?

Poza tym masz w dokumencie element z parametrem class="body"?
bo .body != body
MitS
spróbuj do body {margin:0 auto; text-align:center}
oraz wywalic tego inline z .pelny i dac tak:
.pelny{
width: 951px;
margin:0 auto;
}
witus
http://www.fireworks.com.pl/wp/

Link do strony. Na kodowanie nie patrzeć, bo to istna makabra - przy przenoszeniu wszystko się naprawi, sprawdzałem to już.
bliitz
body{ margin: auto; padding: 0; }
#wraper{ width: 780px; margin: auto; padding: auto; }

jeśli wraper to u Ciebie główny kontener, dodatkowo nadaj mu jakąś szerokość
witus
Cytat(bliitz @ 16.04.2009, 13:26:50 ) *
body{ margin: auto; padding: 0; }
#wraper{ width: 780px; margin: auto; padding: auto; }

jeśli wraper to u Ciebie główny kontener, dodatkowo nadaj mu jakąś szerokość


Oho - w końcu postęp! Coś się ruszyło, jest to mniej więcej wyśrodkowane na chwile obecną (zobacz na IE http://www.fireworks.com.pl/wp/) - tylko kilkanaście pixeli w kierunku prawej krawędzi trzeba byłoby to podsunąć i za bardzo nie mam pomysłu jak... doradzisz coś?
erix
IE ma buga podwójnych marginesów. http://kurs.browsehappy.pl - dział bugi IE, znajdziesz.
witus
Cytat(erix @ 16.04.2009, 14:49:43 ) *
IE ma buga podwójnych marginesów. http://kurs.browsehappy.pl - dział bugi IE, znajdziesz.


Oj, chyba w najnowszej wersji IE porada związana z *display:inline* nie działa. Zastosowałem to i niestety nie rozwiązało to mojego problemu. Zerknąłem do Google - dosłownie wszędzie jest mowa o stosowaniu tamtego display:inline, ale jak już wspomniałem - nie daje to rezultatu. Zapewne w starych IE tak, ale w nowym niestety nie - a przecież dostosowuje się pod najnowszą wersję każdego browsera.
erix
Nie mówię tylko o inline. Robisz hacka na stare IE, podajesz nową wartość marginesu.

A w Twoim konkretnym przypadku chodzi o różnice w obliczaniu wymiarów w IE.
witus
Cytat(erix @ 16.04.2009, 15:15:23 ) *
Nie mówię tylko o inline. Robisz hacka na stare IE, podajesz nową wartość marginesu.

A w Twoim konkretnym przypadku chodzi o różnice w obliczaniu wymiarów w IE.



Ja to chyba dzisiaj coś powoli myślę, hehe. Nie jestem za bardzo wstanie tego zrobić, ponieważ w 4 klasach w CSS nie mam użytego margin podanego w pixelach / procentach. Mam ustawione przy jednym, dużym bloku na całość :

  1. .center{
  2. width: 951px;
  3. margin: auto;
  4. padding: auto;}


No więc akurat tutaj to chyba na pół niczego nie podzielę winksmiley.jpg
erix
Poczytaj o bugach box-model w IE. Będziesz musiał zmienić wymiary specjalnie dla IE.

Rusz trochę palce.
bliitz
Cytat(witus @ 16.04.2009, 16:10:19 ) *
Oho - w końcu postęp! Coś się ruszyło, jest to mniej więcej wyśrodkowane na chwile obecną (zobacz na IE http://www.fireworks.com.pl/wp/) - tylko kilkanaście pixeli w kierunku prawej krawędzi trzeba byłoby to podsunąć i za bardzo nie mam pomysłu jak... doradzisz coś?


spróbuj w ten sposób:

Kod
#wraper{ margin-left: 400px !important; margin-left: 100px;  }


koniecznie w takiej kolejności, to sprawi, że pod FF będzie 400px a pod IE 100px
witus
Cytat(bliitz @ 17.04.2009, 08:26:41 ) *
spróbuj w ten sposób:
Kod
#wraper{ margin-left: 400px !important; margin-left: 100px;  }

koniecznie w takiej kolejności, to sprawi, że pod FF będzie 400px a pod IE 100px


Tutaj akurat wydaje mi się, że nie jest to do końca dobre rozwiązanie. Powody są proste - jeden to to, że dla Internet Explorera mam stworzony oddzielny styl, nie ingerujący w Firefoxa i resztę browserów, a dwa - przy ustawieniu takich wartości, na większych rozdzielczościach chyba nie działałoby to w miarę dobrze. Tutaj przecież są podane konkretnie wymiary - i na pewno centralnie elementu na każdej rozdzielczości nie ułożą. Może jestem w błędzie - jeśli tak, to niech ktoś mnie poprawi.
bliitz
nic takiego nie musisz robić, przecież w elemencie .pelny masz określoną na stałe szerokość, a jak rozumiem cala reszta jest wewnątrz tego elementu, więc jeśli dasz margines to będzie on względem tego .pelny i stałe dla każdej rozdzielczości bo zawsze masz szerokość 951px
witus
Cytat(bliitz @ 17.04.2009, 12:41:32 ) *
nic takiego nie musisz robić, przecież w elemencie .pelny masz określoną na stałe szerokość, a jak rozumiem cala reszta jest wewnątrz tego elementu, więc jeśli dasz margines to będzie on względem tego .pelny i stałe dla każdej rozdzielczości bo zawsze masz szerokość 951px


Przez czas wczorajszej dyskusji było trochę zmian w kodzie i nie wygląda to do końca tak, jak początkowo opisywałem.

Na chwilę obecną kod dla Internet Explorer prezentuje się tak:

  1. .pelny{
  2. display:inline;
  3. }
  4.  
  5. .lewa{
  6. float:left;
  7. width: 649px;
  8. background-image: url(img/pasekleft.jpg);
  9. display: inline;
  10.  
  11. }
  12.  
  13. .prawa{
  14. width: 302px;
  15. background-image: url(img/pasekright.jpg);
  16. float: left;
  17. display: inline;
  18.  
  19. }
  20.  
  21.  
  22. .center{
  23. width: 951px; margin: auto; padding: auto;}


Zaś dla Firefoxa:
  1. .prawa{
  2. width: 302px;
  3. background-image: url(img/pasekright.jpg);
  4. float: left;
  5. overflow: inherit;
  6. }
  7.  
  8.  
  9. .lewa{
  10. width: 649px;
  11. background-image: url(img/pasekleft.jpg);
  12. vertical-align:top;
  13. float: left;
  14. overflow: inherit;
  15.  
  16. }
  17.  
  18. .pelny{
  19. width: 951px;
  20. margin: 0 auto;
  21. vertical-align:top;
  22. top: 0px;
  23. display: block;
  24.  
  25. overflow: inherit;
  26.  
  27.  
  28. }


Dla IE został stworzony div *center*, który obejmuje całą stronę. W przypadku Firefoxa trzy divy są wyłącznie dla treści, a element *center* jest po prostu ignorowany, bo nie ma go w podstawowym CSS.
Tak wygląda to pod IE: http://img21.imageshack.us/img21/2189/podie.jpg - jak widać, jest przesunięte o około 10 px.
bliitz
to daj dla .lewa dla stylów IE margin-left: 10px;
witus
Cytat(bliitz @ 17.04.2009, 13:02:51 ) *
to daj dla .lewa dla stylów IE margin-left: 10px;


Dla lewego dodałem (konkretnie - 24px jak się okazało), ale musiałem jeszcze dodać tą wartość dla szerokości całej kolumny.

Dzięki wielkie wszystkim za pomoc, szczególnie dla Ciebie, Bliitz snitch.gif Problem rozwiązany, mogę brać się do reszty prac.

Niestety, pojawił się kolejny problem - tak więc nie będę tworzył kolejnego tematu, bo również tyczy się on DIVów.

Mianowicie - nie mogę sobie poradzić z tym, aby prawa część strony, czyli menu (div "prawa") automatycznie dostosowywał swoją długość do diva obok (div "lewa"). Próbowałem z height: auto, ale to w divach nie funkcjonuje, a różne overflow'y też niestety nie pomogły. Ludzie radzą, aby zastosować min-height, no ale tutaj nie mam jak - przecież to ma funkcjonować jako blog i nie będę miał wpływu na długość elementu z treścią.

Sami zobaczcie jak to wygląda: <a href="http://www.fireworks.com.pl/wp/" target="_blank">http://www.fireworks.com.pl/wp/</a>

Ma ktoś pomysł na to, co z tym zrobić?
pawkow
Przecież to nie tabelki ...

Najprościej będzie opakować całość w DIVa i nadać mu background taki jak background prawej kolumny winksmiley.jpg i to najczęściej spotykane rozwiązanie, są też ujemne marginy i paddingi, masa kombinowania, ogólnie technik wiele, polecam z tłem winksmiley.jpg

http://www.positioniseverything.net/articl...out/equalheight
http://www.ejeliot.com/blog/61

Poczytaj winksmiley.jpg
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.