Подтвердить что ты не робот

HTML-divs, как обернуть контент?

У меня есть 3 div, как на этом изображении:

enter image description here

div1 имеет фиксированную ширину, но переменную высоту, поэтому я хотел бы, чтобы, если высота div1 больше, чем высота div2, div3 остается под div2 и справа от div1, как здесь:

enter image description here

Любая идея о том, как это сделать? На данный момент я создал контейнер:

<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 demo

4b9b3361

Ответ 1

Поскольку CSS еще ничего не предоставляет для этой работы, вам придется использовать Javascript.

Сначала я создал бы такую ​​страницу, как на вашем первом снимке. Тогда я использовал бы

$("#div").height()

который возвращает высоту вашего div и сравнивает это с вашей второй высотой div:

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

В теге if поставьте необходимые изменения css... Это должно сделать трюк.

Ответ 2

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)
});

Рабочий скрипт

Ответ 3

Если вы создаете стиль #content, как это, он работает.

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

Обратите внимание, что плавающего нет.

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

jsFiddle с выравниванием по вертикали слева и столбцом: http://jsfiddle.net/JRbFy/2/

Ответ 4

Если я правильно понял, вы хотите что-то вроде этого?

<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>

Ответ 5

Это должно работать для вас, по крайней мере указывая на вас в правильном направлении.

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>

Ответ 6

И наконец мое решение приходит тоже:)

Демо: 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;
}

Надеюсь, что поможет

Ответ 7

Увидев, как все luuuuuuurves 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. Просто добавьте еще один <p> Test </p> в div1, и вы увидите, что div3 затем идет вправо от div1 в соответствии с вашим изображением.

Теперь, я знаю, кто-то скажет: "Но div1 не принимает всю высоту!", ну не бойтесь. Проверьте обновленный jsFiddle с помощью одной добавленной части в javascript, чтобы увидеть ответы на ваши вопросы. Просто удалите один из <p> Test </p> из div1.

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

Я должен повторить, что это решение зависит от Javascript. Отключите его, устройство не поддерживает его, это перестает работать.

Ответ 8

Не обязательно отвечает на вопрос, но я подумал, что вам может понравиться знать, что в CSS 3 вы можете использовать этот стиль - {word-wrap: break-word;} - для установки длинной строки внутри div.

Ответ 9

Вероятно, я пропустил вопрос, но у вас нет нужного макета.

https://jsfiddle.net/94ohw4hq/

<div id="container">
<div class="left">
Left
</div>
<div class="right">
Right
</div>
<div class="bottom">
Bottom
</div>
</div>

Ответ 10

Используйте

Плагин wookmark

чтобы решить вашу проблему