在CSS中,我可以执行以下操作:
但是我不知道如何将其更改为:
CSS有可能吗?
如果是,如何在不显式指定高度的情况下做到这一点(让内容增加)?
Answers:
如今,我更喜欢使用网格,因为它允许将所有布局声明保留在父级上,并且默认情况下为您提供等宽的列:
.row {
display: grid;
grid-auto-flow: column;
gap: 5%;
}
.col {
border: solid;
}
<div class="row">
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div>
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.</div>
</div>
如果希望孩子控制列宽,请使用Flexbox:
.row {
display: flex;
justify-content: space-between;
}
.col {
flex-basis: 30%;
box-sizing: border-box;
border: solid;
}
<div class="row">
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div>
<div class="col">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.</div>
</div>
这是本文使用的完整CSS。当作者逐步研究完成这项工作所需的内容时,非常值得阅读整篇文章。
#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;
}
这不是执行此操作的唯一方法,但这可能是我遇到的最优雅的方法。
还有另一个以这种方式完全完成的网站,查看源代码将使您看到他们的工作方式。
给overflow: hidden
容器加上大(且相等)的负边距,并给列填充正数。请注意,此方法存在一些问题,例如锚链接在您的布局中将不起作用。
<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;
}
您可以使用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>
display:table
-如果您不使用显式表,行和单元格(例如,使用匿名元素,则其他人都会遇到问题(digital-web.com/articles/everything_you_know_about_CSS_Is_wrong) ,等等)
您可以使用以下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;
};
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;
}
现场示例在这里。
repeat(auto-fit, minmax(200px, 1fr));
零件设置列的宽度。每列占用可用空间的一小部分,但不能少于200像素。而不是缩小到200px以下,而是在下面进行环绕,因此它甚至可以做出响应。您还可以具有任意数量的列,而不仅仅是3列。它们都非常适合。
如果您只需要3列,请grid-template-columns: repeat(3, 1fr);
改用。您仍然可以有更多的元素,它们可以环绕,响应,但始终放置在3列布局中。
它干净,可读,可维护,灵活并且使用起来也很简单!
另一个选择是使用已解决此问题的框架。Bootstrap当前没有等高选项,而Zurb Foundation则具有,但您可以在此处查看其工作方式: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,则会添加更多代码,但是如果您已经在使用框架,则他们已经解决了这一问题。
快乐的编码。
使用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>
回答:
CSS flexbox很可爱,但是今天淘汰IE9用户有点疯狂。自2015年8月1日起在我们的酒店住宿:
3%IE9
2%IE8
删除这些内容会显示5%的损坏页面?疯。
使用媒体查询引导的方式做追溯到IE8一样display: table/table-cell
。所以:
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窗格的趋势非常小。混乱的窗口大小,您会看到各列很好地重新排列,包括当它们需要成为列时可以拉伸到全高,这样它们的背景色就不会在页面的下半部分被切掉。没有疯狂的填充/边距hack会崩溃到页面上的后续标签中,也不会将5%的访问者抛向狼群。
这是我刚刚在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