CSS 两列布局(左边宽度固定,右边自适) 的6种方案

  8月1日晚上做了网易的内推练习题,其中有一道题是写出两种两列布局的方案,所以考完后就搜了下,总结至少有六种。

html代码: 

<div class="parent">
	<div class="left">left</div>
	<div class="right">right</div>
</div>

方案一:table布局  

css代码:

.parent{
	width: 100%;
	height: 300px;
	display: table;
}
.left{
	width:180px;
	height: 300px;
	background-color: red;
	display: table-cell;
}
.right{
	height: 300px;
	background-color: blue;
	display: table-cell;
}

  效果:

  也可以为单元格增加间距:

.parent{
	width: 100%;
	height: 300px;
	display: table;
	border-collapse: separate;
	border-spacing: 10px;
}

  效果:

方案二:flex布局

  (推荐阮一峰的http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html)  

.parent{
	width: 100%;
	height: 300px;
	display: flex;
}
.left{
	width:180px;
	height: 300px;
	background-color: red;
	margin-right: 10px;
}
.right{
	height: 300px;
	background-color: blue;
	flex: 1;
}

  效果:

  

方案三:calc

  这边需要改一下html代码:

<div class="parent">
	<div class="left">left</div><div class="right">right</div>
</div>

  区别在哪里呢?就是两个div之间没有空格也没有换行。

  css代码:

.parent{
	width: 100%;
	height: 300px;
}
.left{
	width:180px;
	height: 300px;
	background-color: red;
	margin-right: 10px;
	display: inline-block;
}
.right{
	height: 300px;
	background-color: blue;
	width: calc(100% - 190px);
	display: inline-block;
}

  效果:

  为什么要更改html代码呢?就是因为如果你的html中一系列元素每个元素之间都换行了,当你对这些元素设置inline-block时,这些元素之间就会出现空白。

方案四:父元素相对定位、内边距 + 子元素绝对定位 + 子元素默认

  css代码:

.parent{
	width: 100%;
	height: 300px;
	position: relative;
	padding-left: 190px;
}
.left{
	position: absolute;
	top:0;
	left: 0;
	width:180px;
	height: 300px;
	background-color: red;
}
.right{
	height: 300px;
	background-color: blue;
}

  效果:

  

方案五:父元素相对定位 + 子元素绝对定位 + 子元素外边距

  css代码:

.parent{
	width: 100%;
	height: 300px;
	position: relative;
}
.left{
	position: absolute;
	top:0;
	left: 0;
	width:180px;
	height: 300px;
	background-color: red;
}
.right{
	margin-left: 190px;
	height: 300px;
	background-color: blue;
}

   效果:

方案六:利用BFC

.parent{
	width: 100%;
	height: 300px;
}
.left{
	float: left;
	width:180px;
	height: 300px;
	background-color: red;
}
.right{
	overflow: hidden;
	zoom:1;
	height: 300px;
	background-color: blue;
}

  效果:  

posted @ 2016-08-03 16:58  一个悬浮在空中的胖子  阅读(1343)  评论(0编辑  收藏  举报