一、float浮动
两列布局可以使用浮动来完成,左列设置左浮动,右列设置右浮动,或者向同一个方向浮动。
当元素使用了浮动之后,会对周围的元素造成影响,那么就需要清除浮动,通常使用两种方法:
- 给受到影响的元素设置 clear:both,即清除元素两侧的浮动,也可以设置具体清除哪一侧的浮动:clear:left 或 clear:right,但必须清楚的知道到底是哪一侧需要清除浮动的影响。
- 给浮动的父容器设置宽度,或者为 100%,同时设置 overflow:hidden,溢出隐藏也可以达到清除浮动的效果。
1、宽度自适应的两列布局
只需要将宽度按照百分比来设置,这样当浏览器窗口调整时,内容会根据窗口的大小,按照百分比来自动调节内容的大小。
<style>.main-left{ ???width:30%; ???height:800px; ???background:red; ???float:left;}.main-right{ ???width:70%; ???height:800px; ???background:pink; ???float:right;}#footer{ ???clear:both; ?????/*清除浮动,给受到影响的元素设置 clear*/ ???height:50px; ???background:gray;}</style><body><div class="main-left">左列</div><div class="main-right">右列</div><div id="footer">页脚</div></body>
2、固定宽度两列布局
只需要把左右两列包裹起来,也就是给他们增加一个父容器,然后固定父容器的宽度,父容器的宽度固定了,那么这两列就可以设置具体的像素宽度了,这样就实现了固定宽度的两列布局。
<style>#main{ ?????????/*清除浮动:给浮动的父容器设置宽度,同时设置 overflow:hidden*/ ???width:960px; ???margin:0 auto; ???overflow:hidden; ???????}#main .main-left{ ???width:288px; ???height:800px; ???background:red; ???float:left;}#main .main-right{ ???width:672px; ???height:800px; ???background:pink; ???float:right;}#footer{ ???width:960px; ???height:50px; ???background:gray; ???margin:0 auto;}</style><body><div id="main"> ???<div class="main-left">左列</div> ???<div class="main-right">右列</div></div><div id="footer">页脚</div></body>
3、两列居中自适应布局
只需要给定父容器的宽度,然后让父容器水平居中。
<style>#main{ ?????????/*清除浮动:给浮动的父容器设置宽度,同时设置 overflow:hidden*/ ???width:80%; ???margin:0 auto; ???overflow:hidden; ???????}#main .main-left{ ???width:20%; ???height:800px; ???background:red; ???float:left;}#main .main-right{ ???width:80%; ???height:800px; ???background:pink; ???float:right;}#footer{ ???width:80%; ???height:50px; ???background:gray; ???margin:0 auto;}</style><body><div id="main"> ???<div class="main-left">左列</div> ???<div class="main-right">右列</div></div><div id="footer">页脚</div></body>
二、position:absolute
<div class="content"> ???????<div class="left"> ???????????<p>Hello</p> ???????????<p>I‘am left</p> ???????</div> ???????<div class="right"> ???????????<p>Hi</p> ???????????<p>I‘am right</p> ???????</div></div>
.content{ ???position: relative; ???width: 100%; ???height: 500px; ???border: 1px solid #000;}.left{ ???background:#fcc; ???width: 200px; ???position: absolute;}.right{ ???background: #f66; ???position: absolute; ???left: 210px;}
结果为:
但是右边的div并没有自适应,则需要加上下述代码来达到自适应的效果:就是同时设置left和right的值
.right{ ???right:0;}
三、flex
flex布局本来就是设计来自适应的,只需要用上flex: 1;
,就能让.right分到.parent的宽度减去.left的宽度。
<div class="parent"> ???<div class="left"></div> ???<div class="right"></div></div><style>.parent{ ???display: flex;}.left{ ???margin-right: 20px;}.right{ ???flex: 1;}</style>
四、float+BFC
这个方法主要是应用到BFC的一个特性:
- 浮动元素的块状兄弟元素会无视浮动元素的位置,尽量占满一整行,这样该兄弟元素就会被浮动元素覆盖。
- 若浮动元素的块状兄弟元素为BFC,则不会占满一整行,而是根据浮动元素的宽度,占据该行剩下的宽度,避免与浮动元素重叠。
- 浮动元素与其块状BFC兄弟元素之间的margin可以生效,这将继续减少兄弟元素的宽度。
<div class="parent"> ???<div class="left"></div> ???<div class="right"></div></div><style>.left{ ???float: left; ???width: 100px; ???margin-right: 20px; ???//形成20px的间隔}.right{ ???overflow: hidden; //通过设置overflow: hidden来触发BFC特性}</style>
并不是一定要在.right上用overflow: hidden;,只要能触发BFC就好了。
由于.right的宽度是自动计算的,不需要设置任何与.left宽度相关的css,因此.left的宽度可以不固定(由内容盒子决定)。
CSS两列布局
原文地址:https://www.cnblogs.com/lmjZone/p/8523618.html