回答:
親に対して相対的な位置を設定するにposition:relative
は、親とposition:absolute
要素のを設定する必要があります
$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});
これposition: absolute;
は、最も近くに配置された親(つまり、デフォルト以外の任意の位置プロパティを持つ最も近い親)に対して相対的に配置するために機能しますstatic
。
jQuery UIの.positionメソッドを試すことができます。
$("#mydiv").position({
of: $('#mydiv').parent(),
my: 'left+200 top+200',
at: 'left top'
});
渡された値が文字列型の場合、 'px'(つまり90px)が後に続く必要があることがわかりました。値が整数の場合、pxが自動的に追加されます。widthプロパティとheightプロパティはより寛容です(どちらのタイプでも機能します)。
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
位置を設定することで私の記憶をリフレッシュし、私はこれに来ているので、他の誰かがそれを見るかどうかわかりませんが-
を使用して位置を設定するのは好きではありませんがcss()
、たいていは問題ありません。position()
xdazzで指摘されているように、jQuery UIのセッターを使用するのが最善の策だと思います。ただし、jQuery UIが何らかの理由でオプションではない場合(まだjQueryはオプションです)、私はこれを好みます。
const leftOffset = 200;
const topOffset = 200;
let $div = $("#mydiv");
let baseOffset = $div.offsetParent().offset();
$div.offset({
left: baseOffset.left + leftOffset,
top: baseOffset.top + topOffset
});
これには、$div
の親を相対的な位置に任意に設定しないという利点があります($div
の親が、それ自体、何かの中に絶対的に配置された場合はどうなりますか?)唯一の主要なエッジケースは、$div
がないoffsetParent
場合、返されるかどうかわからないdocument
、null
完全に、または何か他のものを。
offsetParent
jQuery 1.2.6以降、2008年に利用可能になったため、この手法は現在、元の質問が尋ねられたときに機能します。
のoffset()
機能を使用しますjQuery
。ここにあります:
$container.offset({
'left': 100,
'top': mouse.y - ( event_state.mouse_y - event_state.container_top )
});
$("#mydiv").css({top: '200px', left: '200px', position:'absolute'});
<-良い$("#mydiv").css({top: '200', left: '200', position:'absolute'});
<-悪い。明らかに、位置の値が文字列の場合、単位を含める必要があります。そうしないと、効果がありません。