Het IE double margin probleem
Velen zullen er wel al mee geworsteld hebben, het probleem dat Internet Explorer meer marge geeft dan FireFox of Opera.
Dit is te wijten aan een bug in IE, de Double Margin Bug, en er bestaan verschillende oplossingen voor.
De eerste is een hack, wat eigenlijk zou moeten worden vermeden, de tweede oplossing is verleden tijd, daar Opera 8 de “Be Nice To Opera” regel niet meer ondersteund, dus moest er een laatste defenitieve oplossing komen.
Hoe je het probleem kan omzeilen.
Op het forum werd eens ooit een oplossing gezocht voor het dubbele marge probleem van Internet Explorer, dit is toen opgelost met de box-model-hack. Zoals de naam reeds zegt “hack”, en er wordt juist aangeraden zo weinig mogelijk (zelfs geen) hacks te gebruiken, dus moest er een andere oplossing voor komen.
De volgende mogelijke oplossing zou de Be Nice To Opera regel toe te voegen zijn die raar maar waar ook van toepassing is op Mozilla (FireFox), maar die na de komst van Opera 8 niet meer van toepassing is, dus moest er een nieuwe oplossing komen, en die is er.
Het probleem
Wat is die double margin bug eigenlijk?
Het probleem kan optreden als je een div met float: left binnenin een andere div plaats en daarbij de float: left-div met margin-left een spatie van de linker kant wilt meegeven.
De code
Onderstaandstaand voorbeeld kan je via css zo verwezenlijken:
<div class="container">
<div class="floatdiv"> </div>
</div>
.container {
width: 100%;
border: 2px solid;
}
.floatdiv {
float: left;
width: 115px;
height: 125px;
margin: 10px 0 10px 100px;
}
Een grafisch voorbeeld

Maar nu komt het
Zoals bovenstaande afbeelding ziet het eruit met Opera en Mozilla (FireFox), maar als je de het met IE zou bekijken zal je dit zien:

De oplossing
De oplossing zit erin om display: inline toe te voegen, andere (betere) browser zullen deze regel niet toepassen omdat bij een float: left of float: right het element automatisch een block-element wordt (tenzij eigenschap display: none), om het even welk element.
Bij IE gebeurd dat ook, maar deze voegt 100 px toe aan het element en 100px aan hetzelfde element nog eens omdat het nu van element-eigeschap is verandert, dit verklaard de dubbele waarde, door nu display: inline wordt dit opgeheven.
Correcte code
.floatdiv {
float: left;
width: 115px;
height: 125px;
margin: 10px 0 10px 100px;
display: inline;
}
Gelezen: 4048 | Styling, Design, CSS, Tips
Trackback/Pingbacks
- Gigadesign, website maken, correct » I.E.7, wat brengt deze ons?
- » Newbies en hun problemen - Gigadesign, XHTML-CSS website maken
- Newbies en hun problemen | Nono
- » Een vertikaal menu maken - Gigadesign, XHTML-CSS website maken
Reacties op: Het IE double margin probleem
-
Handig!
Ik gebruikte altijd de child parent hack hiervoor, maar dees is beter!
Merci!
-
waarom doet die bill daar niet gewoon zelf wat aan. met dat scheef gedoe altijd.
-
Bill doet nix
Bill is binne!
-
Ah super man. ik liep een partij te klooien…
ontwikkelen op mac en dan naar beneden lopen voor windows check en weer terug enz enz.
-
Echt helemaal geweldig dit! Kan ik eindelijk straks mijn website gaan aanpassen, hier heb ik echt ontzettend lang naar gezocht!
Mijn dank is groot!
-
Geweldig, hulde voor degene die dit heeft uitgegoocheld. Super _O_
-
Mark, Ik gebruik deze oplossing al geruime tijd maar om één of andere reden zit ik momenteel met het double margin probleem en helpt de
display: inline;ook niet.Ik kom er wel achter … wacht maar IE(6)
-
Ik heb een ander probleem…..
In IE werkt een margin-top van 5 px wel, dan ziet het er uit zoals ik wil, maar in Firefox en Opera is het effect anders, daar blijft de tekst minstens 50 px vanaf de top…
Anybody any ideas?
-
@ Martin, probeer eens met
!importantte werken, dus:margin-top: 6px !important;
-
Heb’k vandaag weer eens goed kunnen gebruiken!
-
Beetje late reactie eigenlijk…
Maar ik heb als antwoord op het verschil tussen de margin’s tussen bijvoorbeeld FireFox en Internet Explorer, dat je de HTML en Body in je CSS moet splitsen, en de body dus apart een margin moet geven.
Dus niet zo:
body, html {
margin: 0px 0px 0px;
}Maar dus zo:
body {
margin: 0px 0px 0px;
}html {
background: enzovoort...;
}Ik hoop dat mensen die dit lezen er wat mee kunnen!






