Je rencontre un problème étrange dans la dernière version de Chrome (25.0.1364.97 m). J'ai un ensemble de div à l'intérieur d'un conteneur flottant et nettoyé, tous flottaient à gauche avec la même largeur.
Dans Firefox, IE et les anciennes versions de Chrome toutes les cases sont côte à côte comme elles sont supposées mais dans la dernière version de Chrome la première div est au dessus des autres comme ça:
Cela ne semble se produire que lorsque la fenêtre est agrandie et au premier chargement, si je rafraîchis la page, elle se trie, mais si je fais un rafraîchissement dur avec Ctrl + F5, cela se produit à nouveau
Le HTML:
<div id="top">
<h1>Words</h1>
</div>
<div id="wrapper">
<div class="box">Words</div>
<div class="box">Words</div>
<div class="box">Words</div>
<div class="box">Words</div>
</div>
CSS:
#wrapper {clear:both;float:left;margin-top:20px;width:500px}
.box {float:left;width:100px;border:1px solid #000;margin-right:20px}
J'ai fait un violon ici: http://jsfiddle.net/GZHWR/3/
Est-ce un bug dans le dernier Chrome?
EDIT: Je sais que cela peut être résolu en appliquant un remplissage à l'élément #wrapper au lieu de margin-top, mais nous gérons environ 140 sites, il n'est donc pas pratique d'aller changer le CSS sur chacun
EDIT 2: Je pense que je dois clarifier ma question. Je ne demande pas comment résoudre le problème . Je le sais déjà. Je veux savoir pourquoi ce comportement se produit? Pourquoi le moteur de rendu rend-il le balisage/css comme ceci? Est-ce un comportement correct?
Cela semble être un bug. Le problème apparaît lors de l'application de clear
sur l'élément wrapper. Lorsque vous supprimez le clear
, le bogue disparaît.
Selon les spécifications W3C concernant la propriété clear
:
Cette propriété indique quels côtés de la ou des boîtes d'un élément peuvent ne pas être adjacents à une boîte flottante antérieure. La propriété 'clear' ne prend pas en compte les flottants à l'intérieur de l'élément lui-même ou dans d'autres contextes de mise en forme de bloc.
Cela ne devrait donc pas affecter le comportement flottant des enfants. J'ai déposé un rapport de bogue à Chrome à propos de ce problème.
Mise à jour: A partir du lien dans les commentaires, kjtocool mentionné le 30-03-2013:
Il semble que ce problème a été corrigé dans la version 26.0.1410.43
Pourquoi n'utilisez-vous pas
display: inline-block;
au lieu de float: left
pour .box?
Essayez:
#wrapper {
display:inline;
}
.box{
vertical-align:top;
}
J'ai eu le même problème avec la barre d'outils "J'aime" et après ce code, cela fonctionne.
Supprimer clear: les deux de #wrapper et si vous rencontrez toujours un problème, appliquez clear: both after last div
Supprimer clair: les deux; flotteur: gauche; form #wrapper
clair: les deux sont requis lorsque vous voulez div nex raw.
Essaye ça:
css:
.clearfix {
*zoom: 1;
}
.clearfix:before,
.clearfix:after {
display: table;
line-height: 0;
content: "";
}
.clearfix:after {
clear: both;
}
html:
<div id="wrapper" class="clearfix">
<div class="box">Words</div>
<div class="box">Words</div>
<div class="box">Words</div>
<div class="box">Words</div>
</div>
Retirer
clear:both;
de #wrapper
retirer clear:both
de #wrapper
Oui cela fonctionne..........