定宽与自适应 概念: 一列指定宽度后不再修改,另一列自动适应。
其实定宽是相对来说的,它的宽度初始值可以为100px 200px 等待宽度。另一半则自适应。
文章图片
一, float + margin
1.左列浮动,设置宽度。此时如图所示,会被环绕
文章图片
2.去除环绕效果的方式
文章图片
3.添加间距
文章图片
这个方案的优点在于容易理解
但缺点是在IE6下有BUG。
还有就是右列中的子元素清除浮动时位置会处于left元素之下。
以下是相应的解决方式。
IE6下面的BUG: 【布局方案之-多列布局】代码里没有float的.right这一列中的文字会产生三个像素的偏差。文字会向里面缩进三个像素。
解决这个bug的方式是在.left中增加一个margin-right: -100px
子元素清除浮动导致的问题处理 1.给自适应的右列包裹一个盒子.right-fix 并设置相应属性值。
但此时会被放在left浮动元素下。需要处理。
![布局方案之-多列布局](https://img.it610.com/image/info8/6629e28d8f3e4dec8f1cab7f7e7c7ea0.jpg)
文章图片
2. 添加负边距属性。但此时left区域是无法选中的,因为被.right-fix覆盖着。因为在结构中.left放在了.right-fix前面。需要提高.left层级
![布局方案之-多列布局](https://img.it610.com/image/info8/2333f09544d84b17bc126dd106845e6b.jpg)
文章图片
3. 最终代码。
![布局方案之-多列布局](https://img.it610.com/image/info8/9f71775c0f2e43338ef0e2af0c132293.jpg)
文章图片
优点在于兼容性好,能兼容IE6及以上。
缺点在于:样式多一点,多一个结构
最终的实现代码
![布局方案之-多列布局](https://img.it610.com/image/info8/5d4c8f420a0845158ffe6f4102ab1f1b.jpg)
文章图片
二,float + overflow
注: 元素设置overflow: hidden会触发一个BFC模式。
代码实现如下图
![布局方案之-多列布局](https://img.it610.com/image/info8/ded3a0741d7a4560b68ed17b8e6732bb.jpg)
文章图片
优点:代码简单
缺点:在IE6下是不支持的。
table
![布局方案之-多列布局](https://img.it610.com/image/info8/9d27c9a2ad704ed1bdf797d4dfbeaaa0.jpg)
文章图片
代码解释
display: table;
width:100%;
//table属性的宽度默认是根据内容的宽度决定。所以为了充满父容器,使用width: 100%;
table-layout: fixed;
//增加渲染速度,并布局优先。并使table-cell表格充满。
flex
1.
![布局方案之-多列布局](https://img.it610.com/image/info8/99d783df06874cae8c451f176471d9a3.jpg)
文章图片
2.
![布局方案之-多列布局](https://img.it610.com/image/info8/368d1b4967de46e1807826627a1a8eb9.jpg)
文章图片
3.
![布局方案之-多列布局](https://img.it610.com/image/info8/6d29e699f74644f3a0d25351d19fc0bd.jpg)
文章图片
flex是css3中新增的布局。兼容性不是很好。性能方面也不一定。适合做小范围内的布局。
例子–三列之两列定宽,一列自适应
![布局方案之-多列布局](https://img.it610.com/image/info8/e4ff4a804c164f70a882416e32783318.jpg)
文章图片
不定宽与自适应 概念:前面讲过定宽与自适应,而这里的不定宽是指初始值定好宽度,之后再修改宽度值也可以,另一列自适应。
float + overflow
这种方式不兼容IE6
这个方法和上面的定宽与自适应是一样的。因为这个在.left元素宽度值改变时,右侧元素自适应。
![布局方案之-多列布局](https://img.it610.com/image/info8/7678814979524f8298dd675f76f79750.jpg)
文章图片
把.left的宽度改为200px,一样能自适应
![布局方案之-多列布局](https://img.it610.com/image/info8/e784ace556dd4632bf885bcb183368ea.jpg)
文章图片
当然,还可以把.left元素宽度去掉,根据内容宽度
![布局方案之-多列布局](https://img.it610.com/image/info8/74be8326a8f54793a689041a63b8dafc.jpg)
文章图片
table
这种模式IE6是不支持的,因为不支持display: table这种属性。
table也可以实现,变动定宽值时自适应。
![布局方案之-多列布局](https://img.it610.com/image/info8/053d40a69fae47a3928bc795e5eb0390.jpg)
文章图片
如果要根据内容来填充定宽的宽度,如下
![布局方案之-多列布局](https://img.it610.com/image/info8/91f0896cdce7404bab09b0ac1b315db2.jpg)
文章图片
flex
![布局方案之-多列布局](https://img.it610.com/image/info8/a6fdb5796b5446a3a6665e2ae58d7535.jpg)
文章图片
例子
![布局方案之-多列布局](https://img.it610.com/image/info8/986ffee74b3f421eb37489235f28fda9.jpg)
文章图片
![布局方案之-多列布局](https://img.it610.com/image/info8/1bdc2a07fe4b409d8fd7e28cf1135f31.jpg)
文章图片
其中宽度由内容决定。
等分 每列宽度一样,间距一样。
一,float
![布局方案之-多列布局](https://img.it610.com/image/info8/db1bb837f8354a29bdc40103a19404ca.jpg)
文章图片
![布局方案之-多列布局](https://img.it610.com/image/info8/e313b203f1bb4d04a7d056c144d097cf.jpg)
文章图片
1.
![布局方案之-多列布局](https://img.it610.com/image/info8/52f649694ca14b2db65848bcb60778f0.jpg)
文章图片
2.
![布局方案之-多列布局](https://img.it610.com/image/info8/d5aa524297b144b1b4d90112a9b7b341.jpg)
文章图片
3.
![布局方案之-多列布局](https://img.it610.com/image/info8/85dd31f9c64442338e09d9108960687a.jpg)
文章图片
总结:兼容IE6,7方面因为对百分比的四舍五入问题,所以有小瑕疵。IE8及以上没问题。
然后就是,因为样式和结构耦合,如果修改结构中列数,相应的要修改样式中的width的百分比数值。这个个问题可以用table解决。如下的
二,table。
二,table
注意:table中是没发使用margin的,但padding有效。
因为table没发使用margin属性,所以不能通过margin的负值在原来宽度的基础上增加。所以可以考虑用一个div包裹。之后div元素使用margin.
![布局方案之-多列布局](https://img.it610.com/image/info8/216832535ac04c01a0c5766d80ef0ff0.jpg)
文章图片
由于table属性的元素的宽度默认是根据内容宽度来的。
所以在上面要设置width:100%;
table-layout: fixed;有两个特性:1.布局优先。2.如果表格没有设置宽度,默认平分父元素的宽度。
总结:这样的话,上面的代码中样式和结构的耦合被解开。所以更改定宽的列数之后也不用修改样式中的参数。
flex
![布局方案之-多列布局](https://img.it610.com/image/info8/c71a3bc36e5445d2bd40873d199dc316.jpg)
文章图片
总结:但是兼容性。
等高 要求:不管两边内容的高度是否一致,两边高度要一致。
table
table属性中的表格们是天然等高的。
![布局方案之-多列布局](https://img.it610.com/image/info8/7b4cc514859d46f8b42bc69f476e4437.jpg)
文章图片
这里有个问题,就是我设置了背景色,而背景色默认是会在padding的范围内的,所以要然背景色只出现在content area区域。
实现了将背景区域限制在内容区后的图如下
![布局方案之-多列布局](https://img.it610.com/image/info8/12dcc7daf2be414ab2d2974476230dbb.jpg)
文章图片
flex
flex天然就等高
![布局方案之-多列布局](https://img.it610.com/image/info8/f051eaec52c74c678ea354aa57e7afb0.jpg)
文章图片
float
伪等高
![布局方案之-多列布局](https://img.it610.com/image/info8/f07c8fbc12d6407fa5920b357bc22464.jpg)
文章图片