jQuery和margin:0 auto

时间:2010-06-12 15:34:08

标签: javascript jquery css

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

#obj { margin: 0 auto; }

然后再做

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

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

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

基本上归结为这样:获取auto vs 000px真正罕见的请求,并且需要很多的额外代码弄清楚,这是一个简单的例子,“不,这不属于核心”。但是, there are plugins to do CSS parsing

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