我真的无法想象如何重新定位Fancybox 2以使用left: 47px;
和top: 147px
我已经阅读了源代码,但没有找到一种方法来覆盖定位。
将autoCenter
设置为false只会在第一次自动居中后停止自动居中。
使用jQuery更改CSS或提供自定义包装器来应用CSS也不起作用,因为Fancybox始终添加内联CSS,这会覆盖所有我的尝试。
有没有办法告诉Fancybox停止定位并使用我的绝对定位?
!important
修饰符来覆盖内联CSS样式。.fancybox-wrap {
top: 147px !important;
left: 47px !important;
}
!important
应该覆盖任何内联样式,包括使用 css()
设置的样式 - 参见这里:http://jsfiddle.net/YKhEG/ - 或许 #fancybox-wrap
不是正确的选择器? - leepowers$(".fancybox-wrap").css("top", "5px");
它似乎被设置了,但被忽略了。如果我添加!important修饰符,它甚至似乎都没有被设置。有什么想法我做错了什么吗? - Mark Rausch我通过在beforeShow处理程序中手动添加一个新的css类来解决了这个问题。我使用的是fancybox2。
css:
.fancybox-wrap22 {
top: 22% !important;
}
JS:
$(".open_fancybox").click(function() {
$.fancybox.open('<h1>lorem ipsum</h1>', {
beforeShow : function() {
$('.fancybox-wrap').addClass('fancybox-wrap22');
}
});
return false;
});
// Disable vertical repositioning
var orig = $.fancybox._getPosition;
$.extend($.fancybox, {
_getPosition: function(onlyAbsolute) {
var rez = orig(onlyAbsolute);
delete rez.top;
return rez;
}
});
onlyAbsolute
代表什么意思? - Agent ZebraLucas Teixeira是对的!这对我有用。首先关闭中心功能,然后使用onComplete事件将内联CSS设置为所需样式。
<script>
jQuery(document).ready(function () {
//turn off center function
$.fancybox.center = function () { };
//use onComplete event to modify inline css
$("#ModalPopup").fancybox({
'modal': true,
'onComplete': function () {
$("#fancybox-wrap").css({ 'left': '250px', 'top': '150px' });
}
});
});
</script>
我猜你不能以那种方式改变CSS,因为fancybox核心一直在编辑#fancybox-wrap的样式属性。所以你必须添加一个新类,就像我描述的例子一样。否则你看不到任何视觉上的变化。
我有一个类似的问题 - 我想手动定位fancybox,但它一直自动重新居中。
我通过禁用居中功能解决了这个问题:
$.fancybox.center = function(){};
你不能像这样更改CSS吗? 显然将margin属性更改为“top”和“left”
$("a.fancybox1").fancybox({
'hideOnContentClick': false,
'onComplete' : function() {
$("#fancybox-wrap").css('margin', 'auto');
}
});
helpers:
选项来实现。如果我能找到准确的代码,我会将其发布为答案。 - Sparky