На странице с двумя столбцами, как я могу вырастить левый div на одну и ту же высоту правого div с помощью CSS или Javascript?
Я пытаюсь создать страницу с двумя столбцами, используя макет на основе div (без таблиц, пожалуйста!). Проблема в том, что я не могу вырастить левое деление, чтобы соответствовать высоте правого. У моего правого div обычно много контента.
Вот парный пример моего шаблона, чтобы проиллюстрировать проблему.
<div style="float:left; width: 150px; border: 1px solid;">
<ul>
<li>nav1</li>
<li>nav2</li>
<li>nav3</li>
<li>nav4</li>
</ul>
</div>
<div style="float:left; width: 250px">
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
....
</div>
Ответы
Ответ 1
Используйте jQuery для этой проблемы; просто вызовите эту функцию в своей готовой функции:
function setHeight(){
var height = $(document).height(); //optionally, subtract some from the height
$("#leftDiv").css("height", height + "px");
}
Ответ 2
Самый простой ответ - в следующей версии css (3), которая в настоящее время не поддерживается браузером.
Теперь вы относитесь к вычислению высот в javascript и установке их с левой стороны.
Если навигация настолько важна, что ее можно расположить таким образом, запустите ее вверху.
вы также можете сделать визуальный трюк, перемещая границы в контейнер и большую внутреннюю часть и сделайте его похожим на размер.
это делает его похожим, но это не так.
<div style="border-left:solid 1px black;border-bottom:solid 1px black;">
<div style="float:left; width: 150px; border-top: 1px solid;">
<ul>
<li>nav1</li>
<li>nav2</li>
<li>nav3</li>
<li>nav4</li>
</ul>
</div>
<div style="float:left; width: 250px; border:solid 1px black;border-bottom:0;">
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
...
</div>
<div style="clear:both;" ></div>
</div>
Ответ 3
Это можно сделать в CSS! Не позволяйте людям говорить вам иначе.
Самый простой, безболезненный способ сделать это - использовать метод Faux Columns.
Однако, если это решение не сработает для вас, вы захотите прочитать эту технику. Но будьте осторожны, это хакерство CSS, которое заставит вас проснуться в холодном поту посреди ночи.
Суть в том, что вы назначаете большое количество отступов в нижней части столбца и отрицательный запас того же размера. Затем вы размещаете свои столбцы в контейнере с overflow: hidden
. Более или менее значения отступов/полей позволяют ящику продолжать расширяться до тех пор, пока он не достигнет конца обертки (который определяется столбцом с наибольшим содержимым), и любое дополнительное пространство, созданное дополнением, обрезается как переполнение. Это не имеет большого смысла, я знаю...
<div id="wrapper">
<div id="col1">Content</div>
<div id="col2">Longer Content</div>
</div>
#wrapper {
overflow: hidden;
}
#col1, #col2 {
padding-bottom: 9999px;
margin-bottom: -9999px;
}
Обязательно прочитайте всю статью, к которой я привязан, есть ряд предостережений и другие проблемы с реализацией. Это не довольно техника, но она работает достаточно хорошо.
Ответ 4
Вы можете сделать это в jQuery очень просто, но я не уверен, что JS следует использовать для таких вещей. Лучший способ - сделать это с чистым css.
-
Взгляните на faux columns или даже Столбцы флюидных фейсов
-
Также другой метод (не работает на прекрасном IE6) заключается в позиции: относительно родительского контейнера. Детский контейнер (навигационный список в вашем случае) должен быть абсолютным и вынужден занимать все пространство "сверху: 0; внизу: 0; '
Ответ 5
Это одна из тех вполне разумных и простых вещей, которые CSS не может сделать. Искусственные колонны, как предложил Сильвиу, являются хакерским, но функциональным обходным решением.
Было бы прекрасно, если когда-нибудь был способ сказать
div.foo {
height: $(div.blah.height);
}
Ответ 6
Этот может выполняться с помощью 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>Untitled Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
font-family: Arial, Helvetica, sans-serif;
background: #87ceeb;
font-size: 1.2em;
}
#container {
width:100%; /* any width including 100% will work */
color: inherit;
margin:0 auto; /* remove if 100% width */
background:#FFF;
}
#header {
width: 100%;
height: 160px;
background: #1e90ff;
}
#content {/* use for left sidebar, menu etc. */
background: #99C;
color: #000;
float: right;/* float left for right sidebar */
margin: 0 0 0 -200px; /* adjust margin if borders added */
width: 100%;
}
#content .wrapper {
background: #FFF;
margin: 0 0 0 200px;
overflow: hidden;
padding: 10px; /* optional, feel free to remove */
}
#sidebar {
background: #99C;
color: inherit;
float: left;
width: 180px;
padding: 10px;
}
.clearer {
height: 1px;
font-size: -1px;
clear: both;
}
/* content styles */
#header h1 {
padding: 0 0 0 5px;
}
#menu p {
font-size: 1em;
font-weight: bold;
padding: 5px 0 5px 5px;
}
#footer {
clear: both;
border-top: 1px solid #1e90ff;
border-bottom: 10px solid #1e90ff;
text-align: center;
font-size: 50%;
font-weight: bold;
}
#footer p {
padding: 10px 0;
}
</style>
</head>
<body>
<div id="container">
<!--header and menu content goes here -->
<div id="header">
<h1>Header Goes Here</h1>
</div>
<div id="content">
<div class="wrapper">
<!--main page content goes here -->
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis ligula lorem, consequat eget, tristique nec, auctor quis, purus. Vivamus ut sem. Fusce aliquam nunc
vitae purus. Aenean viverra malesuada libero. </p>
</div>
</div>
<div id="sidebar">
<!--sidebar content, menu goes here -->
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis ligula lorem, consequat eget, tristique nec, auctor quis, purus.</p>
</div>
<div class="clearer"></div><!--clears footer from content-->
<!--footer content goes here -->
<div id="footer">
<p>Footer Info Here</p>
</div>
</div>
</body>
</html>
Ответ 7
@hoyhoy
Если дизайнер может сделать эту работу в html, тогда он может иметь этот дизайн. Если он является настоящим мастером веб-дизайна, он поймет, что это ограничение средств массовой информации, поскольку видео невозможно в журнальных объявлениях.
Если он хотел бы имитировать вес, придав двум столбцам равную важность, чем изменить границы, чтобы они выглядели одинакового веса и делали цвета границ контрастными с цветом шрифта столбцов.
Но для того, чтобы физические элементы были одинаковой высоты, вы можете сделать это только с помощью конструкции таблицы или установки высоты в этот момент времени. Чтобы имитировать их с одинаковым размером, они не должны быть одинакового размера.
Ответ 8
Подумайте об этом, я никогда не делал этого с нижней границей столбца. Вероятно, он просто переполнен и обрезается. Возможно, вы захотите, чтобы нижняя граница появилась из отдельного элемента, который является частью содержимого столбца.
Во всяком случае, я знаю, что это не идеальное решение для волшебной пули. Вам просто нужно сыграть с ним или взломать его недостатки.
Ответ 9
Существует также решение на основе Javascript. Если у вас есть jQuery, вы можете использовать следующий плагин.
<script type="text/javascript">
// plugin
jQuery.fn.equalHeights=function() {
var maxHeight=0;
this.each(function(){
if (this.offsetHeight>maxHeight) {maxHeight=this.offsetHeight;}
});
this.each(function(){
$(this).height(maxHeight + "px");
if (this.offsetHeight>maxHeight) {
$(this).height((maxHeight-(this.offsetHeight-maxHeight))+"px");
}
});
};
// usage
$(function() {
$('.column1, .column2, .column3').equalHeights();
});
</script>
Ответ 10
Я использую это для выравнивания двух столбцов с идентификатором "центр" и "справа":
var c = $("#center");
var cp = parseInt(c.css("padding-top"), 10) + parseInt(c.css("padding-bottom"), 10) + parseInt(c.css("borderTopWidth"), 10) + parseInt(c.css("borderBottomWidth"), 10);
var r = $("#right");
var rp = parseInt(r.css("padding-top"), 10) + parseInt(r.css("padding-bottom"), 10) + parseInt(r.css("borderTopWidth"), 10) + parseInt(r.css("borderBottomWidth"), 10);
if (c.outerHeight() < r.outerHeight()) {
c.height(r.height () + rp - cp);
} else {
r.height(c.height () + cp - rp);
}
Надеюсь, что это поможет.
Ответ 11
Чтобы увеличить левое меню div с той же высотой, что и до нужного содержимого div.
<!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>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function () {
var height = $(document).height(); //optionally, subtract some from the height
$("#menu").css("height", (height) + "px");
$("#content").css("height", (height) + "px");
});
</script>
<style type="text/css">
<!--
html, body {
font-family: Arial;
font-size: 12px;
}
#header {
background-color: #F9C;
height: 200px;
width: 100%;
float: left;
position: relative;
}
#menu {
background-color: #6CF;
float: left;
min-height: 100%;
height: auto;
width: 10%;
position: relative;
}
#content {
background-color: #6f6;
float: right;
height: auto;
width: 90%;
position: relative;
}
#footer {
background-color: #996;
float: left;
height: 100px;
width: 100%;
position: relative;
}
-->
</style>
</head>
<body>
<div id="header">
i am a header
</div>
<div id="menu">
i am a menu
</div>
<div id="content">
I am an example of how to do layout with css rules and divs.
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
<p> I am an example of how to do layout with css rules and divs. </p>
</div>
<div id="footer">
footer
</div>
</body>
</html>