2010-01-25 22 views
5

Zauważyłem, że niektóre przeglądarki mają problemy z marginesami, szczególnie gdy element jest pływający. Na przykład ta strona, którą robię, wygląda dobrze w Firefoksie, ale IE7 kompletnie wkręca marginesy. Testuję go także w kilku przeglądarkach Linuxowych i niektóre z nich popełniają podobne błędy.CSS - Margines coś złego?

Strona jest http://w3box.com/mat

To wygląda dobrze w FF3.0 ile mogę powiedzieć. Nie widziałem go jeszcze w FF2 lub IE6. Dlaczego tak się dzieje? Czy to dlatego, że moje DIV-y zostały rozwinięte z określonymi marginesami?

Czy jest coś, czego powinienem unikać lub powinienem zrobić inaczej?

Edycja: Wygląda na to, że moje tagi były źródłem obłędu. Umieściłem obrazy w tym, co nie zostało zdefiniowane w CSS, i które zawierało je w połączeniu z marginesami. Wszystko to spieprzyło i muszę je powtórzyć.

Co więcej, wydarzyło się, gdy użyłem XHTML Strict zamiast :) Niż wszyscy! Spróbuję to naprawić na własną rękę :)

+0

Wygląda dobrze w IE8, jeśli jesteś zainteresowany. – Sapph

+1

Spróbuj przyzwyczaić się do rozwijania witryn w "XHTML 1.0 strict" lub "HTML 4.01 strict". Rozwiązuje to wiele problemów z boxmodel, –

+0

Dziękujemy! Teraz strona wygląda tak źle w FF, jak i IE :) Oznacza to, że muszę zmienić położenie wszystkiego, ale to dobrze! Tak długo, jak jest tak samo w obu. :) Thanx za cynk :) –

Odpowiedz

3

Marging nie jest zły, ale IE has some troubles z marginesami elementów pływających. Chociaż istnieje wiele przepisów na poprawianie, uważam, że w twoim przypadku możesz użyć pozycjonowania bezwzględnego zamiast wartości zmiennoprzecinkowej i marginesów (nie musisz tak naprawdę zachowywać się "float", gdy obraz jest zawijany tekstem)

+0

To jest IE7 i błąd nie występuje w IE8. Właśnie to przetestowałem. Nie testowałem tego jeszcze w IE6, ponieważ nie mogę znaleźć pojedynczego serwera terminali, w którym jest on jeszcze zainstalowany. Spróbuję jednak pozycjonowania absolutnego. Nie musisz zaśmiecać kodu bardziej, niż to konieczne! :) –

+0

Widzisz, chodzi o to. Naprawdę nie rozumiem, dlaczego tak się dzieje. Mam na myśli, że DIV #contentInner nie ma nawet float. A to marginesy są jak podwojone lub coś takiego. Czy to mogą być obrazy, które tam umieściłem? Nie mają własnych klas, ale określiłem kod CSS w tagu . To może być wyjaśnienie? Ponieważ widzę błąd w menu nagłówka i #contentInner DIV. Obie mają znaczniki przed nimi. –

+0

To jest problem z tagami . IE wydaje się dodawać trochę miejsca po obrazach. Podobnie jak przerwa na linii czy coś takiego. Problem został rozwiązany po usunięciu tagów . Więc prawdopodobnie będę musiał popracować nad ich pozycjonowaniem. –

2

Proponuję użyć jakiejś formy CSS Framework (Blueprint CSS, 960 Grid, itp.), Ponieważ mają one wiele marginesów, padding i innych typowych resetów elementów HTML . Powinieneś odkryć, że tworzenie wielu przeglądarek jest łatwiejsze przy użyciu frameworka.

2

Różne przeglądarki mają różne sposoby obsługi modelu skrzynki. W większości przypadków witryny dobrze wyświetlane w FF, Chrome lub IE8 mogą mieć problemy w IE6 i 7. Aby obejść ten problem, możesz spróbować ustawić domyślny margines i dopełnienie na 0 (i dostosować je w razie potrzeby elementy):

* {marża: 0 pikseli; wypełnienie: 0px; } // Najprostszy przepis ...

Aby dowiedzieć się więcej na temat CSS zresetować można spojrzeć na: http://meyerweb.com/eric/tools/css/reset/

a następnie zastosować różne style dla IE7 i 6 z komentarzy warunkowych.

+0

Właśnie wypróbowałem to i to naprawdę nie zrobiło niczego. W każdym razie ustawiłbym to w html i body w CSS. Wpisałem kod resetujący CSS :) –

4

Nie zgadzam się z korzystanie z biblioteki, jeśli chcesz poznać część CSS krzywej, niestety uczy się o tym, jak różne przeglądarki reagują na CSS. Nie sugerowałbym nawet używania resetowania arkusza stylów. Jeśli masz zamiar robić to dużo, naucz się, jak działa CSS. Jeśli używasz biblioteki lub zestawu arkuszy stylów, których nie rozumiesz, jak to naprawisz, gdy się zepsuje.

1

Jak wspomniano w innych odpowiedziach, ma to związek z interpretacją IE w polu model.

Ilekroć coś jest pływające, IE dąży do podwojenia podanych marginesów. Można to naprawić za pomocą dodatkowego arkusza stylów dla IE przy użyciu conditional comments.

Zobacz także: http://www.positioniseverything.net/explorer/doubled-margin.html

+0

Ale czy nie zostało to naprawione za pomocą IE7? Tak myślałem. Ale i tak tak się nie wydaje. –

+0

IE7 nadal jest nieco dziwaczny w modelu pudełkowym - naprawili większość błędów, ale niektóre nadal istnieją –

3

Nie ma nic złego w używaniu marże.

Stare wersje IE mają jeden błąd i tylko to nie jest wystarczającym powodem, aby nie używać jednej z głównych funkcji CSS. W szczególności, ten błąd występuje w IE, gdy unoszą się obiekt i nadać mu pewien margines w tym samym kierunku, np .:

.whatever { 
    float: right; 
    margin-right: 5px; 
} 

Można sobie z tym szereg sposobów, w zależności od układu. Jednym ze sposobów jest dodanie kolejnego div dookoła twojego pudełka i użycie wypełnienia, aby powielić to samo miejsce, na którym znajdowałby się margines.

+0

Marginesy i paddings nie dają tego samego efektu. To jest cały punkt modelu pudełkowego. Efekt byłby taki sam, bez tła i bez obramowania. –

+0

Tak, masz rację, że nie dają tego samego efektu, ale jeśli naprawiasz błąd, możesz go przełączać, aby zapewnić taką samą przestrzeń między obiektami. To zdecydowanie zależy od sytuacji, ale może być jedną z opcji. –

+0

Uzgodnione +1 przywrócono - jeśli edytujesz odpowiedź, mogę je usunąć. :-) –

Powiązane problemy