J'ai un problème de positionnement avec certains éléments. Après l'inspection des outils de développement IE8, il me montre ceci:
Maintenant, je suis presque sûr que mon problème est ce décalage de 12, mais comment puis-je l'enlever ? Je ne trouve aucune mention d'une propriété offset CSS. Avons-nous besoin d'un décalage en plus de la marge?
Voici le code qui produit ceci:
<div id="wahoo" style="border: solid 1px black; height:100px;">
<asp:TextBox ID="inputBox" runat="server" />
<input id="btnDropDown" type="button" style="width:26px; height:26px; background-position: center center; border-left-color: buttonface; background-image: url(Images/WebResource.gif); border-bottom-color: buttonface; border-top-color: buttonface; background-repeat: no-repeat; border-right-color: buttonface;" tabindex="99" />
<div id="ListboxWrapper" style="display:none; position:absolute; onfocusout="this.style.display = 'none'"">
<asp:ListBox ID="lstBoxCompany" runat="server" AutoPostBack="True" OnSelectedIndexChanged="lstBoxCompany_SelectedIndexChanged" style="z-index: 100;" Width="300px" />
</div>
</div>
L'élément avec le décalage est inputBox
Ce décalage est fondamentalement la position x, y que le navigateur a calculée pour l'élément en fonction de son attribut css de position. Donc, si vous mettez un <br>
devant lui ou tout autre élément, le décalage sera modifié. Par exemple, vous pouvez le définir sur 0 par:
#inputBox{position:absolute;top:0px;left:0px;}
ou
#inputBox{position:relative;top:-12px;left:-2px;}
Par conséquent, quel que soit le problème de positionnement que vous avez, ce n'est pas nécessairement un problème de décalage, bien que vous puissiez toujours le résoudre en jouant avec les attributs haut, gauche, droit et bas.
Votre navigateur est-il incompatible?
Pour moi, c'était vertical-align: baseline vs vertical-align: top qui causait le décalage du haut.
Solution rapide:
position: relative;
top: -12px;
left: -2px;
cela devrait équilibrer ces compensations, mais peut-être devriez-vous jeter un coup d'œil à l'ensemble de votre mise en page et voir comment cette case interagit avec d'autres cases.
En ce qui concerne la terminologie, left
, right
, top
et bottom
sont CSS offset properties. Ils sont utilisés pour positionner des éléments à un emplacement spécifique (lorsqu'ils sont utilisés avec un positionnement absolute
ou fixed
) ou pour les déplacer par rapport à leur emplacement par défaut (lorsqu'ils sont utilisés avec un positionnement relative
.). Les marges, en revanche, spécifient les espaces entre les cases et elles s’effondrent parfois, elles ne peuvent donc pas être utilisées de manière fiable en tant que compensations.
Mais notez que dans votre cas, offset ne peut pas être calculé (uniquement) à partir de décalages CSS.
La définition de valeurs négatives pour les propriétés top et left peut ne pas constituer une solution de contournement satisfaisante si votre problème est simplement que vous êtes en mode quirks. Cela peut arriver si une déclaration <!DOCTYPE>
manque dans la page, ce qui la rendra en mode quirks dans IE8. Dans les outils de développement IE8, assurez-vous que le "Mode Quirks" n’est pas sélectionné sous "Mode Document". Si cette option est sélectionnée, vous devrez peut-être ajouter la déclaration <!DOCTYPE>
appropriée.
Si vous utilisez les outils de développement IE, assurez-vous de ne pas les avoir laissés par accident à un paramètre plus ancien. Je me rendais fou avec ce même problème jusqu'à ce que je voie qu'il était réglé sur les normes Internet Explorer 7. Changé aux standards d'Internet Explorer 9 et tout s'est mis en place.
élément mobile en haut: -12px ou le positionner ne résout absolument pas le problème mais le masque
J'ai eu le même problème - vérifiez si vous avez dans un élément d'habillage mélangé: des éléments flottants avec des éléments non flottants - mon élément non flottant a provoqué cet étrange décalage par rapport à l'élément flottant
Cela semble étrange, mais vous pouvez essayer de définir vertical-align: top
dans CSS
pour les entrées. Cela corrige cela dans IE8, au moins.
J'avais le même problème sur notre site Web .NET, fonctionnant sur DotNetNuke (DNN) et ce qui le résolvait pour moi était essentiellement une simple réinitialisation de la marge de la balise de formulaire. Les sites Web basés sur .NET sont souvent regroupés dans un formulaire et, sans réinitialiser la marge, vous pouvez voir le décalage étrange apparaître parfois, surtout lorsque des scripts sont inclus.
Donc, si vous essayez de résoudre ce problème sur votre site, essayez de le saisir dans votre fichier CSS:
form {
margin: 0;
}
définir la marge et le remplissage pour l'élément est confronté au problème:
#element_id {margin: 0; padding: 0}
et voir si le problème existe. IE rend la page avec un héritage plus indésirable. vous devriez l'empêcher de le faire.
Vous pouvez appliquer un css de réinitialisation pour vous débarrasser de ces "valeurs par défaut". Voici un exemple de réinitialisation css http://meyerweb.com/eric/tools/css/reset/ . Appliquez simplement les styles de réinitialisation AVANT vos propres styles.
Il suffit de définir le contour à aucun comme ça
[Identifiant] { contour: aucun; }
J'ai eu le même problème. Le décalage est apparu après l'actualisation UpdatePanel. La solution consistait à ajouter une balise vide avant UpdatePanel comme ceci:
<div></div>
...