美文网首页CSS积累让前端飞Web前端之路
左右两栏固定宽度,中间自适应布局的5种方案

左右两栏固定宽度,中间自适应布局的5种方案

作者: JokerPeng | 来源:发表于2016-12-30 13:29 被阅读285次

一个常用的布局问题就是左右两栏固定宽度,中间内容自适应,接下来介绍5种常用的解决方案。

1、float浮动

通过float,让左右2栏浮动到左边和右边,然后中间div需要放在左右两个div之后。

  • 优点:浏览器的兼容性比较好
  • 缺点:浮动会造成相关元素脱离文档流,需要做一些清除浮动的处理。另外当中间区域内容高度超出设定高度时候,会破坏三栏布局。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>float</title>
  <style media="screen">
    article div{
      height: 200px;
    }
    .left{
      float:left;
      width:200px;
      background: red;
    }
    .center{
      background: yellow;
    }
    .right{
      float:right;
      width:200px;
      background: blue;
    }
  </style>
</head>
<body>
  <article>
    <div class="left">左</div>
    <div class="right">右</div>
    <div class="center">中</div>
  </article>
</body>
</html>

2、绝对定位

左中右三个div都需要设置绝对定位:position: absolute,左侧div设置left: 0靠左,右侧div同理设置right: 0靠右,中间div设置left和right值为左侧和右侧div的宽度。

  • 优点:方便快捷
  • 缺点:会造成子元素也一起脱离文档流,可使用性比较差。另外当中间区域内容高度超出设定高度时候,会破坏三栏布局。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title> absolute </title>
  <style media="screen">
    article div{
      height: 200px;
      position: absolute;
    }
     .left{
      left:0;
      width: 200px;
      background: red;
    }
     .center{
      left: 200px;
      right: 200px;
      background: yellow;
    }
     .right{
      right:0;
      width: 200px;
      background: blue;
    }
  </style>
</head>
<body>
  <article>
    <div class="left">左</div>
    <div class="center">中</div>
    <div class="right">右</div>
  </article>
</body>
</html>

3、flex布局

首先设置包裹左中右三个div的父容器节点的布局为flex布局即display: flex
左右div设置固定宽度,中间div设置flex: 1占满剩余的空间。

  • 优点:比较完美的做法,移动端比较常见。当不给定三栏高度时,可以随区域内容高度的改变而改变
  • 缺点:兼容性不太好,IE11以下都不支持。且设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>flex</title>
  <style media="screen">
    article {
      display: -webkit-flex; /* Safari */
      display: flex;
    }
    article div{
      height: 200px;
    }
     .left{
      width: 200px;
      background: red;
    }
     .center{
      flex: 1;
      background: yellow;
    }
     .right{
      width: 200px;
      background: blue;
    }
  </style>
</head>
<body>
  <article>
    <div class="left">左</div>
    <div class="center">中</div>
    <div class="right">右</div>
  </article>
</body>
</html>

4、表格布局table

首先设置包裹左中右三个div的父容器节点的布局为table布局即display: table,且设置总的宽度为100%,左中右都设为table-cell,左右div设置固定宽度,中间div不设置宽度。

  • 优点:比较完美的做法。当不给定三栏高度时,可以随区域内容高度的改变而改变
  • 缺点:兼容性不太好,IE11以下不支持,三栏高度会始终一致,如果只想对某一栏高度增加或减少是不行的
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>table</title>
  <style media="screen">
    article {
      display: table;
      width: 100%;
    }
    article div{
      height: 200px;
      display: table-cell;
    }
     .left{
      width: 200px;
      background: red;
    }
     .center{
      background: yellow;
    }
     .right{
      width: 200px;
      background: blue;
    }
  </style>
</head>
<body>
  <article>
    <div class="left">左</div>
    <div class="center">中</div>
    <div class="right">右</div>
  </article>
</body>
</html>

5、网格grid布局

首先设置包裹左中右三个div的父容器节点的布局为grid布局即display: grid,且设置总的宽度为100%,网格需要设置行和列,行高设置200px,即grid-template-rows: 200px;,同时有3列,左右各200px宽度,中间自适应,即grid-template-columns: 200px auto 200px;

  • 优点:比较新颖的做法
  • 缺点:兼容性不太好,IE11以下不支持。另外当中间区域内容高度超出设定高度时候,会破坏三栏布局。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>grid</title>
  <style media="screen">
    article {
      width:100%;
      display: grid;
      grid-template-rows: 200px;
      grid-template-columns: 200px auto 200px;
    }
     .left{
      background: red;
    }
     .center{
      background: yellow;
    }
     .right{
      background: blue;
    }
  </style>
</head>
<body>
  <article>
    <div class="left">左</div>
    <div class="center">中</div>
    <div class="right">右</div>
  </article>
</body>
</html>

相关文章

  • 面试准备之CSS

    页面布局 题目1:三栏布局,中间自适应,左右两栏固定宽度300px 写出3种方案算是及格给出5种方案,不管使用哪种...

  • | 三栏布局

    三栏布局特点:整体高度已知,左右两边宽度固定,中间内容宽度自适应。 浮动布局方案 这里使用了 less 语法,所以...

  • 圣杯布局和双飞翼布局的理解

    圣杯和双飞翼布局都是左右两栏宽度固定,中间部分宽度自适应。 圣杯布局 参考:http://www.alistapa...

  • 刷前端面经笔记(二)

    1.实现三栏布局(左右两边固定宽度,中间自适应) 1)浮动布局左右两边固定宽度,并分别设置float:left和f...

  • 三栏布局

    三栏布局,左右两栏宽度固定,中间栏宽度自适应。 假设我们有以下 HTML 结构: 基本样式如下: 本文将介绍几种实...

  • css布局

    简单的布局问题 高度已知,三栏布局,要求左右宽度固定,中间自适应,怎么实现?

  • 实现三栏布局的8种方式

    三栏布局:两侧宽度固定,中间宽度自适应的 公共样式 1. 浮动布局 左右模块各自向左右浮动,并设置中间模块的 ma...

  • 我还是要说的布局

    两栏布局 左边固定右边自适应 使用float布局 使用position布局    三栏布局 左右两边固定中间自适应...

  • css布局及居中

    双列布局(左右布局) 如何实现:浮动元素+普通元素 三栏式布局(左中右布局) 两侧两列固定宽度,中间列自适应宽度 ...

  • CSS三栏布局(4种方法)

    要求:垂直三栏布局,左右两栏宽度固定,中间自适应。 方法1:浮动 思路:三栏全部左浮动,中间元素width用cal...

网友评论

    本文标题:左右两栏固定宽度,中间自适应布局的5种方案

    本文链接:https://www.haomeiwen.com/subject/vwsmvttx.html