3列布局 HTML/CSS

我有以下的 HTML 布局:

<div class="container">
<div class="column-center">Column center</div>
<div class="column-left">Column left</div>
<div class="column-right">Column right</div>
</div>

是否有机会仅使用 CSS 来排列下面示例网格 而不改变 HTML中的列?

----------------------------------------------------
|              |                   |               |
| Column left  |   Column center   | Column right  |
|              |                   |               |
----------------------------------------------------
312506 次浏览

像这样的东西应该可以做到:

.column-left{ float: left; width: 33.333%; }
.column-right{ float: right; width: 33.333%; }
.column-center{ display: inline-block; width: 33.333%; }

演示

剪辑

为了使用更多的列来实现这一点,您可以构建一个非常简单的网格系统。例如,这样的东西应该适用于五栏布局:

.column {
float: left;
position: relative;
width: 20%;
  

/*for demo purposes only */
background: #f2f2f2;
border: 1px solid #e6e6e6;
box-sizing: border-box;
}


.column-offset-1 {
left: 20%;
}
.column-offset-2 {
left: 40%;
}
.column-offset-3 {
left: 60%;
}
.column-offset-4 {
left: 80%;
}


.column-inset-1 {
left: -20%;
}
.column-inset-2 {
left: -40%;
}
.column-inset-3 {
left: -60%;
}
.column-inset-4 {
left: -80%;
}
<div class="container">
<div class="column column-one column-offset-2">Column one</div>
<div class="column column-two column-inset-1">Column two</div>
<div class="column column-three column-offset-1">Column three</div>
<div class="column column-four column-inset-2">Column four</div>
<div class="column column-five">Column five</div>
</div>

或者,如果你足够幸运,能够只支持现代浏览器,你可以使用 一个 href = “ https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flex _ box”rel = “ noReferrer”> 灵活的盒子 :

.container {
display: flex;
}


.column {
flex: 1;
    

/*for demo purposes only */
background: #f2f2f2;
border: 1px solid #e6e6e6;
box-sizing: border-box;
}


.column-one {
order: 3;
}
.column-two {
order: 1;
}
.column-three {
order: 4;
}
.column-four {
order: 2;
}
.column-five {
order: 5;
}
<div class="container">
<div class="column column-one">Column one</div>
<div class="column column-two">Column two</div>
<div class="column column-three">Column three</div>
<div class="column column-four">Column four</div>
<div class="column column-five">Column five</div>
</div>

.container{
height:100px;
width:500px;
border:2px dotted #F00;
border-left:none;
border-right:none;
text-align:center;
}
.container div{
display: inline-block;
border-left: 2px dotted #ccc;
vertical-align: middle;
line-height: 100px;
}
.column-left{ float: left; width: 32%;  height:100px;}
.column-right{ float: right; width: 32%;  height:100px; border-right: 2px dotted #ccc;}
.column-center{ display: inline-block; width: 33%; height:100px;}


<div class="container">
<div class="column-left">Column left</div>
<div class="column-center">Column center</div>
<div class="column-right">Column right</div>
</div>

看看这个链接 http://jsfiddle.net/bipin_kumar/XD8RW/2/

对于@easwee 而言,这个问题不那么重要,但对于其他可能有同样问题的人而言,这个问题更重要:

如果不需要对 IE < 10的支持,可以使用 Flexbox。这是一个令人兴奋的 CSS3属性,不幸的是,它在几个不同的版本中都实现了; 添加了厂商前缀,获得良好的跨浏览器支持突然需要更多的属性。

按照目前的最终标准,你将完成

.container {
display: flex;
}


.container div {
flex: 1;
}


.column_center {
order: 2;
}

就是这样。如果你想要支持像 iOS6,Safari < 6,Firefox 19或 IE10这样的老版本的实现,那么这个功能就会发展成为

.container {
display: -webkit-box;      /* OLD - iOS 6-, Safari 3.1-6 */
display: -moz-box;         /* OLD - Firefox 19- (buggy but mostly works) */
display: -ms-flexbox;      /* TWEENER - IE 10 */
display: -webkit-flex;     /* NEW - Chrome */
display: flex;             /* NEW, Spec - Opera 12.1, Firefox 20+ */
}


.container div {
-webkit-box-flex: 1;      /* OLD - iOS 6-, Safari 3.1-6 */
-moz-box-flex: 1;         /* OLD - Firefox 19- */
-webkit-flex: 1;          /* Chrome */
-ms-flex: 1;              /* IE 10 */
flex: 1;                  /* NEW, Spec - Opera 12.1, Firefox 20+ */
}


.column_center {
-webkit-box-ordinal-group: 2;   /* OLD - iOS 6-, Safari 3.1-6 */
-moz-box-ordinal-group: 2;      /* OLD - Firefox 19- */
-ms-flex-order: 2;              /* TWEENER - IE 10 */
-webkit-order: 2;               /* NEW - Chrome */
order: 2;                       /* NEW, Spec - Opera 12.1, Firefox 20+ */
}

JsFiddle 演示

这里有一篇关于 Flexbox 跨浏览器支持的优秀文章: 使用 Flexbox: 新旧混合

CSS:

.container {
position: relative;
width: 500px;
}
.container div {
height: 300px;
}


.column-left {
width: 33%;
left: 0;
background: #00F;
position: absolute;
}
.column-center {
width: 34%;
background: #933;
margin-left: 33%;
position: absolute;
}
.column-right {
width: 33%;
right: 0;
position: absolute;
background: #999;
}

HTML:

<div class="container">
<div class="column-center">Column center</div>
<div class="column-left">Column left</div>
<div class="column-right">Column right</div>
</div>

这是演示: http://jsfiddle.net/nyitsol/f0dv3q3z/

CSS:

     .container div{
width: 33.33%;
float: left;
height: 100px ;}

清除列后的浮动

 .container:after {
content: "";
display: table;
clear: both;}