La méthode .offset([coordinates])
définit les coordonnées d'un élément mais uniquement par rapport au document. Alors, comment puis-je définir les coordonnées d'un élément mais par rapport au parent?
J'ai trouvé que la méthode .position()
n'obtient que les valeurs "top, left" par rapport au parent, mais elle ne définit aucune valeur.
J'ai essayé avec
$("#mydiv").css({top: 200, left: 200});
mais ne fonctionne pas.
Pour définir la position par rapport au parent, vous devez définir le position:relative
du parent et le position:absolute
de l'élément.
$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});
Cela fonctionne car position: absolute;
se positionne par rapport au parent le plus proche positionné (c'est-à-dire le parent le plus proche avec une propriété de position autre que la valeur par défaut static
).
$("#mydiv").css('top', 200);
$("#mydiv").css('left', 200);
Vous pouvez essayer la méthode . Position de jQuery UI.
$("#mydiv").position({
of: $('#mydiv').parent(),
my: 'left+200 top+200',
at: 'left top'
});
Code de décalage dynamique pour la page dynamique
var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});
J'ai constaté que si la valeur transmise est un type de chaîne, elle doit être suivie de "px" (c'est-à-dire 90px), où si la valeur est un entier, le px sera ajouté automatiquement. les propriétés width et height sont plus indulgentes (que le type fonctionne).
var x = "90";
var y = "120"
$(selector).css( { left: x, top: y } ) //doesn't work
$(selector).css( { left: x + "px", top: y + "px" } ) //does work
x = 90;
y = 120;
$(selector).css( { left: x, top: y } ) //does work
Utilisez la fonction offset()
de jQuery
. Ici ce serait:
$container.offset({
'left': 100,
'top': mouse.y - ( event_state.mouse_y - event_state.container_top )
});
En me remémorant la position, j'arrive si tard que je ne sais pas si quelqu'un le verra, mais -
Je n'aime pas définir la position à l'aide de css()
, même si cela va souvent. Je pense que la meilleure solution consiste à utiliser position()
setter de jQuery UI, comme indiqué par xdazz. Cependant, si jQuery UI n'est, pour une raison quelconque, pas une option (pourtant jQuery l'est), je préfère ceci:
const leftOffset = 200;
const topOffset = 200;
let $div = $("#mydiv");
let baseOffset = $div.offsetParent().offset();
$div.offset({
left: baseOffset.left + leftOffset,
top: baseOffset.top + topOffset
});
Cela a l'avantage de ne pas régler arbitrairement le parent de $div
sur un positionnement relatif (que se passe-t-il si le parent de $div
est lui-même placé de manière absolue dans quelque chose d'autre?). Je pense que le seul cas majeur dans Edge est que si $div
ne possède pas de offsetParent
, vous ne savez pas s'il retournera document
, null
, ou quelque chose d'autre.
offsetParent
est disponible depuis jQuery 1.2.6, courant 2008, donc cette technique fonctionne maintenant et lorsque la question initiale a été posée.