在jQuery中,如何设置元素的“顶部,左侧”属性的位置值相对于父级而不是相对于文档?


144

.offset([coordinates])方法设置元素的坐标,但仅相对于文档。那么如何设置元素的坐标,但相对于父元素呢?

我发现该.position()方法仅获得相对于父级的“顶部,左侧”值,但未设置任何值。

我尝试过

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

但不起作用。

Answers:


227

要设置相对于父级的位置,您需要设置position:relative父级和position:absolute元素的

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

之所以有效,是因为position: absolute;位置相对于最近定位的父对象(即,具有除default以外的任何position属性的最近的父对象static)。


13
$("#mydiv").css({top: '200px', left: '200px', position:'absolute'});<-好$("#mydiv").css({top: '200', left: '200', position:'absolute'});<-不好。显然,如果位置值是string,则必须包含单位,否则它将无效。
鲍勃·斯坦因

1
关于有一个相对定位的父母的说明让我很沮丧。谢谢。
NuclearPeon

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

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

7
一些更多的指导会有所帮助
鸽子

1
或$(“#mydiv”)。css({'top':200,'left':200});或
尼克B

换句话说,如果OP仅仅引用“ top”和“ left”,它们将是正确的吗?
RufusVS

13

您可以尝试jQuery UI的.position方法。

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

检查工作演示。


10
.position()没有二传手
devnull69 2012年

它在哪里确切地表明可以设定头寸?我认为它只能找到值,而不能更改它们。
克里斯

1
.position()方法未设置值!
2012年

很有意思!!!当您无法设置父元素的css position属性(如主要答案中所述)时,您的代码将非常有用,因为它是一个UI小部件,并且您不想更改其设置以进行流畅的活动。当然,这仅在使用jQuery UI时发生。我发现了jQuery UI“可拖动”小部件的这个小问题。
2012年

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的setter。但是,如果由于某种原因,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 ) 
    });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.