• 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>
  • 相关阅读:
    CF1082E Increasing Frequency
    CF1083B The Fair Nut and String
    week2
    CF1082G Petya and Graph
    后缀数组学习笔记
    单纯形法
    验证rbd的缓存是否开启
    如何删除一台OSD主机
    Mon失效处理方法
    查询osd上的pg数
  • 原文地址:https://www.cnblogs.com/ycherry/p/12404525.html
Copyright © 2020-2023  润新知