博客
关于我
你不应该只知道flex布局
阅读量:215 次
发布时间:2019-02-28

本文共 2428 字,大约阅读时间需要 8 分钟。

前言

我常被同事称为“长沙前端群最闲的人”。每天浑浑噩噩地参加各种长沙不收费的前端群,主要是为了解决他人的问题,同时也在不断扩充自己的前端知识储备。最近我注意到一个很奇怪的现象:在布局相关的讨论中,flex布局占据了绝对主导地位,几乎没有人提到其他布局方式。这种现象让我感到有些困惑——难道所有人都只掌握了flex布局吗?还是说大家对其他布局方式不够熟悉,只是懒得去学习?

确实,flex布局确实非常实用且直观,但作为一个严谨的前端工程师,我认为我们也应该了解其他布局方式的存在。毕竟,仅仅依赖于一种布局方式在面对复杂的布局需求时,可能会显得力不从心。

本文将重点介绍flex布局之外两种相对少见的布局方式——display: tabledisplay: grid,并简要介绍它们的基本使用方法。同时,我也会结合实际案例,说明这些布局方式在实际开发中的应用场景。


Flex布局

flex布局是前端开发中最常用的布局方式之一。它的魅力在于能够实现垂直居中等复杂布局,而无需依赖于对父容器或子容器尺寸的深刻理解。例如,垂直居中问题可以通过简单的display: flexalign-items: center来实现,而无需关注父容器或子容器的具体宽高。

然而,flex布局也存在一些局限性。首先,它仅适用于IE10及以上版本的浏览器,较旧的版本可能需要额外的兼容性处理。此外,flex布局的语法在不同的版本中可能会有所不同(如display: boxdisplay: flex的区别),这也增加了开发的复杂性。

在这种情况下,有没有一种既能像flex布局那样灵活,又能兼容旧浏览器的布局方式呢?答案是肯定的——display: table布局。


Table布局

display: table布局是一种兼容性非常强的布局方式,支持IE8及以上版本的浏览器。它的特点是对容器宽高的变化非常敏感,能够自动适应内容溢出的情况,这在一定程度上类似于flex布局的弹性特性。

以下是display: table布局的一些典型应用场景:

  • 两栏布局:类似于flex布局的水平布局,能够轻松实现左右分割。
  • 数据表格布局:适合展示结构化的数据内容。
  • 公司官网的布局:可以通过表格布局快速搭建页面框架。
  • 尽管display: table布局具有诸多优势,但它也有一些明显的缺点。其一,表格布局的横向排列总是等高的,这在某些场景中显得不够灵活。其二,与flex布局相比,display: table布局的API相对复杂,需要结合HTML表格标签进行操作,这也增加了学习和使用的难度。

    也许正是因为这些原因,display: table布局才没有在现代前端开发中占据主流地位。


    Grid布局

    display: grid布局是flex布局的“强大”版本。它通过将容器划分为“行”和“列”,形成单元格的方式进行布局。Grid布局的一个显著优势是其二维布局能力,能够实现更复杂的布局需求。

    以下是display: grid布局的基本使用方法:

  • 网格的定义

    • 使用grid-template-columnsgrid-template-rows来定义网格的列和行数量。
    • grid-auto-flow属性用于指定网格项的流动方向,支持“先行后列”和“先列后行”的布局。
  • 网格间隔

    • 使用grid-row-gapgrid-column-gapgrid-gap来设置网格之间的间隔。
  • 对齐属性

    • justify-itemsalign-items用于对齐网格内的元素。
    • justify-contentalign-content则用于对齐整个网格的对齐。
  • 网格项的定位

    • 通过grid-column-startgrid-column-endgrid-row-startgrid-row-end属性,可以精确地定义网格项的位置。
  • 流动性

    • grid-auto-flow: row dense;column dense;可以实现网格项的自动填充。
  • 以下是display: grid布局的一些典型应用场景:

  • 垂直居中:通过合理设置网格的行数和列数,可以轻松实现垂直居中布局。
  • 圣杯布局:Grid布局在实现圣杯布局时表现出色。
  • 响应式布局:Grid布局可以通过动态调整网格列数来实现响应式布局。
  • Grid布局的学习曲线较为陡峭,但它的强大功能使其在现代前端开发中得到了广泛应用。然而,Grid布局的兼容性问题依然存在,尤其是在旧浏览器版本中可能需要额外的处理。


    Float和Absolute布局

    在讨论现代布局方式时,不能忽视floatabsolute布局的重要性。尽管这两种布局方式在现代前端开发中不再是主流选择,但它们在特定场景中仍然具有重要的价值。

  • Float布局

    • float布局的特点是能够将元素漂浮到页面的特定位置。
    • 通常用于实现类似“浮动工具条”的布局。
  • Absolute布局

    • absolute布局的特点是相对于最近的已定位祖先元素进行布局。
    • 它在实现复杂布局时具有很强的灵活性。
  • 尽管floatabsolute布局在现代前端开发中不再是主流选择,但它们在某些特定场景中依然不可或缺。例如,在实现复杂的布局组合时,floatabsolute布局往往能够提供更高的灵活性。


    总结

    页面布局是一个伪命题,你可以通过各种不同的CSS搭配来实现同样的布局效果。Flex布局无疑是最流行的布局方式之一,但作为严谨的前端工程师,我们也应该关注其他布局方式的特点和适用场景。

    在选择布局方式时,我们需要综合考虑以下因素:

  • 兼容性:选择一个能够在广泛浏览器版本中运行的布局方式。
  • 灵活性:选择能够实现目标布局效果的布局方式。
  • 学习成本:选择一个学习曲线较低的布局方式。
  • 通过对多种布局方式的深入学习和实践,我们可以在实际项目中做出更加理性的布局选择,从而实现更加高效和稳定的布局效果。

    转载地址:http://wlbp.baihongyu.com/

    你可能感兴趣的文章
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.7 Parameters vs Hyperparameters
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>