2010-07-01 31 views
0

我想做一个简单的模态框,可以最小化到屏幕的右下角,所以我可以把它变成一个插件,但我不能让简单的CSS工作,并将其本身定位在右下角!以下是所有代码,您可以立即将其粘贴并查看示例工作。jQuery .CSS不会将元素放置在右下角!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Minimize Window</title> 
<script src="http://www.fzilla.com/f/jquery"></script> 
<style> 
* {margin:0px; padding:0px;} 
body {font-family: SegoeUI, Helvetica, Arial, sans-serif; font-size:14px;} 
.window {position:fixed; height:auto; width:450px; border:1px solid #ccc; overflow:hidden;} 
.window.minimized {height:50px; bottom:100px; right:50px;} 
.window .top_bar {border-bottom:1px solid #ccc; padding:3px 5px;} 
.window .top_bar .title {font-size:1.4em; font-weight:600;} 
.window .top_bar .controls {font-weight:600; float:right;} 
.window .top_bar .controls a {cursor:pointer; color:#666;} 
</style> 
<script> 
$(document).ready(function(){ 
var initial_height = $(".window").height(); 
var windows_on = false; 
$(".minimize").click(function(){ 
    var t = $(this); 
    var tx = t.html(); 
    if (tx == "[-]") { 
    // code when minimizing and putting to bottom right 
    windows_on = false; 
    t.html("[+]"); 
    t.parents(".window").css({ "height": "50px", "bottom": "100px", "right":"50px" }); 
    t.parents(".window").addClass("minimized"); 
    } else { 
    // code when making bigger and centering 
    windows_on = true; 
    t.html("[-]"); 
    t.parents(".window").removeClass("minimized"); 
    t.parents(".window").css({ "height": "400" }); 
    center(); 
    } 
}); 
$(window).resize(function(){ if (windows_on) { center() } }); 
var w, h, aw, ah, y, x; 
function center() { 
    var t = $(".window"); 
    w = t.width(); 
    h = t.height(); 
    aw = $(window).width(); 
    ah = $(window).height(); 
    y = (ah - h)/2; 
    x = (aw - w)/2; 
    t.css({"top":y, "left":x}); 
} 
}); 
</script> 

</head> 

<body> 
<div class="window minimized"> 
<div class="top_bar"> 
    <span class="title">This is the title of our window</span> 
     <span class="controls"><a class="minimize">[+]</a></span> 
    </div><!-- top_bar --> 
    <div class="content"> 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dui tellus, feugiat id interdum id, tempor id felis. Nam id imperdiet nulla. Nunc auctor turpis id lectus mollis vel vehicula mauris porta. Nullam cursus mi at turpis viverra sed euismod metus elementum. Integer imperdiet, felis sit amet rhoncus eleifend, nisi orci convallis libero, in iaculis mauris sapien vel est.</p> 
     <p> Morbi urna mi, dapibus vitae tincidunt in, commodo vel enim. In porta laoreet elit id vehicula. Proin id augue mauris, vel commodo diam. Fusce a metus et est porta fringilla at congue enim. Nulla elit ligula, aliquam sit amet bibendum vitae, rutrum ac quam. Nunc diam erat, condimentum sed sagittis sed, posuere eu mi. Etiam sit amet nibh vel massa faucibus dictum et vel metus. Sed gravida commodo neque eu euismod. Fusce eget orci sed lacus hendrerit porttitor.</p> 
    </div><!-- content --> 
</div><!-- window --> 
</body> 
</html> 

任何建议将帮助!谢谢!

回答

1

在设置冲突的定位说明符(右侧,底部)之前,您应该确保将top:和left:设置为auto。否则,浏览器会根据情况选择一个。

1

身体没有heigth设置,因此可能不会填满你的整个屏幕。 .window将在body-container大小的底部被分配 尝试为body元素设置heigth。

+0

没有不是这种情况,我曾尝试设置一个高度,它没有改变任何东西。 – 2010-07-01 21:42:41

+0

@天使:它可能没有解决它自己的问题,但它是你想要看作解决方案的*部分*的东西。除非你告诉它,'body' **不会**在一些(许多)浏览器上填充视口。 – 2010-07-01 21:44:48

0
  • 最小化设置高度,底部和右侧属性
  • 最大化,你设置的高度,然后中心(),即设置上和左属性

这些都是内嵌样式因而具有较高优先级比通过样式表设置的属性。

因此添加和删除.minimized的优先级较低。

解决方案:

1 /套底部和右侧为自动最大化(因为最小化设置)和顶部和减少时留下来的汽车(因为中心()设置它们最大化时) 时。

$(".minimize").click(function(){ 
    var t = $(this); 
    var tx = t.html(); 
    if (tx == "[-]") { 
    // code when minimizing and putting to bottom right 
    windows_on = false; 
    t.html("[+]"); 
    t.parents(".window").css({ "height": "50px", "left": "auto", "top": "auto", "bottom": "100px", "right":"50px" }); 
    t.parents(".window").addClass("minimized"); 
    } else { 
    // code when making bigger and centering 
    windows_on = true; 
    t.html("[-]"); 
    t.parents(".window").removeClass("minimized"); 
    t.parents(".window").css({ "height": "400px" , "bottom": "auto", "right":"auto" }); 

    center(); 
    } 
}); 

2 /更好的:不要.toggle使用的CSS(),但只是.addClass()()如果你的CSS都行,这将有同样的效果。奖金:您的JS文件中没有更多硬编码值。

1

这里是一个完全可行的解决方案..

http://www.jsfiddle.net/wvgVv/

你并不需要在所有的中心法...

刚刚成立top/left.window到50%,使用负边缘来居中它(基于窗口的大小)...

0

所以我试着切换只使用CSS来做它,它的效果很好......但是,一旦我添加了中心脚本,它就打破了最小化选项,因为即使我的if语句已被设置为false,它仍然可以工作......下面是新代码(非常流畅):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Minimize Window</title> 
<script src="http://www.fzilla.com/f/jquery"></script> 
<style> 
* {margin:0px; padding:0px;} 
body {font-family: SegoeUI, Helvetica, Arial, sans-serif; font-size:14px; height:1000px;} 
.window {position:fixed; height:auto; width:450px; bottom:auto; right:auto; left:auto; top:auto; border:1px solid #ccc; overflow:hidden;} 
.window.min {height:31px; bottom:50px; left:auto; top:auto; right:25px;} 
.window.max {height:auto; bottom:auto; left:40%; top:30%; right:auto;} 

.window .top_bar {border-bottom:1px solid #ccc; padding:3px 5px;} 
.window .top_bar .title {font-size:1.4em; font-weight:600;} 
.window .top_bar .controls {font-weight:600; float:right;} 
.window .top_bar .controls a {cursor:pointer; color:#666;} 
.window .content {padding:5px;} 
.window .content p {margin-bottom:1.2em;} 
</style> 
<script> 
$(document).ready(function(){ 
    var windows_on = false; 
    $(".minimize").toggle(function(){ 
     $(this).html("[-]"); 
     $(this).parents(".window").removeClass("min").addClass("max"); 
     windows_on = true; 
     center(); 
    }, 
    function() { 
     $(this).html("[+]"); 
     $(this).parents(".window").removeClass("max").addClass("min"); 
     windows_on = false; 
    }); 

    // code for positioning center! 
    $(window).resize(function(){ if (windows_on) { center() } }); 
    var w, h, aw, ah, y, x; 
    function center() { 
     var t = $(".window"); 
     w = t.width(); 
     h = t.height(); 
     aw = $(window).width(); 
     ah = $(window).height(); 
     y = (ah - h)/2; 
     x = (aw - w)/2; 
     t.css({"top":y, "left":x}); 
    } 
}); 
</script> 

</head> 

<body> 
<div class="window min"> 
    <div class="top_bar"> 
     <span class="title">This is the title of our window</span> 
     <span class="controls"><a class="minimize">[+]</a></span> 
    </div><!-- top_bar --> 
    <div class="content"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed dui tellus, feugiat id interdum id, tempor id felis. Nam id imperdiet nulla. Nunc auctor turpis id lectus mollis vel vehicula mauris porta. Nullam cursus mi at turpis viverra sed euismod metus elementum. Integer imperdiet, felis sit amet rhoncus eleifend, nisi orci convallis libero, in iaculis mauris sapien vel est.</p> 
     <p> Morbi urna mi, dapibus vitae tincidunt in, commodo vel enim. In porta laoreet elit id vehicula. Proin id augue mauris, vel commodo diam. Fusce a metus et est porta fringilla at congue enim. Nulla elit ligula, aliquam sit amet bibendum vitae, rutrum ac quam. Nunc diam erat, condimentum sed sagittis sed, posuere eu mi. Etiam sit amet nibh vel massa faucibus dictum et vel metus. Sed gravida commodo neque eu euismod. Fusce eget orci sed lacus hendrerit porttitor.</p> 
    </div><!-- content --> 
</div><!-- window --> 
</body> 
</html> 
相关问题