vue3 中推荐使用的页面布局方式

news2025/4/24 11:55:37

1、Flexbox布局  

原理

        Flexbox(弹性盒子布局模型)提供了一种更加高效的方式来对容器中的子元素进行布局、对齐和分配空间。它能够根据容器的大小和子元素的内容自动调整布局,非常适合一维布局(水平或垂直方向)。

优势

        灵活性高:可以轻松实现元素的对齐、分布和顺序调整。

        响应式友好:在不同屏幕尺寸下能保持良好的布局效果。

        代码简洁:通过少量的CSS属性就能实现复杂的布局。

属性

Flexbox 是通过设置 display: flex/inline-flex 来启用的,然后通过这些属性来控制布局。

        display: flex 启用Flexbox布局,将容器设置为弹性容器。
        display: inline-flex 生成一个行内级弹性容器。

1、align-items 控制子元素在交叉轴上的对齐方式。
        center:垂直居中对齐。
        flex-start:在交叉轴开始处对齐。
        flex-end:在交叉轴结束处对齐。
        stretch:默认,拉伸子元素以填充容器。
        baseline:项目的第一行文字的基线对齐。
2、justify-content 控制子元素在主轴上的对齐方式。
        center:水平居中对齐。
        flex-start:在主轴开始处对齐。
        flex-end:在主轴结束处对齐。
        space-between:均匀分布,两端贴边。
        space-around:均匀分布,项目两侧间距相等。
3、flex-direction 改变主轴的方向。
        row:默认,主轴水平从左到右。
        row-reverse:主轴水平从右到左。
        column:主轴垂直从上到下。
        column-reverse:主轴垂直从下到上。
4、flex-wrap 定义如果一条轴线排不下,如何换行。
        nowrap(默认值):不换行。
        wrap:换行,第一行在上方。
        wrap-reverse:换行,第一行在下方。
5、align-content 定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
        stretch(默认值):轴线占满整个交叉轴。
        flex-start:与交叉轴的起点对齐。
        flex-end:与交叉轴的终点对齐。
        center:与交叉轴的中点对齐。
        space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
        space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

示例

<template>
  <div style="display: flex; height: 100vh;">
    <div style="padding: 20px; flex: 0 0 200px; background-color: #f0f0f0;">左侧导航栏</div>
    <div style="padding: 20px; flex: 1; background-color: #e0e0e0;">主要内容区域</div>
  </div>
</template>

2、 Grid布局

原理

        Grid(网格布局)是一种二维布局模型,它将容器划分为行和列,子元素可以放置在这些网格单元格中。通过定义网格的结构和子元素的位置,可以实现复杂的多列布局。

优势

        二维布局能力:可以同时控制行和列的布局,适合复杂的页面结构。

        精确控制:能够精确指定元素在网格中的位置和大小。

        响应式设计:可以根据不同的屏幕尺寸调整网格布局。

属性

Grid 是通过设置 display: grid/inline - grid 来启用的,然后通过这些属性来控制布局。

        display: grid 将容器设置为块级网格容器,容器内部的子元素会根据网格布局规则进行排列。
        display: inline - grid 生成一个行内级网格容器,容器本身以行内元素的形式呈现,但其内部子元素依然遵循网格布局规则。

1、grid-template-columns 和 grid-template-rows

        这两个属性分别用于定义网格的列和行。

<div style="display: grid; grid-template-columns: 100px 200px 1fr; grid-template-rows: auto 200px;" class="container">
	<!-- 这里可以放置容器内的子元素 -->
	<div>子元素1</div>
	<div>子元素2</div>
	<div>子元素3</div>
    ...	
</div>

2、grid-template-areas

        用于定义网格区域,通过给不同的网格区域命名,可以更直观地控制子元素的位置。

<div style="display: grid; grid-template-areas: 'header header' 'sidebar main' 'footer footer'; grid-template-columns: 1fr 3fr; grid-template-rows: auto 1fr auto;" class="container">
	<div style="grid-area: header;" class="item1">
		<!-- 这里是头部内容 -->
		Header
	</div>
	<div style="grid-area: sidebar;" class="item2">
		<!-- 这里是侧边栏内容 -->
		Sidebar
	</div>
	<div style="grid-area: main;" class="item3">
		<!-- 这里是主要内容 -->
		Main Content
	</div>
	<div style="grid-area: footer;" class="item4">
		<!-- 这里是底部内容 -->
		Footer
	</div>
</div>

 3、grid-column-gap 和 grid-row-gap(属性值是 px)

        grid-column-gap 用于设置列与列之间的间距。

        grid-row-gap 用于设置行与行之间的间距。

4、justify-items 控制子元素在网格单元格内的水平对齐方式。
        start:子元素在单元格的左侧对齐。
        end:子元素在单元格的右侧对齐。
        center:子元素在单元格内水平居中对齐。
        stretch(默认值):子元素拉伸以填充整个单元格的宽度。

5、align-items 控制子元素在网格单元格内的垂直对齐方式。
        start:子元素在单元格的顶部对齐。
        end:子元素在单元格的底部对齐。
        center:子元素在单元格内垂直居中对齐。
        stretch(默认值):子元素拉伸以填充整个单元格的高度。

6、justify-content 当网格的总宽度小于容器宽度时,控制整个网格在容器内的水平对齐方式。
        start:网格在容器的左侧对齐。
        end:网格在容器的右侧对齐。
        center:网格在容器内水平居中对齐。
        space-between:网格项均匀分布,两端贴边。
        space-around:网格项均匀分布,每个网格项两侧的间距相等。
        space-evenly:网格项均匀分布,所有间距(包括与容器边缘的间距)都相等。

7、align-content 当网格的总高度小于容器高度时,控制整个网格在容器内的垂直对齐方式。
        start:网格在容器的顶部对齐。
        end:网格在容器的底部对齐。
        center:网格在容器内垂直居中对齐。
        space-between:网格项均匀分布,两端贴边。
        space-around:网格项均匀分布,每个网格项两侧的间距相等。
        space-evenly:网格项均匀分布,所有间距(包括与容器边缘的间距)都相等。

示例

<template>
  <div style="display: grid; grid-template-columns: 200px 1fr; grid-template-rows: auto 1fr auto; grid-template-areas: 'header header' 'nav main' 'footer footer'; height: 100vh;"
    class="grid-container">
    <header style="grid-area: header; background-color: #f0f0f0; padding: 20px;" class="grid-item" >
      头部
    </header>
    <nav style="grid-area: nav; background-color: #e0e0e0; padding: 20px;" class="grid-item" >
      导航栏
    </nav>
    <main style="grid-area: main; background-color: #d0d0d0; padding: 20px;" class="grid-item" >
      主要内容
    </main>
    <footer style="grid-area: footer; background-color: #f0f0f0; padding: 20px;" class="grid-item" >
      底部
    </footer>
  </div>
</template>

 3、组合布局

原理

        在实际项目中,通常会结合使用Flexbox和Grid布局,充分发挥它们的优势。例如,在一个

页面中,整体布局使用Grid,而某个局部区域使用Flexbox。 

优势

        灵活性最大化:可以根据不同的需求选择最合适的布局方式。

        适应复杂场景:能够处理各种复杂的页面结构。

示例

<template>
  <div  class="grid-container" style="display: grid; grid-template-columns: 1fr; grid-template-rows: auto 1fr auto; height: 100vh;" >
    <header class="grid-item" style="background-color: #f0f0f0; padding: 20px;" >
      头部
    </header>
    <div class="flex-container grid-item" style="display: flex; padding: 20px;" >
      <div class="flex-item" style="flex: 0 0 200px; background-color: #e0e0e0; padding: 20px;" >
        侧边栏
      </div>
      <div class="flex-item main-content" style="flex: 1; background-color: #d0d0d0; padding: 20px;" >
        主要内容
      </div>
    </div>
    <footer class="grid-item" style="background-color: #f0f0f0; padding: 20px;" >
      底部
    </footer>
  </div>
</template>

4、基于组件的布局

原理

        将页面拆分成多个组件,每个组件负责特定的功能或区域。通过组合这些组件来实现整个页

面的布局。这种方式符合Vue的组件化开发思想,提高了代码的可维护性和复用性。

优势

        可维护性高:每个组件独立开发和维护,降低了代码的耦合度。
        复用性强:可以在不同的页面或项目中重复使用组件。

示例

<template>
  <div id="app">
    <HeaderComponent />
    <MainComponent />
    <FooterComponent />
  </div>
</template>

<script setup>
import HeaderComponent from './components/HeaderComponent.vue'
import MainComponent from './components/MainComponent.vue'
import FooterComponent from './components/FooterComponent.vue'
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2341439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

URP-UGUI交互功能实现

一、非代码层面实现交互&#xff08;SetActive&#xff09; Button &#xff1a;在OnClick&#xff08;&#xff09;中添加SetActive方法&#xff08;但是此时只首次有效&#xff09; Toggle &#xff1a;在OnClick&#xff08;&#xff09;中添加动态的SetActive方法 &#…

UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025

UniGoal的提出了一个通用的零样本目标导航框架&#xff0c;能够统一处理多种类型的导航任务 &#xff08;如对象类别导航、实例图像目标导航和文本目标导航&#xff09;&#xff0c;而无需针对特定任务进行训练或微调。 它的特点是 图匹配与多阶段探索策略&#xff01;&#x…

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器&#xff0c;专门设计用于在FPGA上运行。作为软核处理器&#xff0c;Nios II可以通…

Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介

前言 从来没有总结过Linux/Android系统中进程间的通信方式和线程间的同步方式&#xff0c;这个专栏就系统总结讨论一下。首先从标题可知&#xff0c;讨论问题的主体是进程和线程、通信和同步&#xff1b;在这里默认你理解进程和线程的区别。通信和同步有什么概念上的区别&…

Windows:注册表配置应用

0、简介 本篇博客记录一下&#xff0c;日常的系统注册表配置选项&#xff0c;以防再次遇到问题不知如何解决。 1、开机启动配置 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run :: 此位置存储了所有用户登录时需要启动的程序。 在该项下新建字符串值&#…

WebXR教学 05 项目3 太空飞船小游戏

准备工作 自动创建 package.json 文件 npm init -y 安装Three.js 3D 图形库&#xff0c;安装现代前端构建工具Vite&#xff08;用于开发/打包&#xff09; npm install three vite 启动 Vite 开发服务器&#xff08;推荐&#xff09;&#xff08;正式项目开发&#xff09; …

达梦统计信息收集情况检查

查询达梦某个对象上是否有统计信息 select id,T_TOTAL,N_SMAPLE,N_DISTINCT,N_NULL,BLEVEL,N_LEAF_PAGES,N_LEAF_USED_PAGES,LAST_GATHERED from sysstats where id IN (select id from sysobjects where upper(name)upper(&objname));可能有系统对象&#xff0c;可以增加…

【matlab】气泡图的应用

【matlab】气泡图的应用 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-weight: normal; } clear load zb_equi.mat load …

飞帆控件:在编辑模式下额外加载的库

飞帆是一个自由的控件设计平台。在飞帆中&#xff0c;我们可以很方便地创建基于 Vue 2 组件的控件&#xff0c;并使用控件来搭建网页。 他山之石&#xff0c;可以攻玉。在创建控件中&#xff0c;使用 js 、css 依赖库能让我们的控件更强大。 有些时候&#xff0c;在编辑模式下…

Super-Vlan和MUX-Vlan的原理、配置、区别

Super-Vlan 原理 Super-Vlan也叫Aggregate-Vlan。 一般的三层交换机中&#xff0c;通常是采用一个VLAN对应一个vlanif接口的方式实现广播域之间的互通&#xff0c;这在某些情况下导致了IP地址的浪费。因为一个VLAN对应的子网中&#xff0c;子网号、子网定向广播地址、子网缺…

el-table怎么显示 特殊单元格的值

1. 在 el-table-column 上绑定了 formatter 方法 formatEntityName &#xff0c;它会对每一行该列的数据&#xff08; cellValue &#xff09;进行处理。 2. 在 formatEntityName 方法中&#xff0c;尝试对传入的 cellValue 进行 JSON.parse 操作&#xff0c;并根…

2025-04-23 Python深度学习3——Tensor

文章目录 1 张量1.1 数学定义1.2 PyTorch中的张量 2 创建 Tensor2.1 直接创建**torch.tensor()****torch.from_numpy()** 2.2 依据数值创建**torch.zeros() / torch.zeros_like()****torch.ones() / torch.ones_like()****torch.full() / torch.full_like()****torch.arange() …

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理

在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理 在内网环境中&#xff0c;直接访问外部资源可能会受到限制&#xff0c;这时候配置APT和GIT的代理就显得尤为重要。本文将详细介绍如何在统信UOS和麒麟Kylin OS操作系统中配置APT和GIT的代理。 为什么需要配置APT和GIT代理&…

第十七讲、Isaaclab中使用操作空间控制器

0 前言 官方教程&#xff1a;https://isaac-sim.github.io/IsaacLab/main/source/tutorials/05_controllers/run_osc.html IsaacsimIsaaclab安装&#xff1a;https://blog.csdn.net/m0_47719040/article/details/146389391?spm1001.2014.3001.5502 有时候&#xff0c;仅使用…

基于SpringBoot的校园二手商品在线交易系统+含项目运行说明文档

基于SpringBoot的校园二手商品在线交易系统含项目运行说明文档 专注校园二手交易平台是一个基于Java的在线市场&#xff0c;专为学生设计&#xff0c;便于买卖二手商品。平台提供全面的用户管理功能&#xff0c;包括学生、管理员和二手商品卖家账户管理。商品管理功能允许用户…

详解springcloud gateway工作原理、断言、filter、uri、id、全局跨域、globalfilter等以及关键源码实现

1.gateway概念 网关就是当前微服务项目的"统一入口"程序中的网关就是当前微服务项目对外界开放的统一入口所有外界的请求都需要先经过网关才能访问到我们的程序提供了统一入口之后,方便对所有请求进行统一的检查和管理 2. 网关的主要功能 将所有请求统一经过网关网…

C++面向对象特性之继承篇

C语音是面向过程的语言&#xff0c;而C在其之上多了面向对象的特性&#xff0c;面向对象三大特性:封装性、继承性、多态性。今天主包来讲讲自己学到的关于C继承特性的知识。 一、继承是什么 继承是提高代码复用的一种重要手段。正如C的模版、泛型编程等等都是为了实现代码复用…

【AI News | 20250423】每日AI进展

AI Repos 1、suna Suna是一款完全开源的AI助手&#xff0c;旨在通过自然对话帮助用户轻松完成现实世界的任务。它作为您的数字伙伴&#xff0c;提供研究、数据分析和日常问题解决等功能&#xff0c;并结合强大的能力与直观的界面&#xff0c;理解您的需求并交付成果。Suna的工…

【学习准备】算法和开发知识大纲

1 缘起 今年&#xff08;2025年&#xff09;的职业升级结果&#xff1a;不通过。没办法升职加薪了。 需要开始完善学习&#xff0c;以应对不同的发展趋势&#xff0c;为了督促自己学习&#xff0c;梳理出相关学习大纲。 分为算法和开发两部分。 算法&#xff0c;包括基础算法和…

第七篇:linux之基本权限、进程管理、系统服务

第七篇&#xff1a;linux之基本权限、进程管理、系统服务 文章目录 第七篇&#xff1a;linux之基本权限、进程管理、系统服务一、基本权限1、什么是权限&#xff1f;2、为什么要有权限&#xff1f;3、权限与用户之间的关系&#xff1f;4、权限对应的数字含义5、使用chmod设定权…