6

青いボックスがdivの残りの場所を埋め、緑のボックスが大きくなると動的に高さを下げるにはどうすればよいですか?

http://jsfiddle.net/trek711/ncrqb/4/

HTML

<div id="wrap">
    <div id="left"></div>
    <div id="righttop">
        <div id="click">Click!</div>
        <div id="box"></div>
        <div id="place"></div>
    </div>
    <div id="rightbot"></div>
</div>

CSS

#wrap {
    padding: 5px;
    width: 700px;
    height: 500px;
    background-color: yellow;
    border: 1px solid black;
}
#left {
    float: left;
    margin: 0 5px 0 0;
    width: 395px;
    height: inherit;
    background-color: red;
}
#righttop {
    float: left;
    padding: 5px;
    width: 290px;
    background-color: green;
}
#rightbot {
    float: left;
    margin: 5px 0 0 0;
    width: 300px;
    height: 60%;
    background-color: blue;
}
#click {
    width: 50px;
    height: 50px;
    background-color: red;
}
#box {
    display: none;
    width: 200px;
    height: 100px;
    background-color: white;
}
#place {
    width: 100px;
    height: 120px;
    background-color: lightgrey;
}

JS

$("#click").on("click", function (e) {
    $("#box").slideToggle("fast");
});

どうもありがとうございました!

4

6 に答える 6

3

残念ながら、これを CSS で実現する方法はありません。ただし、slideToggle には、進行に合わせてサイズを変更するために使用できるコールバックがあります。

$("#box").slideToggle(
        { duration: "fast", 
         progress: function() {
            $('#rightbot').height(
               $('#wrap').height()
               - $('#righttop').height()
               - 15 /* margins */)
       }
  });

そしてJSFiddleでは

そこにある唯一の醜いものは余白です。ただし、それらをプログラムで見つけることもおそらく可能です。

これは、青いボックスのサイズをスムーズに変更できる唯一の方法です。

于 2013-08-16T12:01:34.583 に答える
0
$("#click").on("click", function (e) {
    $("#box").slideToggle("fast");
    if($("#rightbot").height()==300)
       $("#rightbot").height("43%");
    else
       $("#rightbot").height("300");
});

ここにフィドルがあります

于 2013-08-16T12:07:25.130 に答える
0

どのようにそのことについて:

  $("#click").on("click", function (e) {
    var height = "63%",
        $box = $("#box"),
        $blueBox = $("#rightbot");

    if($box.is(":visible")){           
       $box.hide("fast");
       $blueBox.height(height);
       return;
    }

    height = "43%";
    $box.show("fast");
    $blueBox.height(height);
});

ここで働くフィドル:http://jsfiddle.net/ncrqb/15/

お役に立てば幸いです。

于 2013-08-16T12:05:44.863 に答える
0

次のコードは問題を解決します:-

$("#click").on("click", function (e) {
        $("#box").slideToggle("fast",function(){
            var bluedivHeight =   300;//$("#rightbot").height() if want to have dynamic      
            var toggleBoxHeight = $("#box").height();
            if($("#box").css("display")==="block"){
                $("#rightbot").height(bluedivHeight-toggleBoxHeight);
            } else {
                $("#rightbot").height(bluedivHeight);
            }
        });
    });
于 2013-08-16T12:09:59.167 に答える
0

http://jsfiddle.net/ncrqb/21/

function centerBlue(){
        var blue = $("#rightbot");
        var parent = $("#left");
        var rightTop = $("#righttop");
        var left_space = (parent.outerHeight() - rightTop.outerHeight()) - 5;
        blue.css("height",left_space+"px");
        console.log(rightTop.outerHeight());
    }

これが解決策であり、機能します。

これらの答えはすべて正しいですが、アニメーションが完了した後に青いボックスのサイズを変更する必要があることを忘れていました。そうしないと、jQuery はスライド状態の以前の高さを返します。

これは、jQuery が wi​​ndow.setTimeout(); を使用してアニメーション化するためです。そのため、コードはブロックされず、アニメーションのみが実行されます。

于 2013-08-16T12:10:24.637 に答える
0
$("#click").on("click", function (e) {
    $("#box").slideToggle("fast");
    $("#rightbot").height($("#left").height() - $("#rightbot").height());
});

#leftdiv の高さを 100% 値として使用しました。

他の方法は、overflow:hiddendiv のラッピングに使用することです。

解決策は、ユースケースによって異なります。

于 2013-08-16T12:04:54.237 に答える