暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CSS两列布局的N种实现

碧茂大数据 2020-12-07
447
更多精彩,请点击上方蓝字关注我们!

一,什么是两列布局

两列布局分为两个,一种是垂直定宽,右侧自适应,另一种是两列都自适应(即纵向宽度由子元素决定,右侧补齐剩余空间)。
在css面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能,下面将分别介绍实现方式。

二,顶端定宽,右侧自适应如何实现?

1、双列直插式

原理:两个元素都设置dislpay:inline-block,为了消除HTML空间的影响,父元素的字体大小需要设置为0,正确匹配元素的宽度使用计算函数计算。如果两个元素的高度不一样,可以给元素设置vertical-align:top调整。
缺点:由于父元素设置了font-size为0,子元素内文字不会显示。
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title></title>
    <style>
    *{
    padding: 0;
    margin: 0;
    }
    .box{
    height: 600px;
    width: 100%;
    font-size:0;
    }
    .left{
    display: inline-block;
    width: 100px;
    height: 200px;
    background-color: red;
    vertical-align: top;


    }
    .right{
    display: inline-block;
    width: calc(100% - 100px);
    height: 400px;
    background-color: blue;
    vertical-align: top;
    }
    </style>
    </head>
    <body>
    <div>
    <div>
    <span>1234</span>
    </div>
    <div>
    <span>1234</span>
    </div>
    </div>
    </body>
    </html>

    2、双浮动

    原理:两个元素设置浮动,右侧自适应元素宽度使用calc函数计算
    缺点:父元素需要清除浮动
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8">
      <title></title>
      <style>
      *{
      padding: 0;
      margin: 0;
      }
      .box{
      height: 600px;
      width: 100%;


      }
      .left{
      float: left;
      width: 100px;
      height: 200px;
      background-color: red;
      }
      .right{
      float: left;
      width: calc(100% - 100px);
      height: 400px;
      background-color: blue;
      }
      </style>
      </head>
      <body>
      <div>
      <div>
      <span>
      123adadadddddddddddddddddddddddddddddddddddddddd
      </span>
      </div>
      <div></div>
      </div>
      </body>
      </html>

      3、浮动+保证金

      原理:预设定宽元素浮动,右侧自适应元素设置margin-left的值大于定宽元素的宽度即可
      缺点:父元素需要清除浮动。
        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="utf-8">
        <title></title>
        <style>
        *{
        padding: 0;
        margin: 0;
        }
        .box{
        height: 600px;
        width: 100%;


        }
        .left{
        float: left;
        width: 100px;
        height: 200px;
        background-color: red;
        }
        .right{
        margin-left: 100px;
        height: 400px;
        background-color: blue;
        }
        </style>
        </head>
        <body>
        <div>
        <div>
        <p>1234</p>
        </div>
        <div>
        <p>1234</p>
        </div>
        </div>
        </body>
        </html>

        4、浮动+ BFC

        原理:父元素设置溢出:隐藏,左侧定宽元素浮动,右侧自适应元素设置溢出:自动创建BFC
        缺点:前端元素的内容如果超过设定宽度会重叠到右侧元素上。
          <!DOCTYPE html>
          <html>
          <head>
          <meta charset="utf-8">
          <title></title>
          <style>
          *{
          padding: 0;
          margin: 0;
          }
          .box{
          height: 600px;
          width: 100%;
          overflow: hidden;
          }
          .left{
          float: left;
          width: 100px;
          height: 200px;
          background-color: red;
          }
          .right{
          overflow: auto;
          height: 400px;
          background-color: blue;
          }
          </style>
          </head>
          <body>
          <div>
          <div>111111111111111111111111</div>
          <div>111111111111111111111111111111111111111111111</div>
          </div>
          <div></div>
          </body>
          </html>

          5、绝对+左边距

          原理:父元素相对定位,垂直元素绝对定位,右侧自适应元素设置margin-left的值大于定宽元素的宽度
          缺点:父元素设置了相对定位
            <!DOCTYPE html>
            <html>
            <head>
            <meta charset="utf-8">
            <title></title>
            <style>
            *{
            padding: 0;
            margin: 0;
            }
            .box{
            height: 600px;
            width: 100%;
            position: relative;
            }
            .left{
            position: absolute;
            width: 100px;
            height: 200px;
            background-color: red;
            }
            .right{
            margin-left: 100px;
            height: 400px;
            background-color: blue;
            }
            </style>
            </head>
            <body>
            <div>
            <div></div>
            <div></div>
            </div>
            </body>
            </html>

            6、flex布局

            原理:父元素设置display:flex,自适应元素设置flex:1
            缺点:存在兼容性问题,IE10以下不支持
              <!DOCTYPE html>
              <html>
              <head>
              <meta charset="utf-8">
              <title></title>
              <style>
              *{
              padding: 0;
              margin: 0;
              }
              .box{
              height: 600px;
              width: 100%;
              display: flex;
              }
              .left{
              width: 100px;
              height: 200px;
              background-color: red;
              }
              .right{
              flex: 1;
              height: 400px;
              background-color: blue;
              }
              </style>
              </head>
              <body>
              <div>
              <div></div>
              <div></div>
              </div>
              </body>
              </html>

              三,左右两端元素都自适应

              严格来说,并不算两个元素都是适应,只是将上面的定宽替换由子元素撑开而已

              1、浮动+ BFC

              原理和上面一样,只是稍微元素的宽度没有设置,由子元素撑开

              2、table布局

              原理:父元素显示:表格,垂直元素外围用一个div包装,该div设置显示:表格单元格,宽度:0.1%(保证最小宽度),右侧元素内部设置margin-right,右侧元素设置显示:table-cell。
              缺点:IE7及以下不支持,当display:tabletime,padding失效,父元素的line-height属性失效,当display:table-cell时,margin无效。
                <!DOCTYPE html>
                <html>
                <head>
                <meta charset="utf-8">
                <title></title>
                <style>
                .parent{
                display: table;
                width: 100%;


                }
                .box{
                display: table-cell;
                width: 0.1%;
                }
                .left{
                margin-right: 20px;
                background-color: red;
                height: 200px;
                }
                .right{
                display: table-cell;
                background-color: blue;
                height: 300px;
                }
                </style>
                </head>
                <body>
                <div>
                <div>
                <div>126545453dddddddd453453453</div>
                </div>
                <div>12121</div>
                </div>
                </body>
                </html>

                3、flex布局

                原理,缺点同上面的flex布局

                4、网格布局

                原理:父元素设置显示:grid,grid-template-columns:auto 1fr;(这个属性定义列宽,auto关键字表示由浏览器自己决定长度。fr是一个相对尺寸单位,表示剩余空间做等分) grid-gap:20px(行间距)
                缺点:兼容性太差,IE11都不支持,谷歌57以上才可以。
                  <!DOCTYPE html>
                  <html>
                  <head>
                  <meta charset="utf-8">
                  <title></title>
                  <style>
                  .parent{
                  display:grid;
                  grid-template-columns:auto 1fr;
                  grid-gap:20px
                  }
                  .left{
                  background-color: red;
                  height: 200px;
                  }
                  .right{
                  height:300px;
                  background-color: blue;
                  }
                  </style>
                  </head>
                  <body>
                  <div>
                  <div>1111111111111111111111111</div>
                  <div></div>
                  </div>
                  </body>
                  </html>
                   
                  本文完~


                  图文 来源网络

                  版权归原作者所有,侵联删

                  END


                  碧茂课堂精彩课程推荐:

                  1.Cloudera数据分析课;

                  2.Spark和Hadoop开发员培训;

                  3.大数据机器学习之推荐系统;

                  4.Python数据分析与机器学习实战;

                  详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

                  现在注册互动得海量学币,大量精品课程免费送!




                  关注最新行业动态,

                  加群进行技术交流



                  文章转载自碧茂大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论