关于页面布局之前找了很多案例,当时是看懂了,但当让你写的时候发现自己视乎并不清楚他的原理,于是决定花些时间去整理一下关于页面布局的资料。主要分为俩列自适应布局,三列自适应布局,等高布局。
俩列布局: 左边固定,右边自适应
1.左边设置为浮动,右边不设浮动与宽度
* {
padding: 0;
margin: 0;
}
#main {
height: 800px;
background-color: yellow;
}
#left {
float: left;
width: 220px;
height: 500px;
background-color: red;
}
#right {
padding-left: 220px;/* margin-left: 220px;border-left: 220px solid; */
background-color: green;
height: 500px;
}
<div id="main">
<div id="left"></div>
<div id="right"></div>
</div>
原理: 在元素不设宽度的情况下: 若元素为普通流中元素,元素宽度等于父元素宽度; 若元素不在文档流中,元素宽度等于内容宽度;
2.左边设置为浮动,右边不设浮动但设置宽度为100%
* {
padding: 0;
margin: 0;
}
#main {
height: 800px;
background-color: yellow;
}
#left {
float: left;
width: 220px;
height: 500px;
background-color: red;
}
#right {
width: 100%;
padding-left: 220px;
box-sizing: border-box;
/* border-left: 220px solid;
box-sizing: border-box; */
background-color: green;
height: 500px;
}
<div id="main">
<div id="left"></div>
<div id="right"></div>
</div>
原理: 在元素宽度为100%的情况下: 若元素为普通流元素或者浮动元素,元素宽度为父元素宽度的100%;若元素为绝对定位元素,元素宽度为元素offset-parent宽度的100%;若元素为固定定位元素,元素宽度始终为body的100% 设置box-sizing(兼容性IE8+)使#right的宽度为原来的100%。
3.俩边都设置浮动时
* {
padding: 0;
margin: 0;
}
#main {
height: 800px;
background-color: yellow;
overflow: hidden;
width: 100%;
}
#left {
float: left;
width: 200px;
background-color: red;
height: 300px;
margin-right: -200px;
}
#right {
float: left;
width: 100%;
height: 300px;
border: 1px solid;
}
#rightContent {
margin-left: 200px;
height: 300px;
background-color: white;
}
<div id="main">
<div id="left"></div>
<div id="right">
<div id="rightContent">
</div>
</div>
</div>
原理: 1.首先将#left设置固定宽度并向左浮动,#right设置width: 100%; 并向左浮动。由于页面宽度限制#left与#right会处于俩行。 2.将#left设置css属性margin-right: -#left的宽度; 让其不占据原来的位置,此时的#left与#right处于同一行,但#right会覆盖掉#left。 3.设置#rightContent的margin-left: #left的宽度px。
三列布局: 左边右边固定,中间自适应
1.基本的布局方式
* {
padding: 0;
margin: 0;
}
#main {
width: 100%;
background-color: yellow;
overflow: hidden;
height: 500px;
}
#left {
float: left;
width: 150px;
background-color: red;
height: 300px;
margin-right: -150px;
}
#right {
float: left;
width: 200px;
background-color: green;
height: 300px;
margin-left: -200px;
}
#center {
float: left;
height: 300px;
width: 100%;
}
#centerContent {
height: 300px;
margin: 0 200px 0 150px;
background-color: white;
}
<div id="main">
<div id="left"></div>
<div id="center">
<div id="centerContent">
</div>
</div>
<div id="right"></div>
</div>
原理: 原理跟俩列布局的俩边都浮动的自适应相同 右边的定位使用了marin-left: -#left的宽度值; 原理与#right相同。
2.定位的方式布局
该方式简单,不做叙述。该方法不能实现等高布局,在设置定位的时候父元素要有高度,不能实现高度自适应。
三列布局: 左边中间固定,右边自适应
1.基本的布局方式
* {
padding: 0;
margin: 0;
}
#main {
width: 100%;
background-color: yellow;
overflow: hidden;
position: relative;
height: 500px;
}
#left {
width: 150px;
background-color: red;
height: 300px;
float: left;
margin-right: -150px;
}
#center {
width: 200px;
background-color: green;
height: 300px;
float: left;
position: relative;
left: 150px;
}
#right {
width: 100%;
float: left;
height: 300px;
}
#rightContent {
background-color: white;
margin-left: 350px;
height: 300px;
}
<div id="main">
<div id="left"></div>
<div id="center">
</div>
<div id="right">
<div id="rightContent">
</div>
</div>
</div>
原理: 原理跟俩列布局的俩边都浮动的自适应相同 但中间块#center的布局使用了绝对定位的方式
等高布局
1.基本的布局方式
* {
padding: 0;
margin: 0;
}
#main {
width: 100%;
background-color: yellow;
overflow: hidden;
}
#left {
float: left;
width: 150px;
background-color: red;
padding-bottom: 9999px;
margin-bottom: -9999px;
margin-right: -150px;
}
#right {
float: left;
width: 100%;
padding-bottom: 9999px;
margin-bottom: -9999px;
}
#rightContent {
margin-left: 150px;
background-color: green;
}
<div id="main">
<div id="left">aaaa</div>
<div id="right">
<div id="rightContent">
aaaa<br><br><br>aaaa
</div>
</div>
</div>
原理: 父元素#main不设高度设置overflow: hidden;,#left与#right设置css属性padding-bottom: 9999px; margin-bottom: -9999px;以上示例以俩列布局俩边均浮动为例,其余俩种俩列自适应方式及三列自适应均可实现。 使用定位的布局方式不可实现等高布局,使用定位布局的时候需要先给父级添加一个高度值
comments powered by Disqus