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
Ответы
Ответ 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
чтобы решить вашу проблему