答案 0 :(得分:48)
如果您在2013年末阅读此内容,则可以使用flexbox。假设这个布局:
<div class="row">
<div class="col">...</div>
<div class="col">...</div>
<div class="col">...</div>
</div>
对于flexbox,相等高度的列只是一个声明:
.row {
display: flex; /* equal height of the children */
}
.col {
flex: 1; /* additionally, equal width */
}
浏览器支持:http://caniuse.com/flexbox;演示:http://jsfiddle.net/7L7rS/
如果您仍需要支持IE 8或9,则必须使用表格布局:
.row {
display: table;
}
.col {
display: table-cell;
width: 33.33%; /* depends on the number of columns */
}
答案 1 :(得分:16)
这是文章使用的完整CSS。值得reading the entire article,因为作者会逐步了解您需要做些什么。
#container3 {
float:left;
width:100%;
background:green;
overflow:hidden;
position:relative;
}
#container2 {
float:left;
width:100%;
background:yellow;
position:relative;
right:30%;
}
#container1 {
float:left;
width:100%;
background:red;
position:relative;
right:40%;
}
#col1 {
float:left;
width:26%;
position:relative;
left:72%;
overflow:hidden;
}
#col2 {
float:left;
width:36%;
position:relative;
left:76%;
overflow:hidden;
}
#col3 {
float:left;
width:26%;
position:relative;
left:80%;
overflow:hidden;
}
这不是唯一的方法,但这可能是我遇到过的最优雅的方法。
还有另一个网站以这种方式完成,viewing the source will allow you to see how they did it。
答案 2 :(得分:10)
将overflow: hidden
提供给容器,将大(等)负边距和正填充添加到列。 Note that this method has some problems, e.g. anchor links won't work within your layout.
<div class="container">
<div class="column"></div>
<div class="column"></div>
<div class="column"></div>
</div>
.container {
overflow: hidden;
}
.column {
float: left;
margin-bottom: -10000px;
padding-bottom: 10000px;
}
答案 3 :(得分:4)
您可以使用以下JavaScript轻松完成此操作:
$(window).load(function() {
var els = $('div.left, div.middle, div.right');
els.height(getTallestHeight(els));
});
function getTallestHeight(elements) {
var tallest = 0, height;
for(i; i < elements.length; i++) {
height = $(elements[i]).height();
if(height > tallest)
tallest = height;
}
return tallest;
};
答案 4 :(得分:4)
您可以使用CSS表格,如下所示:
<style type='text/css">
.container { display: table; }
.container .row { display: table-row; }
.container .row .panel { display: table-cell; }
</style>
<div class="container">
<div class="row">
<div class="panel">...text...</div>
<div class="panel">...text...</div>
<div class="panel">...text...</div>
</div>
</div>
答案 5 :(得分:0)
你可以尝试一下......它适用于我和所有浏览器兼容...
<div id="main" style="width:800px; display:table">
<div id="left" style="width:300px; border:1px solid #666; display:table-cell;"></div>
<div id="right" style="width:500px; border:1px solid #666; display:table-cell;"></div>
</div>
答案 6 :(得分:0)
回答:
CSS flexbox很可爱,但今天淘汰IE9用户有点疯狂。关于我们截至2015年8月1日的房产:
3%IE9
2%IE8
削减这些显示5%的页面破损?疯狂。
使用媒体查询,与display: table/table-cell
一样,引导程序goes back to IE8 http://jsfiddle.net/b9chris/bu6Lejw6/。所以:
HTML
<div class=box>
<div class="col col1">Col 1<br/>Col 1</div>
<div class="col col2">Col 2</div>
</div>
CSS
body {
font: 10pt Verdana;
padding: 0;
margin: 0;
}
div.col {
padding: 10px;
}
div.col1 {
background: #8ff;
}
div.col2 {
background: #8f8;
}
@media (min-width: 400px) {
div.box {
display: table;
width: 100%;
}
div.col {
display: table-cell;
width: 50%;
}
}
在这种情况下,我使用400px作为列之间的切换和垂直布局,因为jsfiddle窗格趋势非常小。混乱的窗口大小,你会看到列很好地重新排列自己,包括拉伸到全高,当他们需要列,所以他们的背景颜色不会在页面的中途被切断。没有疯狂的填充/边距黑客攻击页面上的后续标签,也没有5%的访问者扔给狼。
答案 7 :(得分:0)
另一个选择是使用已解决此问题的框架。 Bootstrap目前没有相同的高度选项,但是Zurb的基金会有,你可以在这里看到它的工作原理:http://foundation.zurb.com/sites/docs/v/5.5.3/components/equalizer.html
以下是您如何使用它的示例:
<div class="row" data-equalizer>
<div class="large-6 columns panel" data-equalizer-watch>
</div>
<div class="large-6 columns panel" data-equalizer-watch>
</div>
</div>
基本上他们使用javascript来检查最高的元素并使其他元素具有相同的高度。
所以,如果你只想要css,这会添加更多代码,但如果你已经在使用框架,那么他们已经解决了这个问题。
快乐的编码。
答案 8 :(得分:0)
HTML:
<div class="container">
<div class="element">{...}</div>
<div class="element">{...}</div>
<div class="element">{...}</div>
</div>
CSS:
.container {
display: grid;
grid-gap: 10px;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
.element {
border: 2px solid #000;
}
实例是here。
repeat(auto-fit, minmax(200px, 1fr));
部分设置列宽。每列占用一小部分可用空间,但不能小于200px。而不是缩小到200px以下它包裹在下面,所以它甚至响应。你也可以拥有任意数量的专栏,而不仅仅是3.他们都很合适。
如果您只需要3列,请改用grid-template-columns: repeat(3, 1fr);
。您仍然可以拥有更多元素,它们将包装,响应,但总是放在3列布局中。
有关MDN或css-tricks上的CSS网格的更多信息。
它干净,易读,易于维护,灵活且易于使用!
答案 9 :(得分:0)
使用 Flexbox 创建高度相等的列
* {box-sizing: border-box;}
/* Style Row */
.row {
display: -webkit-flex;
-webkit-flex-wrap: wrap;
display: flex;
flex-wrap: wrap;
}
/* Make the columns stack on top of each other */
.row > .column {
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
/* When Screen width is 400px or more make the columns stack next to each other*/
@media screen and (min-width: 400px) {
.row > .column {
flex: 0 0 33.3333%;
max-width: 33.3333%;
}
}
<div class="row">
<!-- First Column -->
<div class="column" style="background-color: #dc3545;">
<h2>Column 1</h2>
<p>Some Text...</p>
<p>Some Text...</p>
</div>
<!-- Second Column -->
<div class="column" style="background-color: #ffc107;">
<h2>Column 2</h2>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
</div>
<!-- Third Column -->
<div class="column" style="background-color: #007eff;">
<h2>Column 3</h2>
<p>Some Text...</p>
<p>Some Text...</p>
<p>Some Text...</p>
</div>
</div>
答案 10 :(得分:-1)
以下是我在SASS中编写的一个示例,它具有可变的列间隙和列数量(变量):
CSS:
.fauxer * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box; }
.fauxer {
overflow: hidden; }
.fauxer > div {
display: table;
border-spacing: 20px;
margin: -20px auto -20px -20px;
width: -webkit-calc(100% + 40px);
width: -moz-calc(100% + 40px);
width: calc(100% + 40px); }
.fauxer > div > div {
display: table-row; }
.fauxer > div > div > div {
display: table-cell;
width: 20%;
padding: 20px;
border: thin solid #000; }
<div class="fauxer">
<div>
<div>
<div>
Lorem column 1
</div>
<div>
Lorem ipsum column 2 dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua.
</div>
<div>
Lorem column 3
</div>
<div>
Lorem column 4
</div>
<div>
Lorem column 5
</div>
</div>
</div>
</div>
注意:我只是在一些新的浏览器中找到了测试它的时间。请在使用之前进行测试:)
您可以在此处获取SCSS中的可编辑示例:JSfiddle