rozjechanie divów w Operze

HTML to podstawy w dziedzinie tworzenia stron WWW, Style CSS warto opanować, bowiem za ich pomocą można dostosować odpowiednio wygląd swojej witryny WWW. Zagłębiamy się dalej i udostępniamy w tym forum możliwość zadawania pytań o JavaScript.
ODPOWIEDZ
kajak
Posty: 4
Rejestracja: ndz mar 30, 2008 5:25 pm

rozjechanie divów w Operze

Post autor: kajak »

Nie wiem dlaczego rozjezdza mi się jeden div w Operze, a w IE nie gdy rozróżniam w stylach Opere i IE.
Mam diva, w którym mam tekst (div ten jest na floacie bo jest obok drugiego..) no i po dodaniu paddingów oczywiście dla Opery i IE, mi się on rozjeżdza. Chciałem zmienic marginesy tekstu góra, dól, lewa i prawa....i ogólnie dokonać zmian co do tekstu w tym bloku, lecz margin-left to sie nie da, tylko padding, bo to blok i chyba dlatego...?
Tutaj daje kod do tego bloku:

Kod: Zaznacz cały

#tresc {
float:left;
width:604px;
height:auto;
padding-bottom:5000px;
margin-bottom:-5000px;
background-image: url(images/tresc.jpg);          
/*background-attachment: fixed;*/
overflow: hidden;
background-repeat: repeat-y;
/*background:green;                                  */
text-align: justify;
text-decoration: none;
line-height: 0.6cm;             /*interlinia*/
padding-right: 0.1cm !important;             /*dopełnienie prawe*/
padding-left: 0.1cm !important;              /*dopełnienie lewe*/
padding-right: 1cm; /* IE */             /*dopełnienie prawe*/    
padding-left: 1cm; /* IE */              /*dopełnienie lewe*/
padding-top: 0.3cm;             /*dopełnienie górne*/
padding-bottom: auto;           /*dopełnienie dolne*/
font-size: small;               /*wielkość czcionki*/
font-family:  Veranda;
font-weight: 500;
}
Ogólnie chodzi mi o ty by ładnie sformatować tekst...

tutaj podaje link do tej rozjechanej strony:
http://zcukrzycanaty.ovh.org/historia_cukrzycy.html
ooo_michal
Przelotem
Przelotem
Posty: 245
Rejestracja: śr kwie 18, 2007 9:06 am

Re: rozjechanie divów w Operze

Post autor: ooo_michal »

Jest to normalne zachowanie box-modelu wg. specyfikacji CSS - po zmianie wartości padding, margin czy border zmienia się rozmiar całego bloku. A że IE interpretuje box-model na własny sposób to w IE strona Ci się nie rozjeżdża. Poza tym stosujesz różne jednostki co utrudnia pisanie poprawnego kodu. Zdecyduj się albo na px albo na cm w obrębie całej strony.
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: rozjechanie divów w Operze

Post autor: gorylek »

Kajak, zasada jest taka:

1. Opera, FireFox, Safari dla obiektu który ma 100px szerokości (width), 25px obramowania (border) i 20px marginesu wewnętrznego (padding):

100+2*25+2*20=100+50+40=190px;

2. Dla Internet Explorer 5,5 oraz 6 (nie pamiętam ale chyba 7,8 już nie robiły problemu):

100+2*25+2*20=100+50+40=100px; (Ot Microsoft szuka zdolnych informatyków ale chyba nie wymaga podstaw matematyki od nich)

Co oznacza że IE niestety wlicza padding oraz border do szerokości. Rozwiązanie polega na tym że o ile na IE 5,5 nie ma innego ratunku jak osobny kod CSS lub warunki o tyle z IE 6 jest ratunek. Wystarczy umieścić odpowiedni DOCTYPE i NIC PRZED NIM. Wtedy IE będzie pracować wg standardów (przynajmniej w większości) i wszystko będzie ok. Brak DOCTYPE sprawia że IE przestawia się na tryb wstecznej zgodności (ot litość dla starych stron WWW pisanych pod zabugowany IE) co sprawia że box model bug i kilka innych ląduje na Twojej głowie.

Także rozwiązanie polega na tym by umieścić odpowiedni DOCTYPE i ustawić padding i border tak jak Ci pasuje i odpowiednio przy tym zmniejszyć szerokość elementów. Co do IE 5,5 to szkoda zabawy, nie wiem nawet czy ktoś to jeszcze ma. Osobiście uważam że za wspieranie tego starocia powinno brać się dodatkową opłate.

Ogólnie jeżeli piszesz ze standardem Strict, doctype jak i znacznik początkowy <html> powinny wyglądać tak:

Kod: Zaznacz cały

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
Jednak wymogi są wymogami i na początku trzeba jeszcze umieścić ten oto kod:

Kod: Zaznacz cały

<?xml version="1.0" encoding="iso-8859-2"?>
Czyli całość będzie się prezentować w ten sposób:

Kod: Zaznacz cały

<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
Teraz niespodzianka, mając tą linijke przed DOCTYPE, IE 6 dalej wróci do trybu wstecznej zgodności i dalej masz problem. Rozwiązania są dwa. Pierwsze to takie żeby przed DOCTYPE nie wstawiać tej linijki. Validator się nie pluje a szczerze powiedziawszy, nic Ci to nie zmieni.
Drugi sposób dla tych którzy uważają że wszelkie odstępstwa od regulaminu są karygodne, mam inne rozwiązanie. Wsadzić po prostu pierwszą linijke w warunek przez co całość będzie wyglądać tak:

Kod: Zaznacz cały

<!--[if !IE 6]><?xml version="1.0" encoding="iso-8859-2"?><![endif]-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
Szczerze, nie testowałem, ot pomysł który mi teraz do głowy przyszedł ale powinno w teorii zadziałac, może ktoś sprawdzi :] W każdym razie krzywda się nie stanie jak pominiecie tą linijke przed DOCTYPE.
ooo_michal
Przelotem
Przelotem
Posty: 245
Rejestracja: śr kwie 18, 2007 9:06 am

Re: rozjechanie divów w Operze

Post autor: ooo_michal »

A ja uważam, że najlepiej w komentarzu wstawić dodatkowy arkusz dla IE. Ze standardami zgodne a kod CSS jest czytelny.
kajak
Posty: 4
Rejestracja: ndz mar 30, 2008 5:25 pm

Re: rozjechanie divów w Operze

Post autor: kajak »

ooo_michal dawałem w stylu oddzielne parametry dla IE i też nie działało poprawnie.
Ale znalazłem na to inny sposób...
Plik ze stylem do bloku z tręścią mam jako zewnętrzny plik css, i tutaj robiąc marginesy do tekstu rozjeżdżało mi się.
Więc marginesy do tekstu dałem bezpośrednio w znaczniku <p> w którym wstawiałem tekst

ale mam jeszcze jedno pytanko czy moge nie dawać tego <!DOCTYPE html ...
tylko po prosty zaznaczyc w mecie kodowanie i język?
Bo jak to dodaj to znowu mi się rozjeżdza #menu i #tresc
Ostatnio zmieniony pn maja 05, 2008 4:05 pm przez kajak, łącznie zmieniany 1 raz.
ooo_michal
Przelotem
Przelotem
Posty: 245
Rejestracja: śr kwie 18, 2007 9:06 am

Re: rozjechanie divów w Operze

Post autor: ooo_michal »

Nie chodziło o to abyś zmieniał kod dla IE bo przecież w IE działa dobrze. Dajmy na to masz np. width: 600px i padding 50px. Dla IE starszych niż 7 wszystko będzie dobrze. W kodzie dla innych przeglądarek (Opera, Firefox, IE 7) musiałbyś wpisać width:500px żeby było dobrze wyświetlane. Ale rozwiązanie, którego użyłeś jest taks samo dobre. I nie musisz stulu dodawac bezpośrednio do daneo znacznika. Możesz w pliku css wpisać:

Kod: Zaznacz cały

#tresc p {
    margin: XXpx;
}
Ustawi to margines dla wszystkich akapitów wewnątrz kontenera o id="tresc".
kajak
Posty: 4
Rejestracja: ndz mar 30, 2008 5:25 pm

Re: rozjechanie divów w Operze

Post autor: kajak »

udało mi się praktycznie wszystko zmienić po dodaniu tego <!DOCTYPE html PUBLIC "-//....
Wszystko byłoby ok gdyby nie to że strona teraz kończy się na tym poziomie co kończy się menu...
Więc chyba nie będę tego dodawał, czy to jakiś wielki błąd?
W końcu mam w znaczniku meta zawarte kodowanie, język itd..
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: rozjechanie divów w Operze

Post autor: gorylek »

Proste, dla przeglądarek Opera, FF itp DOCTYPE praktycznie nic nie zmieni ale IE to co innego. Chodzi mi o wersje 6 która jest jeszcze bardzo popularna (użytkownicy XP i 98, nie każdy się przesiada na 7 bo fakt faktem skoro nie mają tyle pojęcia żeby korzystać z lepszych alternatyw to kto się spodziewa że skorzystają z nowszej wersji).
Bez DOCTYPE będziesz miał na głowie problemy z box model, margin: 0 auto i wieloma innymi powszechnie stosowanymi rzeczami. Doctype naprawi Ci ten problem wymuszając prace w trybie ze standardami.

Z tego co wywnioskowałem, napisałeś strone stricte pod IE co nie jest najlepszym pomysłem skoro przeglądarka ta ma zaledwie połowe rynku. Lepiej zrobić wszystko jak należy i poprawiać drobne bugi na IE jak pisać pod IE a potem męczyć się żeby to samo było wyświetlane poprawnie gdzie indziej.

Poza tym jeżeli nie zrobiłeś jakiegoś karygodnego byka to doctype nie powinien powodować żadnych błędów z wyświetlaniem witryny.
ODPOWIEDZ