zoukankan      html  css  js  c++  java
  • 三列布局的多种实现方式

    实现效果

      通过下面的方法实现三列布局,最终实现的结果都如下所示:

    float+BFC实现

      基本思路:其中两列使用float实现固定,另外一列这是通过触发BFC,利用BFC盒子不会与浮动盒子解除从而实现三列布局,其中两列是固定宽度,一列是自适应宽度。

      注意点:因为触发BFC的盒子是自适应的,所以它宽度总是占满余下的所有空间,因此如果是两边固定宽度且使用float固定,中间自适应,那么在设置的时候应该先设置浮动的两个盒子;如果你先设置一个浮动盒子,然后立马放BFC盒子,由于BFC盒子的宽度会占满余下的所有空间,会导致第二个浮动的盒子被强制换行。正确代码如下:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <style>
     9         .box {
    10             height: 200px;
    11         }
    12 
    13         .outside {
    14             width: 200px;
    15         }
    16 
    17         .main {
    18             overflow: hidden;
    19             background-color: skyblue;
    20         }
    21 
    22         .left {
    23             float: left;
    24             width: 50px;
    25             background-color: red;
    26         }
    27 
    28         .right {
    29             float: right;
    30             width: 50px;
    31             background-color: pink;
    32         }
    33     </style>
    34 </head>
    35 
    36 <body>
    37     <div class="box outside">
    38         <div class="box left"></div>
    39         <div class="box right"></div>
    40         <div class="box main"></div>
    41     </div>
    42 
    43 </body>
    44 
    45 </html>

     设置左右外边距实现

      基本思路:设置两个固定宽度的盒子左右浮动,分别排列到两侧,由于浮动的盒子不再占据文档里,此时中间的盒子还在文档流,那么中间盒子就会被浮动盒子遮盖,所以我们给中间的盒子设置左右外边距,通过左右外边距实现了中间盒子不被浮动盒子遮盖实现三列布局。这个可以实现两栏固定宽度,一栏宽度自适应。

      注意点:要熟悉浮动的基本概念,同时也要熟悉外边距的实现。代码如下:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <style>
     9         .box {
    10             height: 200px;
    11         }
    12 
    13         .outside {
    14             width: 200px;
    15         }
    16 
    17         .main {
    18             margin-left: 50px;
    19             margin-right: 50px;
    20             background-color: skyblue;
    21         }
    22 
    23         .left {
    24             float: left;
    25             width: 50px;
    26             background-color: red;
    27         }
    28 
    29         .right {
    30             float: right;
    31             width: 50px;
    32             background-color: pink;
    33         }
    34     </style>
    35 </head>
    36 
    37 <body>
    38     <div class="box outside">
    39         <div class="box left"></div>
    40         <div class="box right"></div>
    41         <div class="box main"></div>
    42     </div>
    43 
    44 </body>
    45 
    46 </html>

    position实现

      基本思路:通过子绝父相实现三列布局,注意:这种方式不能实现两列固定宽度,一栏自适应宽度。必须要计算好三列各自的宽度!

      注意点:要熟悉定位中的子绝父相规则。实现如下:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <style>
     9         .box {
    10             height: 200px;
    11         }
    12 
    13         .outside {
    14             width: 200px;
    15             position: relative;
    16         }
    17 
    18         .main {
    19             width: 100px;
    20             position: absolute;
    21             top: 0;
    22             left: 50px;
    23             background-color: skyblue;
    24         }
    25 
    26         .left {
    27             width: 50px;
    28             position: absolute;
    29             top: 0;
    30             left: 0;
    31             background-color: red;
    32         }
    33 
    34         .right {
    35             width: 50px;
    36             position: absolute;
    37             top: 0;
    38             right: 0;
    39             background-color: pink;
    40         }
    41     </style>
    42 </head>
    43 
    44 <body>
    45     <div class="box outside">
    46         <div class="box left"></div>
    47         <div class="box right"></div>
    48         <div class="box main"></div>
    49     </div>
    50 
    51 </body>
    52 
    53 </html>

    display:table 实现

      基本思路:都知道,在上古时期网页布局主要是通过表格的方式实现,但是现在网页布局都是通过div+css的方式来实现的。不过有些时候我们仍然需要使用表格来布局,但是!如果我们直接使用标签table来布局,就做不到语义化的要求,因此就有了display:table 的出现。基本了解如下知识点:

    display属性值  代表含义
    table (类似 <table>)此元素会作为块级表格来显示,表格前后带有换行符。
    table时padding会失效
    table-row (类似 <tr>)此元素会作为一个表格行显示。
    table-row时margin、padding同时失效
    table-cell (类似 <td> 和 <th>)此元素会作为一个表格单元格显示。
    table-cell时margin会失效
     

       table系列的属性不止以上所列,要知道更多的可以去百度查询。但是知道了如下几个之后我们就可以实现三列布局的实现。

      注意点:table表格中的单元格最大的特点之一就是同一行列表元素都等高。所以,很多时候,我们需要等高布局的时候,就可以借助display:table-cell属性。说到table-cell的布局,不得不说一下“匿名表格元素创建规则”:

    CSS2.1表格模型中的元素,可能不会全部包含在除HTML之外的文档语言中。这时,那些“丢失”的元素会被模拟出来,
    从而使得表格模型能够正常工作。所有的表格元素将会自动在自身周围生成所需的匿名table对象,使其符合table/inline-table、table-row、table- cell的三层嵌套关系。

      

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <style>
     9         .box {
    10             height: 200px;
    11         }
    12 
    13         .outside {
    14             width: 200px;
    15             display: table;
    16         }
    17 
    18         .row {
    19             display: table-row;
    20         }
    21 
    22         .main {
    23             width: 100px;
    24             display: table-cell;
    25             background-color: skyblue;
    26         }
    27 
    28         .left {
    29             width: 50px;
    30             display: table-cell;
    31             background-color: red;
    32         }
    33 
    34         .right {
    35             width: 50px;
    36             display: table-cell;
    37             background-color: pink;
    38         }
    39     </style>
    40 </head>
    41 
    42 <body>
    43     <div class="box outside">
    44         <div class="row">
    45             <div class="box left"></div>
    46             <div class="box main"></div>
    47             <div class="box right"></div>
    48         </div>
    49     </div>
    50 
    51 </body>
    52 
    53 </html>

    Flex 伸缩布局

      基本思路:Flex布局有点类似于bootstrap的栅格布局。

      注意点: Flex 的兼容性有问题。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8     <style>
     9         .box {
    10             height: 200px;
    11         }
    12 
    13         .outside {
    14             width: 200px;
    15             display: flex;
    16         }
    17 
    18         .main {
    19             width: 100px;
    20             background-color: skyblue;
    21         }
    22 
    23         .left {
    24             width: 50px;
    25             background-color: red;
    26         }
    27 
    28         .right {
    29             width: 50px;
    30             background-color: pink;
    31         }
    32     </style>
    33 </head>
    34 
    35 <body>
    36     <div class="box outside">
    37         <div class="box left"></div>
    38         <div class="box main"></div>
    39         <div class="box right"></div>
    40     </div>
    41 
    42 </body>
    43 
    44 </html>
  • 相关阅读:
    有关macOS隐藏文件的问题
    AcWing 2548. 大胖子走迷宫(BFS)
    AcWing 1224. 交换瓶子(交换最少次数使得数列有序)
    AcWing 1220. 生命之树(树形DP)
    AcWing 1215. 小朋友排队(树状数组)
    AcWing 1214. 波动数列(推柿子+DP)
    Python文件操作
    远程升级程序过程
    找某个Linux内核可能调用的文件
    linux platform简易的理解
  • 原文地址:https://www.cnblogs.com/littleppig/p/13406311.html
Copyright © 2011-2022 走看看