CSS:三栏布局

-三列布局,中间宽度自适应,两边定宽;

-中间栏要在浏览器中优先展示渲染;

-允许任意列的高度最高;

1. 绝对定位

原理就是将左右两边的元素设置为绝对定位,中间的元素设置其左右的margin值为左右两个元素的宽度

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>三栏布局</title>
  <style>
    #container {
      position: relative;
      height: 500px;
      margin: 0 auto;
      background-color: gold;
    }

    .column {
      position: absolute;
      top: 0;
      height: 100%;
    }

    #center {
      margin: 0 150px 0 200px;
      background-color: hotpink;
      height: 100%;
    }

    #left {
      left: 0;
      width: 200px;
      background-color: royalblue;
    }

    #right {
      right: 0;
      width: 150px;
      background-color: blue;
    }
  </style>
</head>

<body>
  <div id="container">
    <div id="center">center</div>
    <div id="left" class="column">left</div>
    <div id="right" class="column">right</div>
  </div>
</body>

</html>
2. 浮动+负边距

原理就是将三个元素都设置为左浮动,但是元素位置是中左右,然后分别设置左右的元素的宽度和边距,最后再在中间元素上加一个子元素,并将其左右边距设置成左右元素的宽度,这是最重要的一步,不然中元素会被左右元素盖住一部分。

<!DOCTYPE html>
<html>

<head lang="en">
  <meta charset="UTF-8">
  <title>三栏布局</title>
  <style type="text/css">
    .container {
      min-width: 700px;
    }

    .middle {
      float: left;
      width: 100%;
      height: 300px;
      text-align: center;
      background-color: #ffd36a;
    }

    .sub {
      margin: 0 200px;
    }

    .left {
      float: left;
      width: 200px;
      height: 300px;
      margin-left: -100%;
      background-color: #ff63bd;
    }

    .right {
      float: left;
      width: 200px;
      height: 300px;
      margin-left: -200px;
      background-color: #a2ff95;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="middle">
      <div class="sub">
        cjois hsheio ere fhwioefhoi wgwoigh wjw popjf fnoqi feribv ehfoih waidn howeidw efwheofhi qfqiwoh qfwbfwi fuiwe
        fgguwdhq fwebf weuhfw egifwiygw gwhow eifhnv whiohweowbvwe
      </div>
    </div>
    <div class="left">
      <h3>left</h3>
    </div>
    <div class="right">
      <h3>right</h3>
    </div>
    <div>
</body>

</html>
3. 浮动 + 超出隐藏

原理是分别将左右元素设置为浮动,因为设置为浮动回事元素脱离文档流,是父容器高度塌陷,而overflow:hidden可以清除浮动,所以可以在中元素中设置overflow:hidden来清除浮动,使三者显示在一行

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>三栏布局</title>
  <style>
    .container {
      min-width: 700px;
      height: 500px;
    }
    .left {
      float: left;
      width: 200px;
      background-color: violet;
    }

    .right {
      float: right;
      width: 200px;
      background-color: violet;
    }

    .middle {
      overflow: hidden;
      background-color: yellow;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="left">left</div>
    <div class="right">right</div>
    <div class="middle">nvois hvsh ifho shfo fafiha foihafh aoifhi ogheiof ewhieofhw vni soehios hci ciosh hisohfos fsoief hsofhos hsiod fheiofh soifh dsofhid sfhis vd</div>
  </div>
</body>
4. flex布局

原理是将父容器设置为display:flex 可以使子容器排在同一行

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>三栏布局</title>
  <style>
    .container {
      display: flex;
    }

    .left {
      flex: 0 0 100px;
      background-color: #f00;
    }

    .main {
      flex: 1;
      background-color: #0f0;
    }

    .right {
      flex: 0 0 200px;
      background-color: #00f;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="left">左侧栏</div>
    <div class="center">Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates molestias consequatur facere
      aperiam distinctio debitis in voluptatum quas blanditiis culpa illo minus accusantium atque quaerat unde,
      architecto odit! Itaque, eos.</div>
    <div class="right">右侧栏</div>
  </div>
</body>
</html>
5. 网格布局

设置网格布局,并且设置grid-template-columns可以控制有几列,以及每列的宽度

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>三栏布局</title>
  <style>
    .container {
      display: grid;
      grid-template-columns: 100px auto 200px;
    }

    .left {
      background-color: #f00;
    }

    .right {
      background-color: #00f;
    }

    .main {
      background-color: #0f0;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="left">左侧栏</div>
    <div class="center">Lorem ipsum dolor sit amet consectetur adipisicing elit. Debitis corporis, neque odio at, saepe
      unde officiis nesciunt deleniti quidem delectus necessitatibus reiciendis nulla. Praesentium voluptates,
      perspiciatis natus fuga dicta tempora!</div>
    <div class="right">右侧栏</div>
  </div>
</body>

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

推荐阅读更多精彩内容

  • 三栏是CSS布局中常见的一种布局模式,顾名思义,就是将网页内容以三列的形式呈现。通常,三栏布局中的左栏和右栏是固定...
    bmwz110阅读 909评论 0 6
  • 所谓三栏布局指的是:两边固定,中间内容自适应。三栏布局在开发中经常见到,效果如图所示: 红色和蓝色部分宽度固定,中...
    betterwlf阅读 635评论 0 1
  • 本文总结了实现三栏布局的几种常用方法,效果如下: 其中,左右分别为100px,中间自适应。 1. 行内块级元素 —...
    sylvia_yue阅读 245评论 0 0
  • 三栏布局一般指左右两栏固定宽度,中间一栏自适应的布局方法,也是许多网站常用的布局方式。如下图: 该示例在一个htm...
    zkhChris阅读 1,179评论 0 8
  • 青苔色是时下最流行的颜色之一,它没有荧光绿那么扎眼,也没有草绿色那么沉着,但是它有着自己独特的魅力,顽强而又充...
    济宁万达朱艳敏阅读 1,507评论 3 0