来自Fx.Slide.js
:
Fx.Slide = new Class({
/* .. */
initialize: function(element, options){
this.addEvent('complete', function(){
this.open = (this.wrapper['offset' + this.layout.capitalize()] != 0);
if (this.open && Browser.Engine.webkit419) this.element.dispose().inject(this.wrapper);
}, true);
this.element = this.subject = document.id(element);
this.parent(options);
var wrapper = this.element.retrieve('wrapper');
this.wrapper = wrapper || new Element('div', {
styles: $extend(this.element.getStyles('margin', 'position'), {overflow: 'hidden'})
}).wraps(this.element);
this.element.store('wrapper', this.wrapper).setStyle('margin', 0);
this.now = [];
this.open = true;
},
/* .. */
如您所见,Fx.Slide
获取应用到它的元素 ( this.element
),将其包装在一个包装器 div ( this.wrapper
) 中,overflow: hidden
其中包含元素的margin
and position
,然后删除margin
元素的 。
所以删除margin
是设计使然。我不明白的是为什么边距没有转移到包装器上。您可能有一些 CSS 修改了正在使用的父元素中的普通 DIV,!important
并且正在阻止Fx.Slide
正确传输属性。
您是否使用 MooTools 1.2.3 和最新版本的 MooTools More (1.2.3.1)?
此外,为了Fx.Slide
正常工作,您的页面需要处于标准模式。您是否将 XHTML 或 HTML(严格或过渡)文档类型作为标记中的第一件事?(没有 XML 序言)。最坏的情况,如果它仍然不起作用,请使用以下方法:
$('mydiv').getParent().setStyle('margin', '0 auto');
MooTools是一个很棒的 JavaScript 框架,我个人觉得它比 jQuery 强大得多(不包括 jQuery 拥有庞大社区的事实)。不幸的是,More
包(相当于 jQuery 的插件)的一致性在某些方面有些欠缺。