jQueryで、ドキュメントではなく親を基準にした位置の値を持つ要素の「top、left」プロパティを設定するにはどうすればよいですか?


144

.offset([coordinates])メソッドは要素の座標を設定しますが、ドキュメントに対してのみです。次に、要素の座標を親に対して相対的に設定するにはどうすればよいですか?

見つけた .position()メソッドは、親に相対的な「上、左」の値のみを取得する、値は設定されていません。

私が試した

$("#mydiv").css({top: 200, left: 200});

しかし動作しません。

回答:


227

親に対して相対的な位置を設定するにposition:relativeは、親とposition:absolute要素のを設定する必要があります

$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});

これposition: absolute;は、最も近くに配置された親(つまり、デフォルト以外の任意の位置プロパティを持つ最も近い親)に対して相対的に配置するために機能しますstatic


13
$("#mydiv").css({top: '200px', left: '200px', position:'absolute'});<-良い$("#mydiv").css({top: '200', left: '200', position:'absolute'});<-悪い。明らかに、位置の値が文字列の場合、単位を含める必要があります。そうしないと、効果がありません。
ボブスタイン

1
親が相対的に配置されていることについてのメモは、私を不満の多くから救いました。ありがとうございました。
NuclearPeon 2016

39
$("#mydiv").css('top', 200);

$("#mydiv").css('left', 200);

7
さらにいくつかの指示がここで役立ちます

1
または$( "#mydiv")。css({'top':200、 'left':200});
Nick B

言い換えれば、単に「上」と「左」を引用した場合、OPは正しいでしょうか。
RufusVS

13

jQuery UIの.positionメソッドを試すことができます。

$("#mydiv").position({
  of: $('#mydiv').parent(),
  my: 'left+200 top+200',
  at: 'left top'
});

動作するデモを確認してください。


10
.position()にはセッターがありません
devnull69 '10 / 10/05

それは位置を設定できると正確にどこに言っていますか?値を見つけるだけで、変更することはできないと思います。
Chris

1
.position()メソッドは値を設定しません!
最大

とても興味深い!!!(主な回答で述べたように)親要素のcss位置プロパティを設定できない場合、コードは非常に便利です。これは、UIウィジェットであり、スムーズなアクティビティのために設定を変更したくないためです。もちろん、これはjQuery UIを使用している場合にのみ発生します。jQuery UIの「ドラッグ可能な」ウィジェットでこの小さな問題が見つかりました。
最大

6

渡された値が文字列型の場合、 '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

6

動的ページの動的コードオフセット

var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});

0

位置を設定することで私の記憶をリフレッシュし、私はこれに来ているので、他の誰かがそれを見るかどうかわかりませんが-

を使用して位置を設定するのは好きではありませんが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場合、返されるかどうかわからないdocumentnull完全に、または何か他のものを。

offsetParent jQuery 1.2.6以降、2008年に利用可能になったため、この手法は現在、元の質問が尋ねられたときに機能します。


0

offset()機能を使用しますjQuery。ここにあります:

$container.offset({
        'left': 100,
        'top': mouse.y - ( event_state.mouse_y - event_state.container_top ) 
    });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.