15

我在这张图片上有 3 个 div:

在此处输入图像描述

div1 具有固定宽度但可变高度,所以我想要的是,如果 div1 高度大于 div2 高度,则 div3 保持在 div2 下方和 div1 右侧,如下所示:

在此处输入图像描述

关于如何做到这一点的任何想法?目前,我创建了一个容器:

<div class="colcontainer">
    <div class="col-left">
    {% block news %}{% endblock %}
    </div>  
    <div id="main_content">
        <div class="col-right">
            {% block rightcol %}{% endblock %}
        </div> 
        <div id="content">
            <div class="contentwrap">
                <div class="itemwrap">
                {% block content %}{% endblock %}
            </div>
        </div>
    </div>

    <div class="content-bottom"><div class="content-bottom-left"></div></div>
    </div>
</div>

我的 CSS 是这样的:

.col-left {
    float:left;
    padding:0;
    margin:0;
    width: 300px;
    min-height:198px;
}

.col-right {
    text-align:left;
    padding:0;
    margin:0 0 0 200px;
}

#content {
    background: none repeat scroll 0 0 #FFFFFF;
    float: left;
    margin-top: 10px;
    padding: 10px;
    width: 980px;
}

这是JSFiddle 演示

4

10 回答 10

6

Atlast,我明白了 :) 只需将所有这三个元素包装在父元素中,如下所示。

HTML

<div class="main">
   <div class="div1"></div>  <!-- Change height to see result -->
   <div class="div2"></div>
   <div class="div3"></div>
</div>

CSS

.main{width:200px;height:200px;border:1px solid black;overflow:hidden;}
.div1{width:100px;min-height:100px;float:left;background-color:green;}
.div2{width:100px;display:inline-block;height:100px;background-color:blue;}
.div3{width:100px;display:inline-block;height:100px;background-color:red;margin-top:-4px;}

工作小提琴

如果你想让第三个 div 的宽度比它本身宽,那么我强烈建议你使用 jQuery。

.div3{width:200px;}  /* Keeping width wide enough with the container */

jQuery

$(function(){
    if($('.div1').height() > 100)
       $('.div3').width(100)
});

工作小提琴

于 2013-02-19T16:48:05.750 回答
4

如果你#content这样设计它就可以了。

#content {
    background: #fbb;
    padding: 10px;
}

注意没有浮动。

jsFiddle:http: //jsfiddle.net/JRbFy/1/

具有等高左列和内容效果的jsFiddle:http: //jsfiddle.net/JRbFy/2/

于 2013-02-19T17:03:38.053 回答
4

由于 CSS 还没有为这项工作提供任何东西,您将不得不使用 Javascript。

我会首先在您的第一张图片上创建一个页面。然后我会用

$("#div").height()

,它返回您的 div 的高度并将其与您的第二个 div 的高度进行比较:

if($("#div1").height() > $("div2").height())
  //change website...

在 if 正文中放置所需的 css 更改......这应该可以解决问题。

于 2013-02-19T16:53:40.067 回答
2

如果我理解正确,你想要这样的东西吗?

<style>
    #container1
    {
        width: 100%;
    }

    #left
    {
        width: 30%;
        background: #123456;
        float: left;
        height: 50%;
    }
    #right
    {
        width: 70%;
        float: left;
        height: 50%;
    }
    #right_top
    {
        background: #111111;
        height: 30%;
    }
    #right_bottom
    {
        background: #777777;
        height: 70%;
    }
</style>

<div id="container1">
    <div id="left">Div 1</div>
    <div id="right">
        <div id="right_top">Div 2</div>
        <div id="right_bottom">Div 3</div>
    </div>
</div>
于 2013-02-19T17:03:00.320 回答
2

这应该对您有用,至少可以为您指明正确的方向。

CSS:

.box {border:1px dashed black;}
#content {width:1000px;}
#clear {clear:both;}

#left {float:left; width:200px; height:100px; margin-right:15px;}
#top {float:left; width:780px; height:200px;}
#main {float:left; min-width:780px; max-width:1000px;}

HTML:

<html>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>

<div class="box" id="content">
<div class="box" id="left">Left</div>
<div class="box" id="top">Top</div>
<div class="box" id="main">Main</div>
<div id="clear"></div>
</div>

</body>
</html>
于 2013-02-19T17:07:42.640 回答
2

最后我的解决方案也来了:)

演示:http: //jsfiddle.net/JRbFy/3/

只需使用margin: 10px auto;,并content div取出main_content div

HTML

<div class="colcontainer">
    <div class="col-left">
    {% block news %}{% endblock %}
        <br/>
        <b>Hover on me to increase my height </b>
    </div>  
    <div id="main_content">
        <div class="col-right">
            {% block rightcol %}{% endblock %}
        </div> 
    </div>
    <div id="content">
        <div class="contentwrap">
            <div class="itemwrap">
                {% block content %}{% endblock %}
            </div>
        </div>


    <div class="content-bottom"><div class="content-bottom-left"></div></div>
    </div>
</div>

CSS

.colcontainer{
    width: auto;
}

.col-left {
    background: none repeat scroll 0 0 silver;
    float:left;
    padding:0;
    margin:0;
    width: 300px;
    min-height:198px;
}

.col-left:hover{    
    height: 300px;
}

.col-right {
    background: none repeat scroll 0 0 steelblue;
    text-align:left;
    padding:0;
    margin:0 0 0 200px;
    height:198px;
}

#content {
    background: none repeat scroll 0 0 yellowgreen;    
    margin: 10px auto;
    padding: 10px;
}

希望有帮助

于 2013-02-19T17:24:19.603 回答
0

看到每个人都喜欢 jQuery,我决定把一些东西放在一起,实际上可以满足你的要求。玩得开心 :)

<div id="div1">
    <p>Test</p>
    <p>Test</p>
    <p>Test</p>
</div>
<div id="div2">
    <p>Test</p>
    <p>Test</p>
    <p>Test</p>
</div>
<div id="div3">
    <p>Test</p>
    <p>Test</p>
    <p>Test</p>
</div>
<div id="div4">
    <p>Test</p>
    <p>Test</p>
    <p>Test</p>
</div>

加入一些CSS

#div1, #div2, #div3, #div4 {
    border:3px double #000;
    background:#fff
}
#div1 {
    width:200px;
    float:left;
}
#div4 {
    clear:both;
}

最后是你的 jQuery。

$(function () {
    $('#div2').css({
        marginLeft: $('#div1').outerWidth()
    });
    if ($('#div2').height() < $('#div1').height()) {
        $('#div3').css({
            marginLeft: $('#div1').outerWidth()
        });
    }
});

现在。我并不是在提倡这种方法,只是说它实际上实现了您的要求,而这里没有其他任何东西;)

这个 jsFiddle看到它。只需向 div1 添加一个 <p>Test</p> ,您就会看到 div3 根据您的图像转到 div1 的右侧。

现在,我知道有人会说“但是 div1 并没有占据所有的高度!”,不用担心。检查更新的 jsFiddle并在 javascript 中添加一个片段,以查看您的问题也得到了解答。只需从 div1 中删除 <p>Test</p> 之一。

$(function () {
    $('#div2').css({
        marginLeft: $('#div1').outerWidth()
    });
    if ($('#div2').height() < $('#div1').height()) {
        $('#div3').css({
            marginLeft: $('#div1').outerWidth()
        });
        $('#div1').css({
            height: $('#div2').outerHeight() + $('#div3').height()
        });
    }
});

我必须重申,这个解决方案依赖于 Javascript。关闭它,设备不支持它,这停止工作。

于 2013-03-03T07:06:56.727 回答
0

我可能错过了阅读这个问题,但这没有你想要的布局。

https://jsfiddle.net/94ohw4hq/

<div id="container">
<div class="left">
Left
</div>
<div class="right">
Right
</div>
<div class="bottom">
Bottom
</div>
</div>
于 2016-04-12T15:12:16.290 回答
0

不一定能回答问题,但我想您可能想知道在 CSS 3 中您可以使用这种样式 - {word-wrap: break-word;} - 将长字符串放入 div 中。

于 2016-03-18T15:12:10.473 回答
-3

利用

书签插件

解决你的问题

于 2013-11-29T05:37:43.767 回答