jQuery和margin:0 auto

所以,这是一个之前被问过的问题,但我希望我们可以让它rest:我正在使用jQuery 1.4。 如果我定义风格

#obj { margin: 0 auto; } 

然后呢

 $('#obj').css('marginLeft'); 

结果是以像素为单位的计算值。 有没有办法判断这些像素是否来自auto计算,而不解析document.styleSheets

如果将边距设置为百分比,也会触发此解决方案,但它可能足以满足您的需要。 基本上,您可以记录resize时更改的边距。 因此,您需要在调整数组大小之前记录边距:

 var aMargins = []; $('.yourObjs').each(function(i,obj){ var objML = $(obj).css('marginLeft'); aMargins.push(objML); }); 

然后调整窗口大小,查看哪些边距已更改(这些边距将为“auto”或%),执行您需要对其执行的操作并将窗口返回到原始大小:

 var wW = $(window).width(); var wH = $(window).height(); window.resizeTo(wW - 5, wH); $('.yourObjs').each(function(i,obj){ if ($(obj).css('marginLeft') != aMargins[i]) { // your centering code here } } window.resizeTo(wW,wH); 

如果您的居中代码只是调整左边距,那么这对于基于%的边距也应该可以正常工作。 我无法测试这段代码或提供一个例子,因为我正在路上并通过手机写字,但希望这可以帮助你找到能够做到的东西。

你不能从元素本身获取auto ,因为样式是级联的,如果你有这个怎么办?

 #obj { margin: 0 auto; } div #obj { margin: 0 10px; } 

这是什么? 取决于页面及其级联方式,基本概念是您在该元素上获得计算出的样式属性,样式表中的内容无关紧要,可能有20个样式表等。

基本上它可以归结为:获得auto vs 000px是一个非常罕见的请求,并且需要大量额外的代码来解决,以至于它是一个简单的例子,“不,这不属于核心”。 但是, 有一些插件可以进行CSS解析

简短的回答:jQuery核心不能 (没有代码)这样​​做,jQuery与插件,或只是JavaScript一般是的你可以。