如何使模态框响应?

时间:2014-05-10 18:44:26

标签: jquery css html5 responsive-design modal-dialog

我已经实现了这个基于jQuery的模式框:http://leanmodal.finelysliced.com.au/。它非常完美,而且使用起来非常简单。但是,它没有响应 - 与网站的其他部分相反。这是我到目前为止所得到的:

CSS-部分

#lean_overlay {
    position: fixed;
    z-index:100;
    top: 0px;
    left: 0px;
    height:100%;
    width:100%;
    background: #000;
    display: none;
}
div.modalbox {
    background: #FFFFFF;
    border-radius: 5px;
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.7);
    padding : 10px;
    width: 400px;
    display : none;
    position : absolute;
}
.modalbox-header {
    background: url("../images/hd-bg.png") repeat scroll 0 0 rgba(0, 0, 0, 0);
    border-bottom: 1px solid #CCCCCC;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
    padding: 10px 0 0px 20px;
    margin: -10px 0 10px -10px;
    width : 100%;
}

Javascript(部分内容):

(function($){$.fn.extend({leanModal:function(options){var defaults={top:100,overlay:0.5,closeButton:null};var overlay=$("<div id='lean_overlay'></div>");$("body").append(overlay);options=$.extend(defaults,options);return this.each(function(){var o=options;$(this).click(function(e){var modal_id=$(this).attr("href");$("#lean_overlay").click(function(){close_modal(modal_id)});$(o.closeButton).click(function(){close_modal(modal_id)});var modal_height=$(modal_id).outerHeight();var modal_width=$(modal_id).outerWidth();
$("#lean_overlay").css({"display":"block",opacity:0});$("#lean_overlay").fadeTo(200,o.overlay);$(modal_id).css({"display":"block","position":"fixed","opacity":0,"z-index":11000,"left":50+"%","margin-left":-(modal_width/2)+"px","top":o.top+"px"});$(modal_id).fadeTo(200,1);e.preventDefault()})});function close_modal(modal_id){$("#lean_overlay").fadeOut(200);$(modal_id).css({"display":"none"})}}})})(jQuery);

最后 - 如何使用

<div class="modalbox">
    <div class="modalbox-header">
        <h2 class="normal">Title</h2>
        <div class="modal_close">&nbsp;</div>
    </div>
    <div class="modal_content">
        <p>Text goes here</p>
    </div>
</div>

如何让它响应?提前谢谢!

2 个答案:

答案 0 :(得分:0)

在CSS中给出Width时,添加max-width:...就可以了!#/ p>

像这样:

div.modalbox {
    background: #FFFFFF;
    border-radius: 5px;
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.7);
    padding : 10px;
    max-width: 400px;
    display : none;
    position : absolute;
}

答案 1 :(得分:0)

此解决方案涉及对文件本身进行一些黑客攻击。首先,我们将容器的宽度限制为永远不会超出屏幕

div.modalbox {
    max-width: 94%;
    display : none;
}

现在在jquery.leanModal.js文件中找到一个位置,其中模态元素位于屏幕上(第42行)并按此更改

$(modal_id).css({           
    'display' : 'block',
    'position' : 'fixed',
    'opacity' : 0,
    'z-index': 11000,
    //'left' : 50 + '%',
    'left' : ($(window).width() - modal_width)/2 + "px",  //<--this was margin-left before
    'top' : o.top + "px"
});

现在它响应迅速。容器仍将在更大的屏幕上使用内容宽度。

此外,如果您想通过调整浏览器宽度而不刷新页面来遵循弹出行为,请将此代码添加到e.preventDefault()上方某处的库文件中; (行~55)

$(window).resize(function(){
    $(modal_id).css({ 
        'left' : ($(window).width() - $(modal_id).outerWidth())/2 + "px"
    });
});