前端面试系列:页面布局之三栏布局

假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px;中间自适应。
  • 浮动
  <section class="layout float">
    <style media="screen">
      * {
        margin: 0;
        padding: 0;
      }
      .left-center-right div {
        min-height: 100px;
      }
      .left {
        float: left;
        background: red;
        width: 300px;
      }
      .right {
        float: right;
        background: blue;
        width: 300px;
      }
      .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;
      }
      .left-center-right div {
        position: absolute;
        min-height: 100px;
      }
      .left {
        left: 0;
        width: 300px;
        background: red;
      }
      .right {
        right: 0;
        width: 300px;
        background: blue;
      }
     .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;
      }
      .left-center-right div{
        min-height: 100px;
      }
      .left-center-right {
        display: flex;
      }
      .left {
        width: 300px;
        background: red;
        order: -1;
        /* order属性定义项目的排列顺序 数值越小 排列越靠前 默认为0 */     
      }
      .center {
        flex: 1;
        background: yellow;
      }
      .right {
        width: 300px;
        background: blue;
      }
    </style>
    <article class="left-center-right">
      <div class="center">
        <h2>flex布局</h2>
        1、flex布局左右固定宽度,中间自适应
        2、flex布局左右固定宽度,中间自适应
      </div>
      <div class="left"></div>
      <div class="right"></div>
    </article>
  </section>
  • 表格布局
  <section class="layout table">
    <style>
      html * {
        margin: 0;
        padding: 0;
      }
      .left-center-right {
        display: table;
        width: 100%;
        height: 100px;
      }
      .left-center-right div {
        display: table-cell;
        min-height: 100px;
      }
      .left {
        background: red;
        width: 300px;
      }
      .center {
        background: yellow;
      }
      .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;
      }
      .left-center-right {
        display: grid;
        width: 100%;
        grid-template-rows: 100px; 
        grid-template-columns: 300px auto 300px;
      }
      .left-center-right div {
        min-height: 100px;
      }
      .left {
        background: red;
      }
      .center {
        background: yellow;
      }
      .right {
        background: blue;
      }
    </style>
    <article class="left-center-right">
      <div class="left"></div>
      <div class="center">
        1、网格布局左右固定宽度,中间自适应
        2、网格布局左右固定宽度,中间自适应
      </div>
      <div class="right"></div>
    </article>
  </section>
总结:

1、这五种解决方案各自的优缺点

  • 浮动:缺点是脱离文档流的,需要做清浮动处理;优点是兼容性很好。
  • 绝对定位:缺点是布局脱离文档流,子元素也必须脱离文档流,可使用性比较差。优点是快捷,不容易出问题。
  • flex布局:为解决以上两种布局方式的不足而出现的,比较完美,目前移动端基本都属于flex布局。
  • 表格布局:缺点是操作繁琐,对seo也不友好,当其中一个单元格的高度变大时,其他单元格的高度也会随之变大。优点是兼容性非常好。
  • 网格布局:缺点是新出的技术,低版本浏览器兼容性不是很好,优点是可以做许多复杂的事情,但是代码量要简化的多。

2、当高度不定时,两侧的高度也跟这中间的高度撑开,以上五种有哪几种可以继续用,哪几种不能用了?
通过看效果:浮动和绝对定位是不能用的,flex布局、表格布局和网格布局可以继续使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《曹全碑》译文 [原文]:君諱全,字景完,敦煌效穀人也。其先蓋周之冑,武王秉乾之機,翦伐殷商,既定爾勳,福祿攸同,...
    许昌小语阅读 29,376评论 6 17
  • 了解一个人很难,了解自己也并不容易。更何况,心中常常大雾弥漫。 你以为你无可救药地爱上了一个人,...
    山花烂漫sxy阅读 318评论 0 2
  • Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 行级锁,开...
    Tim在路上阅读 617评论 1 1