首页 > 其他分享 >一文了解前端最常用7种布局方式

一文了解前端最常用7种布局方式

时间:2025-01-18 15:32:18浏览次数:3  
标签:浮动 常用 布局 一文 float 前端 元素 width 宽度

一 弹性布局(Flexbox)-- 比较常用的布局方式

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .container {
            display: flex;
            justify-content: space-between; /* 主轴上的元素均匀分布 */
            align-items: center; /* 交叉轴上的元素居中对齐 */
        }
      .box {
            width: 300px;
            height: 200px;
            background-color: #35b655;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
</html>

描述:

使用 CSS 的 display: flex; 属性创建灵活的布局,它提供了强大的轴(主轴和交叉轴)布局方式,可方便地调整元素的对齐、排列和分布。

优点:

可以轻松实现元素的水平和垂直居中,调整元素的间距和排列顺序,对于一维布局非常方便。

缺点:

主要适用于一维布局,如果需要复杂的二维布局,可能需要嵌套多个 Flex 容器。

二 定位布局(Positioning Layout)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .header {
            position: fixed;  /* 破坏文档流,跟content已经不是同一个文档流 */
            top: 0;
            left: 0;
            width: 100%;
            height: 50px;
            background-color: #eec2d7;
            color: white;
        }
      .content {
            margin-top: 70px; /* 为固定的 header 留出空间 */
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div class="header">固定导航栏</div>
    <div class="content">内容区域</div>
</body>

在上述示例中,.header 使用 position: fixed; 固定在页面顶部,.content 元素通过 margin-top 为固定的 .header 留出空间,避免被覆盖。

描述:

使用 position 属性(如 relative、absolute、fixed、sticky)对元素进行定位,通常用于实现特殊的布局效果,如固定的导航栏、弹出窗口等。

优点:

可以精确控制元素的位置,实现特殊的布局需求,如固定在页面的某个位置。

缺点:

可能会破坏文档流,需要精确计算元素的位置,过度使用可能导致布局难以维护。

三 浮动布局 ( Float Layout) 

示例: 

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .left-column {
            float: left;
            width: 30%;
            background-color: #f1bcbc;
            height: 300px;
        }
      .right-column {
            float: right;
            width: 65%;
            background-color: #ddebaa;
            height: 300px;
        }
     /* 清除浮动(clearfix):
    由于浮动元素会脱离文档流,它们的父元素的高度可能会塌陷,为了防止这种情况,使用了 .clearfix 类。
    .clearfix::after 是一个伪元素,content: ""; 为其添加了一个空内容,display: table; 将其显示为表格元素,
    clear: both; 表示清除左右两侧的浮动,确保后续元素不会受到之前浮动元素的影响。 */
      .clearfix::after {
            content: "";
            display: table;
            clear: both;
        }
    </style>
</head>
<body>
    <div class="left-column">
        这是左侧栏
    </div>
    <div class="right-column">
        这是右侧栏
    </div>
    <div class="clearfix"></div>
</body>
</html>


  .left-column 类中的元素使用 float: left; 并设置了 width: 30%;,使其向左浮动,占据父元素宽度的 30%,并设置了背景颜色和高度。
   .right-column 类中的元素使用 float: right; 并设置了 width: 65%;,使其向右浮动,占据父元素宽度的 65%,并设置了背景颜色和高度。
    这样就实现了一个简单的两栏布局,左侧栏占 30%,右侧栏占 65%,中间会有一些间隙。 


描述:

浮动布局是一种通过 CSS 的 float 属性将元素从正常的文档流中脱离出来,使其向左或向右移动,直到它们的外边距碰到包含它们的元素的边框或另一个浮动元素的边框的布局方式。

元素可以设置为 float: left; 向左浮动,或者 float: right; 向右浮动。浮动元素会影响后续元素的排列,后续元素会环绕在浮动元素周围,根据浮动元素的位置调整自身的位置。

优点:

实现多列布局:

在 Flexbox 和 Grid 布局出现之前,浮动布局是实现多列布局的主要方式。通过将多个元素设置为不同的浮动方向(如一个元素 float: left;,另一个元素 float: right;),可以将它们并排放置,创建多栏布局,例如,常见的两栏或三栏布局。

可以使用不同的百分比宽度和边距设置,让布局更具灵活性,适应不同的页面宽度需求。

文本环绕效果:

可以实现文本环绕图片或其他元素的效果,类似于报纸或杂志的排版方式,为页面带来更多的排版样式。

兼容性好:

浮动布局在不同的浏览器中具有较好的兼容性,包括旧版本的浏览器,对于一些需要兼容旧浏览器的项目来说是一个可靠的选择。

缺点:

布局复杂时容易出现问题:

当多个元素同时浮动时,布局可能会变得难以管理和预测,尤其是在需要清除浮动时。如果不使用清除浮动的技术(如使用 clear 属性或添加额外的元素),会导致父元素的高度塌陷,影响页面的整体布局。

脱离文档流的影响:

由于浮动元素会脱离正常的文档流,它们会影响周围元素的布局,需要开发者对文档流有很好的理解,并且在布局中考虑浮动元素的影响。

可能导致布局元素的位置和尺寸难以精确控制,需要使用额外的手段(如添加外边距、内边距)来调整元素的位置。

不适合复杂的布局需求:

对于复杂的二维布局,如元素在垂直和水平方向上的精确排列,使用浮动布局会变得困难和繁琐,需要大量的计算和调整。例如,要实现一个复杂的网格布局,使用浮动布局可能需要大量的嵌套和清除浮动操作,而使用 Grid 布局会更加简洁和高效。

总之,浮动布局是一种在 CSS 布局历史中具有重要地位的布局方式,它有实现多列布局和文本环绕等优点,在兼容性方面也有一定优势,但在处理复杂布局时存在诸多缺点,对于现代前端开发,在更复杂的布局需求下,通常会优先考虑使用 Flexbox 或 Grid 布局。

四 固定布局(Fixed Layout)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .container {
            width: 960px; /* 固定宽度 */
            margin: 0 auto; /* 居中容器 */
        }
      .box {
            width: 300px; /* 固定宽度 */
            float: left;
            height: 200px;
            background-color: #22d2df;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
</html>

描述:

页面元素使用固定的像素值来设置宽度,无论浏览器窗口如何变化,元素的尺寸都保持不变。

优点:

设计简单,易于控制元素的位置和大小,适合对布局一致性要求较高的页面。

缺点:

小屏幕设备上可能会出现滚动条,用户可能需要滚动才能看到完整内容,在大屏幕设备上可能会出现大量空白区域。 

五 流式布局(Fluid Layout)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .container {
            width: 80%; /* 容器宽度为父元素的 80% */
            margin: 0 auto; /* 水平居中容器 */
        }
      .box {
            width: 30%; /* 元素宽度为容器宽度的 30%,会根据容器宽度自动调整 */
            float: left;
            height: 200px;
            background-color: #bdd823;
            margin: 5%;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>

在上述示例中,.container 的宽度是其父元素(这里是 body)的 80%,并且使用 margin: 0 auto; 使其水平居中。

 .box 元素的宽度是 .container 的 30%,并使用 float: left; 进行排列,它们会根据 .container 的宽度自动调整大小。

描述:

也称为百分比布局,页面元素的宽度使用百分比来设置,使其可以根据浏览器窗口的大小自动调整。这种布局方式具有良好的适应性,适合不同屏幕尺寸的设备

优点:

可以很好地适应不同的屏幕宽度,具有较高的灵活性,能够根据用户的屏幕大小进行缩放,提供一致的用户体验。

缺点:

在屏幕尺寸差异较大时,可能会导致元素变形或布局不够紧凑,需要额外的媒体查询来处理极端情况。

六 网格布局(Grid Layout) -- 也比较常用

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .container {
            display: grid;
            grid-template-columns: repeat(3, 1fr); /* 三列,每列宽度相等 */
            grid-gap: 10px; /* 网格间隙 */
        }
      .box {
            height: 200px;
            background-color: #b15c5c;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
</html>

在上述示例中,.container 使用 display: grid; 并通过 grid-template-columns 定义了三列,使用 grid-gap 定义了网格间隙。

描述:

使用 CSS 的 display: grid; 属性将页面划分为网格,可以精确地定位元素在网格中的位置,适合复杂的二维布局。

优点:

可以实现复杂的二维布局,方便对行和列进行定义和操作,对于布局设计具有较高的灵活性和可扩展性。

缺点:

学习曲线较陡,对于简单布局可能过于复杂。

七 响应式布局(Responsive Layout)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
      .container {
            display: flex;
            flex-wrap: wrap;
        }
      .box {
            width: 300px;
            height: 200px;
            background-color: #84e2d6;
            margin: 10px;
        }
        @media screen and (max-width: 768px) {
          .box {
                width: 100%; /* 在小屏幕上,元素宽度占满一行 */
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>

</html>

在上述示例中,使用 @media screen and (max-width: 768px) 媒体查询,当屏幕宽度小于等于 768px 时,.box 元素的宽度变为 100%,以适应小屏幕设备。

描述:

结合媒体查询(Media Queries)和上述布局方式,根据不同的屏幕尺寸调整页面布局,为不同设备提供不同的布局方案。

优点:

可以为不同的设备提供优化的布局,提高用户体验,增强网站的适应性。

缺点:

增加了代码复杂度,需要针对不同的屏幕尺寸编写多个布局规则

建议读者把以上代码复制到代码编辑器运行查看浏览器页面,拖动浏览器大小观察每个布局方式的显示

标签:浮动,常用,布局,一文,float,前端,元素,width,宽度
From: https://blog.csdn.net/ThomasChan123/article/details/145227529

相关文章

  • 打包前端项目时报错:Task function must be specified
    注意:以下示例是你前端环境安装好的情况下排查的问题,前端环境没安装好请自行安装好报错示例:输入命令: gulp-v查看全局gulp和本地项目的gulp版本  这里可以看出这两个版本不一致,这时我们需要在项目里去修改一下对应的版本,改成3.0.0(这里根据自己的需求更改就好)重新运行......
  • 目标跟踪探索(2)|浅谈一下常用的目标跟踪算法
    前言  上一篇文章分享了百度的PP-Tracking目标跟踪算法,探讨了其在多目标跟踪任务中的应用。尽管PP-Tracking在精度方面表现出色,但在一些复杂场景下,尤其是高帧率和快速运动的场景中,实时性成为了其一个显著的瓶颈。实际应用中,随着目标数量的增加以及场景的复杂化,算法的计算......
  • Linux 常用命令——文件目录篇(保姆级说明)
    文件及目录类列出当前目录中的文件和子目录(ls)ls[-参数][name...]#列出所有根目录ls/#列出所有txt文件ls*.txt参数:-a显示所有文件及目录(.开头的隐藏文件也会列出)-d只列出目录(不递归列出目录内的文件)。-l以长格式显示文件和目录信息,包括权限、所有......
  • 多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)
    文章目录1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1封装播放组件3.2.2隐形的视频div3.2.3截取封面图3.3结束1.背景有这样一个需求:给你一个监控列表,每页展示多个监控(至少12个,m3u8格式);且展示每个监控的第一帧画面的封面图,但是后端没给你返回封面图......
  • 前端TS 时间格式化函数
    /***时间日期转换*@paramdate当前时间,newDate()格式*@paramformat需要转换的时间格式字符串*@returns返回拼接后的时间字符串*/exportfunctionformatDate(date:Date,format:string):string{constweek:{[key:string]:string}={'0'......
  • java常用类
    java常用类Api概述API(ApplicationProgrammingInterface)应用程序编程接口编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一......
  • Anaconda安装教程及环境变量添加;Anaconda环境管理;Anaconda包管理;Anaconda常用命令
    Anaconda安装教程及环境变量添加;Anaconda常用命令什么是AnacondaAnaconda的主要特点Anaconda安装方法下载Anaconda在Windows上安装在macOS/Linux上安装Anaconda环境管理常用环境管理命令Anaconda包管理常用包管理命令使用Anaconda的Python检查Python......
  • 软件测试常用的7种方法,最后一个是升职加薪关键!
    一般而言,软件测试方法分为黑盒测试、白盒测试、灰盒测试、静态测试、动态测试、手动测试、自动化测试和探索性测试等类型。【1】黑盒测试黑盒测试又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。该测试方法验证被测对象使用质量及外部质量表现。采用黑盒测试方法,测......
  • 前端GIS三维开发必备——WebGL&Three&Cesium知识框架
    WebGL知识框架以下是一个关于WebGL知识框架,从入门到进阶的详细详解,帮助你系统性学习WebGL开发。该框架分为基础、核心、进阶、优化与工具四个部分。ICE图形学社区一、基础知识1.什么是WebGLWebGL定义与用途基于OpenGLES2.0的JavaScriptAPI用于在浏览......
  • 2025实战指南大模型AI产品经理:从零基础到精通的详细步骤与技巧,一文收藏即可开始学习!
    随着人工智能技术的发展,尤其是大模型(LargeModel)的兴起,越来越多的企业开始重视这一领域的投入。作为大模型产品经理,你需要具备一系列跨学科的知识和技能,以便有效地推动产品的开发、优化和市场化。以下是一份详细的大模型产品经理学习路线,旨在帮助你构建所需的知识体系,从零基......