题目:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px;中间自适应。
屏幕快照 2018-03-25 上午11.28.45.png我这边总结了五种方法,如有不正确,欢迎批评指正~
- 浮动
- 绝对定位
- flex布局
- 表格布局
- 网格布局
一、浮动
<section class="layout float">
<style media="screen">
html * {
margin: 0;
padding: 0;
}
.layout article div {
min-height: 100px;
}
.layout.float .left {
float: left;
background: red;
width: 300px;
}
.layout.float .right {
float: right;
background: blue;
width: 300px;
}
.layout.float .center {
background: yellow;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="right"></div>
<div class="center">
<h2>浮动布局</h2>
1、浮动布局左右固定宽度,中间自适应
2、浮动布局左右固定宽度,中间自适应
</div>
</article>
</section>
二、绝对定位
<section class="layout position">
<style media="screen">
html * {
margin: 0;
padding: 0;
}
.layout article div {
min-height: 100px;
}
.layout.position .left-center-right>div {
position: absolute;
}
.layout.position .left {
left: 0;
width: 300px;
background: red;
}
.layout.position .right {
right: 0;
width: 300px;
background: blue;
}
.layout.position .center {
left: 300px;
right: 300px;
background: yellow;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>绝对定位</h2>
1、定位布局左右固定宽度,中间自适应
2、定位布局左右固定宽度,中间自适应
</div>
<div class="right"></div>
</article>
</section>
三、flex布局
<section class="layout flex">
<style>
html * {
margin: 0;
padding: 0;
}
.layout article div {
min-height: 100px;
}
.layout.flex .left-center-right {
display: flex;
}
.layout.flex .left {
width: 300px;
background: red;
}
.layout.flex .center {
flex: 1;
background: yellow;
}
.layout.flex .right {
width: 300px;
background: blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>flex布局</h2>
1、flex布局左右固定宽度,中间自适应
2、flex布局左右固定宽度,中间自适应
</div>
<div class="right"></div>
</article>
</section>
四、表格布局
<section class="layout table">
<style>
html * {
margin: 0;
padding: 0;
}
.layout article div {
min-height: 100px;
}
.layout.table .left-center-right {
display: table;
height: 100px;
}
.layout.table .left-center-right>div {
display: table-cell;
}
.layout.table .left {
background: red;
width: 300px;
}
.layout.table .center {
background: yellow;
}
.layout.table .right {
background: blue;
width: 300px;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>tabale布局</h2>
1、table布局左右固定宽度,中间自适应
2、table布局左右固定宽度,中间自适应
</div>
<div class="right"></div>
</article>
</section>
五、网格布局
<section class="layout grid">
<style media="screen">
html * {
margin: 0;
padding: 0;
}
.layout article div {
min-height: 100px;
}
.layout.grid .left-center-right {
display: grid;
width: 100%;
grid-template-rows: 100px;
grid-template-columns: 300px auto 300px;
}
.layout.grid .left {
background: red;
}
.layout.grid .center {
background: yellow;
}
.layout.grid .right {
background: blue;
}
</style>
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>网格布局</h2>
1、网格布局左右固定宽度,中间自适应
2、网格布局左右固定宽度,中间自适应
</div>
<div class="right"></div>
</article>
</section>
总结
- 这五种解决方案各自的优缺点;
- 浮动:缺点浮动是脱离文档流的,需要做清浮动处理;优点是兼容性很好。
- 绝对定位:缺点是布局脱离文档流,子元素也必须脱离文档流,可使用用性比较差;优点是快捷,不容易出问题。
- flex布局:为解决以上两种布局方式的不足而出现的,比较完美,现在移动端基本都属于flex布局。
- 表格布局:缺点是操作繁琐,对seo也不友好,当其中一个单元格的高度变大时,其他单元格的高度也会随之变大,优点是兼容性非常好。
- 网格布局:缺点是新出的技术,低版本浏览器兼容性不是很好,优点是可以做许多复杂的事情,但是代码量要简化的多。
- 当高度不定时,两侧的高度也跟这中间的高度撑开,以上五种有哪几种可以继续用,哪几种不能用了;
<article class="left-center-right">
<div class="left"></div>
<div class="center">
1、网格布局左右固定宽度,中间自适应
2、网格布局左右固定宽度,中间自适应
<p>增加高度</p>
<p>增加高度</p>
<p>增加高度</p>
<p>增加高度</p>
<p>增加高度</p>
<p>增加高度</p>
</div>
<div class="right"></div>
</article>
- 通过看效果:浮动和绝对定位以及网格布局是不能用的,flex布局和表格布局可以继续使用。
- 在这个面试过程中一定要说出哪个能用,哪个不能用,以及不能用的原因。
- 浮动可以延伸到BFC,可以去了解BFC相关的知识;
- 兼容性;如果现在要在业务中实现,你觉得最优选择时哪种;
页面布局小结
- 语义化掌握要到位
- 页面布局理解深刻
- CSS基础知识扎实
- 思维灵活且积极上进(对新技术的了解,如网格布局)
- 代码书写规范
网友评论