2009-08-21 12 views
23

Proszę, pomóżcie mi w tym. Potrzebuję utworzyć układ przy użyciu szerokości procentowych. Mam opakowanie o szerokości 100%.Jak naprawić błąd przeglądarki Internet Explorer 7 podczas korzystania z szerokości w układzie?

Teraz mam DIV (główne otoki .. Chcę, aby utrzymać go w 94% procentach szerokości .. 94% 100% ciała) .. w porządku w porządku

Więc aby to proste.

-> korpus 100% szerokości ustawione

-> Pojemnik 94% szerokości

---> pierwszego dziecka dział 70% płukanki po lewej stronie (70% pojemnika)

- -> Drugie dziecko dział 30% prawy element pływający (30% pojemnika)

Ale mają 2 równe kolumny poniżej pierwszego dziecka DIV

-----> 50% i 50% szerokości procentowego

Błąd: W ie7 .. ostatnia kolumna jest wyświetlana na dole .. jej niewłaściwie pływa .. Jeśli zmniejszę szerokość do 29,9% !!! to działa .. myślę, że ie7 ma błąd w traktowaniu szerokości procentowych lub coś .. Proszę wyjaśnij to. Mam nadzieję, że pojawi się problem, ponieważ css/html jest po prostu zbyt długo .. Mam tylko nadzieję, że jego wspólny problem .. :(

Oto CSS na DIV .. nadzieję, że pomoże :)

body { 
width: 100%; 
background: #fff; 
text-align: center; 
font-size: 12px; 
} 

#wide-primary { 
background: #fff url(img/shadow1.png) repeat-x top; 
position: relative; 
top: -1px; 
} 

#primary { 
width: 94%; 
margin: 0 auto 0 auto; 
text-align: left; 
} 

#features { 
float: left; 
width: 70%; 
padding: 2% 0 0 0; 
} 

.featurebox { 
float: left; 
width: 48%; 
padding: 0 2% 3% 0; 
} 

#lastnews { 
float: right; 
width: 30%; 
padding: 2% 0 2% 0; 
} 
+0

Może to pomóc, jeśli możesz opublikować swój CSS. – JasCav

+0

Ok dodał to na twoje życzenie –

Odpowiedz

46

Problem polega na zaokrąglaniu subpikseli. Kiedy projektujesz z procentami, pojawią się sytuacje, w których matematyka nie daje pełnych pikseli (70% z 721 pikseli to 504.7 piksele). 721 jest arbitralny, ale używając procentów wybierzesz dowolne liczby. Nie da się tego uniknąć. Większość przeglądarek wymyśla rozwiązanie do zaokrąglania, które nie narusza układu. IE7 (i starsze) po prostu zaokrąglić w górę. Zaokrąglanie do szerokości kontenera o wartości 721px będzie obejmować jedno pudełko o rozmiarze 505 pikseli i drugie o rozmiarze 217 pikseli o łącznej wartości 722 pikseli - więcej niż 100%. W tym momencie IE decyduje, że drugie pole nie pasuje i spada poniżej.

Istnieją różne rozwiązania w zależności od sytuacji. Nicole Sullivan ma ciekawe rozwiązanie oparte na wykorzystaniu "przepełnienia: ukryte" na twojej ostatniej kolumnie, a nie na połączeniu typu "float/width". Używam go, kiedy mogę. Sprawdź tutaj:

http://www.stubbornella.org/content/2009/07/23/overflow-a-secret-benefit/

Innym rozwiązaniem, które znalazłem, gdy „przepełnienie” po prostu przyzwyczajenie wyciąć to, aby dodać niewielką marżę ujemną do ostatniego elementu w wierszu. Jeśli przesuwasz się w lewo, dodaj po prawej margines ujemny o wartości kilku pikseli. Przesuwając się w prawo, dodaj go w lewo. Nie spotkałem się z żadnymi negatywnymi skutkami (chociaż chętnie usłyszałbym, czy inni).

Nadzieję, że pomaga. Twoje zdrowie.

+0

Bardzo pomaga. Sprawiło, że wiele zamieszania stało się jasne ... ale jedno pytanie pozostaje teraz w mojej głowie. Twoim zdaniem; Ile marginesów pikseli ujemnych można bezpiecznie dodać? (i mam na myśli kompatybilność z różnymi przeglądarkami) –

+0

Przykro mi to mówić, ale wciąż to odkrywam. Z mojego doświadczenia wynika, że ​​nie potrzebujesz więcej niż kilka pikseli do czyszczenia IE (w zależności od liczby kolumn) i dlaczego chcesz za burtę? Nie widziałem jeszcze żadnych problemów z różnymi przeglądarkami, ale wolę też ukrywanie go w przeglądarkach, które go nie potrzebują - ze względów bezpieczeństwa. Możesz to zrobić w specjalnym arkuszu stylów IE wywoływanym z komentarzami warunkowymi, lub dodając skrót na początku deklaracji (jeśli wolisz hacki - ja nie), takie jak: # margin-right: -3px; –

8

Oto proste rozwiązanie tego problemu:

div { 
*min-width: 100%; 
} 

przetestowane w IE7.

+0

Użyłem tego w warunkowym arkuszu stylów dla IE7 z regularną notacją "min-width" (bez gwiazdki). Pracował świetnie, dzięki. – Weboide

+0

Naprawdę pomóż w pełni. bardzo dziękuję – Muhammed

+0

Nie zaleca się używania reguły * w CSS, ponieważ -> http://stackoverflow.com/questions/4563651/what-does-an-asterisk-do-in-a-css-property-name Zamiast tego należy użyć warunkow IE, aby dodać określoną klasę dla wersji IE, którą chcesz zmodyfikować. – Mido

0

To jest, czego używam, aby rozwiązać ten problem w IE 7.

<!--[if IE 7]> 
    <style> 
     body { 
     padding:0 1% 0 0; 
     width:101%; 
     } 
    </style> 
<![endif]--> 
0

Spróbuj wykonać następujące czynności:

div { 
    width: 100%; 
    *overflow: auto; 
} 

To działa dobrze w IE7.