Javascript jQuery和页边距:0自动

Javascript jQuery和页边距:0自动,javascript,jquery,css,Javascript,Jquery,Css,所以,这是一个以前被问过的问题,但我希望我们能解决它:我正在使用jQuery1.4。如果我定义样式 #obj { margin: 0 auto; } 然后呢 $('#obj').css('marginLeft'); 结果是以像素为单位的计算值。是否有任何方法可以判断这些像素是否来自自动计算,而无需解析文档。样式表?您无法从元素本身获得自动,因为样式是层叠的,如果有这种情况会怎样 #obj { margin: 0 auto; } div #obj { margin: 0 10px; } 是哪

所以,这是一个以前被问过的问题,但我希望我们能解决它:我正在使用jQuery1.4。如果我定义样式

#obj { margin: 0 auto; }
然后呢

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

结果是以像素为单位的计算值。是否有任何方法可以判断这些像素是否来自
自动
计算,而无需解析
文档。样式表

您无法从元素本身获得
自动
,因为样式是层叠的,如果有这种情况会怎样

#obj { margin: 0 auto; }
div #obj { margin: 0 10px; }
是哪一个?取决于页面及其层叠方式,基本概念是在该元素上获得计算的样式属性,样式表中的内容无关紧要,可能有20个样式表,等等

基本上可以归结为:获得
auto
vs
000px
是一个非常罕见的请求,需要很多额外的代码才能解决,所以很容易出现“不,这不属于核心”的情况。但是,


简短回答:jQuery核心无法(没有代码)做到这一点,jQuery带有插件,或者只是JavaScript一般是可以的。

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

var aMargins = [];
$('.yourObjs').each(function(i,obj){
  var objML = $(obj).css('marginLeft');
  aMargins.push(objML);
});
然后调整窗口大小,查看更改了哪些页边距(这些页边距将是“自动”或%),对其执行所需操作,并将窗口恢复为原始大小:

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);

如果您的居中代码只是调整左边距,那么这也适用于基于%的边距。我无法测试这段代码或提供一个示例,因为我正在路上,正在用手机写东西,但希望这能起作用,或能帮助您找到一些有用的东西。

根据我刚才的研究,我认为您无法从jQuery访问原始样式,只能访问计算样式,除非您解析样式表本身。想要这样做的具体原因是什么?您的意思是检查jQuery是否修改了
margin left
属性的原始值
auto
?或者,您的意思是检查原始样式表属性是否设置为
auto
?考虑到获得样式充其量只是一个巨大的痛苦,您可能需要描述一下您的总体目标是什么。有些人可能有一种更可行的替代方法。好吧,这里有一个简单的场景:我想调整元素的大小。如果其边距已设置为
自动
,则我希望保持其居中;如果它的边距是以像素或其他单位设置的,那么我想改为以像素或其他单位设置边距。是的,我意识到jquerycore无法做到这一点。你链接的插件如何帮助我做到这一点也不明显。在您给出的例子中,肯定有人编写了代码,告诉我
auto
样式在
#obj
上是否处于活动状态?@Trevor-您试图访问样式表中为特定CSS属性指定给该元素的样式…但这不是浏览器公开的内容,它从来都不是任何规范的一部分,也没有可以访问它的属性。请记住,尽管JavaScript是一种动态语言,但它访问的属性在DOM中的某个地方是可用的,由本机代码显式公开……这不是:)在大多数情况下,“auto”实际上被转换为一个连接到流更改事件处理程序的中心函数,在附加后,它不在乎是否表示“auto”:)我知道它不是直接暴露的,但原则上它是可以被发现的。例如,如果调整了容器元素的大小,则计算的边距将更改。所以我在问:如何发现它?有没有一个jQuery插件可以帮我处理这个发现?@Trevor-我认为我没有正确地传达它,它根本没有暴露在JavaScript中,不管是否直接暴露在JavaScript中,都无法从浏览器中获取此信息……你所能做的就是遍历级联样式树(通过在自己的代码中解析CSS)并尝试查看与之匹配的规则。jQuery找不到JavaScript整体看不到的内容。页边空白在调整大小时是变化的,但浏览器正在这样做,并且它没有暴露它的思维过程或沿途使用的变量。它如何工作并不重要……重要的是你能看到的API,而你看不到这一点。