常见的布局方法以及它们的优缺点

常见的布局方法以及它们的优缺点

  • Flexbox - 弹性布局

    • 优点:css3新特性,简单快捷,目前主流布局方式,解决旧特性定位时产生元素脱离文档流问题。
    • 缺点:仅支持 IE9 以上浏览器。
       <section class="flex-wrap">
           <div class="left">left</div>
           <div class="center">center</div>
           <div class="right">right</div>
       </section>
    
       .flex-wrap {
       display: flex;
       /* height: 100px; */
       /* 不设置高度则自适应 */
       }
       .flex-wrap .left, 
       .flex-wrap .right {
       width: 200px;
       }
       .flex-wrap .center {
       flex: 1;
       }
    
  • Grid - 网格布局(未来趋势)

    • 优点:可将网页划分成不同的网格,任意组合不同布局,可以实现以前只能通过诸如Bootstrapcss第三方框架的布局效果。
    • 缺点:css 实验性新特性,在浏览器中还没有得到广泛的支持。
      <section class="grid-wrap">
          <div class="left">left</div>
          <div class="center">center</div>
          <div class="right">right</div>
      </section>
    
       .grid-wrap {
           display: grid;
           grid-template-rows: 100px;  /* 设置行高,不设置则自适应 */
           grid-template-columns: 200px auto 200px;  /* 设置列宽,也可使用百分比 */
           }
    
  • Floats - 浮动布局

    • 优点:比较简单,兼容性好;
    • 缺点:浮动会使元素脱离文档流,容易出现高度塌陷等问题,需做好清理浮动。
       <section class="float-wrap">
           <div class="left">left</div>
           <div class="right">right</div>
           <div class="center">center</div>
           <!-- ⚠️注意,没浮动的div应放再最后,left左浮动完后,行剩余空间会被center占满 -->
       </section>
    
       .float-wrap>div {
           height: 200px;
           }
       .float-wrap .left {
           float: left;
           width: 200px;
           }
       .float-wrap .right {
           float: right;
           width: 200px;
           }
    
    • 以上方式虽简单,但仅适合所有元素等高的情况,因为元素浮动会脱离文档流,所以不等高可能会出现如下几种状况;
    • 未浮动元素高于浮动元素,造成围绕效果。
    • 解决方案:未浮动元素创建 BFC,以下是创建BFC的五种方式。
    • float 除了none以外的值
    • overflow 除了visible 以外的值(hidden,auto,scroll )
    • display (table-cell,table-caption,inline-block, flex, inline-flex)
    • position值为(absolute,fixed)
    • fieldset元素
    • Positioning - 定位布局
      • 优点:简单直接;
      • 缺点:绝对定位同float布局一样会脱离文档流,高度塌陷问题。
        <section class="position-wrap">
            <div class="left">left</div>
            <div class="center">center</div>
            <div class="right">right</div>
        </section>
      
        .position-wrap>div {
        position: absolute;
        }
        .position-wrap .left {
        width: 200px;
        left: 0;
        }
        .position-wrap .right {
        width: 200px;
        right: 0;
        }
        .position-wrap .center {
        left: 200px;
        right: 200px;
        }
        ```
      
    • 出现高度塌陷问题,可创建BFC来解决,直接给父容器添加 overflow: auto; 或 hidden、scroll等。
       .position-wrap {
           overflow: auto;
           /* 或 hidden、scroll 等 */
       }
    
  • Table layout - 表格布局

    • 优点:兼容性最佳
    • 缺点:对 seo 不友好,且列高不能自适应,所有列高会保持一致。(且很少有人使用table布局了)
       <section class="table-wrap">
           <div class="left">left</div>
           <div class="center">center</div>
           <div class="right">right</div>
       </section>
    
       .table-wrap {
       display: table;
       width: 100%;
       }
       .table-wrap>div {
       display: table-cell;
       }
       .table-wrap .left,
       .table-wrap .right {
       width: 200px;
       }
    
  • 清除浮动的四种方法(推荐使用前两种,生产环境推荐第二种。)

  1. 父容器添加 overflow
  	        .container {
  	            overflow: hidden;
  	            /* 或 auto、scroll 等非默认 visible 值*/
  	        }
  1. 通过伪元素清除浮动
  • 通用样式添加 .clearfix 及其伪类样式;
  • 给需要清除浮动的元素class添加 clearfix 类;
         /* For modern browsers */
         .clearfix:before,
         .clearfix:after {
           content:"";
           display:block;
         }
         .clearfix:after {
           clear:both;
         }

         /* For IE 6/7 (trigger hasLayout) */
         .clearfix {
           zoom:1;
         }
  1. 父容器内添加空元素
  • 父容器底部添加空元素;
  • 添加样式 clear: both;
    缺点:增加冗余标签,违背了语义网的原则。
         <section>
         <div style="float: left">....<div>
         ...
         <div style="clear: both;"></div>
         <section>
  1. 浮动父容器

缺点:影响到后面元素的定位,而且有时候,父容器是定位死的,无法变成浮动。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
grid 是一个二维布局系统,而 flex 是一个一维布局系统。它们在设计上有一些不同,因此它们各自有优点和缺点。 grid 布局的优点 1. 可以进行二维布局。这意味着可以将页面分成多行和多列,并且可以根据需要调整它们的大小和间距。这使得可视化设计更容易,并且可以实现复杂的页面布局。 2. 可以设置行和列的大小。这使得网格中的项目可以更好地适应屏幕大小和分辨率。 3. 可以设置网格的方向。这意味着可以更轻松地实现横向和竖向的布局。 4. 可以对项目进行非常精细的布局。它可以精确控制项目的位置、大小、间距、对齐方式等。 grid 布局的缺点 1. 兼容性有限。目前只有比较新的浏览器支持该属性,对于老浏览器,需要使用fallback方案。 2. CSS代码复杂。使用网格布局需要大量的CSS代码,特别是对于复杂的布局,代码复杂度就更高。 Flex 布局的优点 1. 可以实现自适应布局。flex 可以让项目根据容器的大小自动调整大小和位置,适应不同的屏幕大小和分辨率。 2. 结构简单。flex 相对于 grid 来说,结构简单,写起来也比较方便。 3. 兼容性好。大多数现代浏览器都支持 CSS flex 布局。 4. 灵活性强。flex 可以实现水平布局、垂直布局、水平垂直混合等任意布局方式。 5. 代码简洁。使用 flex 可以大大减少 CSS 代码量。 Flex 布局的缺点 1. 无法进行二维布局。这是由于 Flex 布局是单向的,只能在一条轴线上排列项目。如果需要进行复杂的布局,就需要结合其他布局方式,如 grid。 2. 项目的定位比较麻烦。在某些情况下,使用 flex 会出现项目定位比较麻烦的问题,需要使用 absolute 或者其他方式来解决。 因此,根据实际情况,可以选择使用 grid 或 flex 布局,以获得更好的布局效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

teng28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值