【每天一个小笔记】06 Vue项目的Grid布局

Vue项目中grid布局的应用 grid-template-areas用于定义区域,一个区域由单个或多个单元格组成,名字相同则表示在一个区域网格元素需要指定放置于哪一个grea-area区域中,不然会不生效。 阅读详情

Grid布局基础概念

Grid布局(CSS Grid Layout)是CSS中用于创建二维布局系统的模块,允许通过行和列的组合精确控制元素位置。与Flexbox(一维布局)不同,Grid擅长处理复杂的整体页面结构。


grid 容器属性

  • display: grid; 将元素设为网格容器,子元素成为网格项。

  • display: inline-grid; 创建行内网格容器。

  • grid-template-columns 定义列数和列宽。例如 grid-template-columns: 100px 1fr 2fr; 创建三列,第一列固定 100px,剩余空间按 1:2 分配。

  • grid-template-rows 定义行数和行高。例如 grid-template-rows: auto 200px; 第一行高度自适应,第二行固定 200px。

  • grid-template-areas 通过命名区域布局。需搭配子项的 grid-area 使用

  • grid-template 简写形式,合并 grid-template-rows/columns/areas

  • gap 设置行列间距,row-gap 和 column-gap 可单独控制。例如 gap: 10px 20px; 行间距 10px,列间距 20px。

  • justify-items 控制网格项在单元格内的水平对齐(start/end/center/stretch)。

  • align-items 控制网格项在单元格内的垂直对齐(取值同 justify-items)。

  • place-items 简写形式,例如 place-items: center stretch; 垂直居中,水平拉伸

  • justify-content 当网格总尺寸小于容器时,控制整体水平分布(start/end/center/stretch/space-around/space-between/space-evenly)。

  • align-content 控制整体垂直分布(取值同 justify-content)。

  • grid-auto-columns 定义隐式创建的列的尺寸(如网格项超出定义的行列时)。

  • grid-auto-rows 定义隐式创建的行的尺寸。

  • grid-auto-flow 控制自动放置策略:

    • row(默认逐行填充)

    • column(逐列填充)

    • dense(尝试填充空白)


grid-template-columns和grid-template-rows


grid-template-areas

通过命名区域布局。需搭配子项的 grid-area ,实现效果如下图,相同命名的区域会进行合并:

对应的HTML和CSS如下:

<!-- grid-template-areas -->
<div class="property-section">
  <h3><code>grid-template-areas</code> - 定义网格区域</h3>
  <div class="property-values">
    <div class="value-item">
      使用字符串定义区域名称
    </div>
    <div class="value-item">
      点号(.)表示空单元格
    </div>
  </div>
  
  <div class="example-section">
    <div class="example-container grid-template-areas-example">
      <div class="grid-item header">Header</div>
      <div class="grid-item sidebar">Sidebar</div>
      <div class="grid-item main">Main Content</div>
      <div class="grid-item footer">Footer</div>
    </div>
    <div class="example-label">grid-template-areas定义的页面布局</div>
  </div>
</div>
.grid-template-areas-example {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: 100px 200px 100px;
  grid-template-areas: 
    "header header"
    "sidebar main"
    "footer footer";
}

.header { grid-area: header; background-color: #1d3557; }
.sidebar { grid-area: sidebar; background-color: #a8dadc; color: #1d3557; }
.main { grid-area: main; background-color: #f1faee; color: #1d3557; }
.footer { grid-area: footer; background-color: #457b9d; }

唯一限制:区域必须是矩形 

命名区域的唯一限制是:一个命名区域必须形成一个单一的矩形区域,不能是分散的、不连续的形状。


grid-template

grid-template 简写形式,合并 grid-template-rows/columns/areas。例如:

grid-template:
  "head head" 80px
  "nav main" 1fr
  / 200px 1fr;

    gap

    gap 属性用于设置网格项(grid items)之间的间距,包括行与行之间、列与列之间的间隔。它是 row-gap 和 column-gap 的简写属性,语法简洁且常用。也可通过row-gap 和 column-gap单独控制间距。

    注意事项:gap 仅作用于网格项之间,不会在网格容器的边缘(与父元素的边界)产生间距;


    justify-items

    justify-items 用于控制网格项(grid items)在水平方向上的对齐方式。它对网格容器内所有子项生效,但可通过 justify-self 为单个子项覆盖。

    .grid-container {
      display: grid;
      justify-items: center; /* 所有子项水平居中 */
      grid-template-columns: 100px 100px;
      gap: 10px;
    }
     
    

    属性值及效果:

    • start
      网格项与网格单元格的起始边缘(左对齐)对齐。

    • end
      网格项与网格单元格的结束边缘(右对齐)对齐。

    • center
      网格项在单元格内水平居中对齐。

    • stretch(默认值)
      网格项水平拉伸以填满整个单元格(除非有固定宽度限制)。


    align-items

    align-items 用于控制子元素在交叉轴(垂直于主轴)方向上的对齐方式。但可通过 align-self 为单个子项覆盖。

    .container {
      display: grid;
      align-items: center; /* 网格项向列轴中点对齐 */
    }
     
    

    属性值及效果

    • flex-start:子元素向交叉轴起点对齐(顶部或左侧)。

    • flex-end:子元素向交叉轴终点对齐(底部或右侧)。

    • center:子元素居中对齐。

    • baseline:子元素按基线对齐(文本对齐常用)。

    • stretch(默认值):子元素拉伸以填满交叉轴空间(需未设置固定高度/宽度)。


    place-items

    place-items 用于同时设置 align-items 和 justify-items 的值。它在 Grid 和 Flexbox 布局中非常有用,可以快速定义子元素在容器内的对齐方式。如果只提供一个值,该值将同时应用于两个属性。

    place-items: <align-items> <justify-items>;
     
    

    支持的值为:

    • start:对齐到容器的起始边缘。

    • end:对齐到容器的结束边缘。

    • center:居中对齐。

    • stretch(默认):拉伸以填充容器。


    justify-content

    justify-content 用于控制主轴(main axis)上子元素的排列方式。该属性决定了容器内的剩余空间如何分配给子元素或子元素之间的间隔。

    justify-content: flex-start;
     
    

    支持的值为:

    • start: 左对齐
    • end: 右对齐
    • center: 居中对齐
    • stretch: 拉伸填满容器
    • space-around: 每个项目两侧间隔相等
    • space-between: 两端对齐,项目间间隔相等
    • space-evenly: 项目间和边缘间隔都相等


    align-content

    align-content 用于控制容器内多行或多项在交叉轴(垂直于主轴)上的对齐方式。

    .container {  
      display: grid;  
      grid-template-rows: repeat(3, 100px);  
      align-content: center; /* 垂直居中所有行 */  
    }  
     
    

    属性值及效果:

    • flex-start:多行紧贴容器起始端对齐。

    • flex-end:多行紧贴容器末端对齐。

    • center:多行居中。

    • space-between:首行贴起始端,末行贴末端,其余行均匀分布。

    • space-around:每行两侧间距均等(行间间距为边缘间距的两倍)。

    • space-evenly:所有间距(包括边缘)完全均等。

    • stretch(默认):拉伸行以填满容器高度。


    place-content

    place-content 用于同时设置 align-content 和 justify-content 的值。它适用于网格(Grid)和弹性盒子(Flexbox)布局,用于控制容器内项目的整体对齐方式。

    语法

    place-content: <align-content> <justify-content>;
     
    
    • 若只指定一个值,该值会同时应用于 align-content 和 justify-content。

    • 若指定两个值,第一个为 align-content,第二个为 justify-content。

    通用对齐值:

    • start:项目向容器起始端对齐。
    • end:项目向容器末端对齐。
    • center:项目居中对齐。
    • stretch(默认):项目拉伸以填充容器(仅对 align-content 有效)。

    grid-auto-colunms/grid-auto-rows

    grid-auto-columns 和 grid-auto-rows 是用于控制隐式网格轨道(即未被显式定义的网格轨道)的尺寸。当网格项目被放置在显式定义的网格之外时,浏览器会自动创建隐式轨道,此时这两个属性会生效。

    .container {
      grid-auto-columns: <track-size>;
      grid-auto-rows: <track-size>;
    }
     
    


    grid-auto-flow

    grid-auto-flow 用于控制自动放置的网格项目(grid items)在网格容器中的排列方式。当网格项目数量超过显式定义的网格轨道(tracks)时,该属性决定了剩余项目的自动排列规则。

    grid-auto-flow: [row | column] || dense;
     
    
    • row

      默认值。网格项目按行优先顺序排列,即从左到右填充每一行,直到所有项目放置完毕。若空间不足,剩余项目会移动到下一行。

    • column

      网格项目按列优先顺序排列,即从上到下填充每一列,直到所有项目放置完毕。若空间不足,剩余项目会移动到下一列。

    • dense

      启用密集填充模式。网格会尝试填补之前因项目过大而留下的空白区域。可与 row 或 column 组合使用(如 grid-auto-flow: row dense)。


    grid-column-start / grid-column-end / grid-row-start / grid-row-end

    这些属性用于定义网格项在列方向上的起始和结束位置。通过指定网格线的编号或名称来控制项目占据的列范围。

    • 数值:直接使用网格线编号(从1开始)。例如:grid-column-start: 2 表示从第2条垂直线开始。

    • span 关键字:结合数值表示跨越的列数。例如:grid-column-end: span 3 表示跨越3列。

    • 命名线:如果网格定义了命名线(如 [sidebar-start]),可直接使用名称:grid-column-start: sidebar-start。

    .item {
      grid-column-start: 1;     /* 从第1条垂直线开始 */
      grid-column-end: span 2;   /* 跨越2列 */
    }
     
    

    grid-row-start/end 指定行线位置,用法同列属性。


    grid-column 和 grid-row

    简写形式:

    • grid-column:合并 grid-column-start 和 grid-column-end。
      语法:grid-column: <start> / <end>
      示例:grid-column: 1 / span 3

    • grid-row:合并 grid-row-start 和 grid-row-end。
      语法:grid-row: <start> / <end>
      示例:grid-row: 2 / 5

    .item {
      grid-column: 1 / span 2;  /* 从第1列开始,跨越2列 */
      grid-row: 2 / 4;           /* 从第2行到第4行 */
    }
    

    grid-area

    grid-area 用于定义网格项在网格中的位置和大小。它可以合并 grid-row-start、grid-column-start、grid-row-end 和 grid-column-end 四个属性,或直接指定网格区域的名称。

    grid-area 指定项目放置的区域:

    grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
    grid-area: <area-name>;
     
    
    • 可接受 4 个线编号(row-start/column-start/row-end/column-end)
    • 或使用 grid-template-areas 定义的名称
      • .container {
          grid-template-areas: "header header" "sidebar main";
        }
        .header {
          grid-area: header;
        }
         
        

    justify-self

    justify-self 单个项目的水平对齐(覆盖容器的 justify-items)。

    align-self

    align-self 单个项目的垂直对齐(覆盖容器的 align-items)。

    place-self

    place-self 简写形式,例如 place-self: center end;。

    函数与关键字

    repeat() 函数简化重复模式

    repeat() 函数在编程中常用于字符串或数组的重复操作

    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(2, 100px);
    

    minmax() 定义尺寸范围

    minmax() 允许网格轨道在响应式布局中动态调整,确保内容在不同屏幕尺寸下保持可读性。例如:

    .container {
      display: grid;
      grid-template-columns: minmax(200px, 1fr) minmax(300px, 2fr);
    }
     
    
    • 第一列的最小宽度为 200px,最大宽度为 1fr。
    • 第二列的最小宽度为 300px,最大宽度为 2fr。

    auto-fill和auto-fit 

     auto-fill 和 auto-fit 是 CSS Grid 中用于自动填充网格轨道的两种模式,常用于 repeat() 函数中(如 grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)))。两者的核心区别在于处理多余空间的方式:

    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    
    • auto-fill
      尽可能创建更多的轨道,即使这些轨道没有内容填充。多余空间会被保留,轨道会根据 minmax() 的规则拉伸或收缩。
      适用于不确定项目数量但希望保持网格布局完整性的场景。

    • auto-fit
      创建轨道的逻辑与 auto-fill 相同,但会折叠所有空轨道(将它们的宽度合并到剩余空间中)。
      适用于项目数量较少时,希望内容填充可用空间的场景。

    /* auto-fill:始终保留轨道结构 */
    .grid-container {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
    }
    
    /* auto-fit:折叠空轨道 */
    .grid-container {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    }
     
    

    效果对比

    • 若容器宽度为 500px,每个项目最小 100px:
      • auto-fill 会生成 5 列(100px × 5),即使只有 3 个项目,剩余 2 列为空轨道。
      • auto-fit 会生成 3 列,剩余空间均分给这 3 列(列宽 > 100px)。

    我记下的内容还是比较粗糙,更加具体形象的内容可以参考CSS Grid 网格布局教程

    vue——布局(flex、gride) 前端布局发展史: 初代table布局 CSS+div布局 Flex布局(移动端较友好) grid布局(2020年) Flex布局: 实例1用flex布局制作导航栏 flex:1表示下面的综合: flex-grow : 1; // 这意味着div将以与窗口大小相同的比例增长 flex-shrink : 1; // 这意味着div将以与窗口大小相同的比例缩小 flex-basis : 0; // 这意味着div没有这样的起始值,并且将根据可用的屏幕大小占用屏幕。例如: -. 阅读详情

    相关推荐

    vue-grid-layout详解

    你可以根据项目需求自定义每个GridItem的样式。以下是一个简单的样式示例。

    Caleb的博客 8265

    Vue Grid Layout -️ 适用Vue.js的栅格布局系统(保姆级使用教程)

    在具有拖拽组成页面、组件动态调整大小、边缘碰撞监测的系统中,使用该布局无疑是最合适的。该栅格系统目前对 vue2 的支持是最好的,vue3 是需要用插件支持的,会在小节详细讲解。栅格布局难度不大,但是要理解里面的原理,并实际应用到自己的项目开发,还要结合自己项目的实际情况。

    ~朴:shu的博客 5万+

    vue3拖拽布局实现Grid Layout Plus

    在前端开发的世界中,布局管理是构建用户界面的核心任务之一。Vue 3,作为当下最流行的前端框架之一,以其响应式和组件化的特性,为开发者提供了强大的工具集。今天,我们将深入探索一个专为 Vue 3 设计的栅格布局系统——Grid Layout Plus。

    qq_63310300的博客 3334

    Vue3栅格(Grid)

    基于行(Row)和列(Col)来实现的24 栅格系统,支持:水平区块间隔;响应式区块间隔;垂直区块间隔;响应式垂直区块间隔;左右偏移;自定义排版方式;自定义对齐方式;flex 填充;响应式布局等;总之,功能丰富,简单易用,总能满足你的想象😁😁

    Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 5014

    Vue-grid-layout实现web拖拽布局功能

    最近在完成web端在线绘图功能时,需要开发一个从左侧拖拽一种图标到画布中。调研了非常多种现在做拖拽布局的组件,调研的地址是:https://vuejsexamples.com/tag/drag/ 经过比较,选择了一款优秀的可拖拽框架,vue-grid-layout。 npm安装 npm install vue-grid-layout --save 使用demo <grid-layout :layout.sync="layout" :col-n

    佳瑞的博客 6710

    超越音频!STM32 SAI接口在AD7768高速ADC采集中的妙用(含PCB布局指南)

    本文深入探讨了如何将STM32的SAI接口应用于AD7768高速ADC的数据采集系统,超越了其传统的音频应用范畴。文章详细解析了SAI协议与ADC时序的匹配方法,提供了从CubeMX配置、DMA数据搬运到关键PCB布局指南的完整实战方案,旨在帮助工程师实现稳定、高精度的工业级高速数据采集。

    efc12345678的博客 304

    Vue Grid Layout - 适用Vue.js的栅格布局系统(项目实例)

    Vue-Grid-Layout 基于Vue.js 的栅格布局系统,在拖拽布局的项目中可以借鉴一下;本文做项目实例,望参考,有问题欢迎留言讨论。

    ~朴:shu的博客 1万+

    source tree clone error:fatal remote error: Repository not found

    source tree clone error:fatal remote error: Repository not found

    Linda的前端开发路 3077

    vue中如何使用 ECharts 提供的多种布局方式,如 grid、grid3D、geo 等

    TOC/TOC。

    BradenHan的专栏 3175

    AWS 小白书 [1] 全球架构

    小白应该知道的 AWS 知识

    boshansolo的博客 704

    手把手教你用8位单片机IO口直接驱动WS2812灯带(附完整代码和避坑指南)

    本文详细介绍了如何使用8位单片机IO口直接驱动WS2812灯带,包括硬件准备、时序生成、色彩引擎与特效算法的实现,以及调试技巧与性能优化。通过汇编语言优化和精确时序控制,实现高效的LED驱动和炫酷的彩虹灯效,适合嵌入式开发者和硬件爱好者参考。

    weixin_42696271的博客 304

    如何手撸一个简易 Grid 拖拽布局

    到目前为止基本上的 Grid 拖拽布局大致实现了,已经满足基本业务需求了,当然有需要朋友还可以在上面增加支持拖拉调整大小、碰撞后自动调整位置等等。

    QD_ANJING的博客 1748

    AI辅助专利撰写实战:30分钟高效产出发明专利初稿

    在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

    weixin_34253126的博客 494

    vue项目中区域拖拽修改大小, Vue Grid Layout -️ 适用Vue.js的栅格布局系统

    vue项目中区域拖拽修改大小, Vue Grid Layout -️ 适用Vue.js的栅格布局系统

    zhang_zan 4237

    C#构建企业级AI Agent框架:从架构到实践

    AI Agent作为智能系统的核心组件,通过结合大语言模型(LLM)与规划引擎,实现了从简单对话到复杂任务处理的跨越。其关键技术包括记忆系统(RAG架构)和工具调用机制,前者通过向量数据库实现知识检索,后者则扩展了Agent的功能边界。在企业级应用中,这类系统能显著提升效率,如HR政策查询、IT故障排查等场景。C#凭借其强类型和高效性能,成为实现这类系统的理想选择,特别是在需要与现有企业系统集成的场景下。通过合理设计工具接口和安全防护措施,可以构建出既强大又可靠的智能助手。

    weixin_33672109的博客 383

    爆改YOLOv8 | PSA注意力机制融合入YOLOv8

    yolov8,PSA注意力,即插即用

    weixin_43986124的博客 2497

    vue-grid-layout组件的改装--暴露布局方法

    vue-grid-layout是一个非常优秀的vue栅格拖动布局的组件,使用方法请参考官网 属性 GridLayout参数: layout 类型:Array 必需:true 这是网格的初始布局。 值必须是 Object 项的Array。 每个项目必须有 i,x,y,w 和 h proprties。 有关详细信息,请参阅 GridItem 文档 below。 colNum 类型:Number 必需...

    weixin_42839080的博客 2万+

    蓝牙模块HM-10手册

    蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

    手撸一个简易 Grid 拖拽布局

    到目前为止基本上的 Grid 拖拽布局大致实现了,已经满足基本业务需求了,当然有需要朋友还可以在上面增加支持拖拉调整大小、碰撞后自动调整位置等等。

    weixin_45727472的博客 1008

    Statistics and Machine Learning Toolbox

    Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

    win10 跳过U8环境检测的IE WebControls.rar

    win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

    一个可以拖拽的vue布局方案

    vue-grid-layout 一个可以拖拽的 vue 布局方案 https://www.cnblogs.com/yasoPeng/p/9961732.html // 地址 下载 install with npm npm install vue-grid-layout --save ​ install with yarn yarn add vue-grid-layout 引入 import Vue...

    weixin_37682345的博客 6373

    最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

    Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

    vue-grid-layout+component 实现动态布局

    {x: 0,y: 0,w: 6,h: 5,i: “0”,component: “test1”},//0列0行 宽为5块,高为5*rowHeight{x: 6, y: 0, w: 6, h: 5, i: “1”, component: “test2” },// 列为6(因为上一块的宽度是6){x: 0,y: 5,w: 12,h: 10,i: “2”,component: “test3”},//自己算一算吧前端校招精编面试解析大全点击这里免费获取完整版pdf查看15597)]

    2401_84092809的博客 1402

    Vue Grid Layout -️ 适用Vue.js的栅格布局系统,在vue3+上使用

    官网地址:https://madewithvuejs.com/vue-grid-layout中文文档:https://github.com/jbaysolutions/vue-grid-layout/blob/master/README-zh_CN.md可拖拽可调整大小静态部件(不可拖拽、调整大小)拖拽和调整大小时进行边界检查增减部件时避免重建栅格可序列化和还原的布局自动化RTL支持响应式。

    wang13679201813的博客 9084

    vue垂直布局_使用vue-grid-layout完成桌面拖拽布局功能

    最近在用写公司项目里的一个桌面布局功能 需要使用到vue-grid-layout看了下网上的 基本上只有demo的使用,这个插件虽然挺不错但是缺陷也很大.没有下边界,发生碰撞的时候块会无限的往下移动https://github.com/jbaysoluti...先撸一遍demo吧:layout="layout":auto-size="false":col-num="20":row-height="...

    weixin_39917718的博客 1045

    笔记 grid 布局全解

    文章目录声明概念容器属性定义设置行列长宽设置间隙设置排列方式排列网格和项目的位置排列网格排列项目 声明 本笔记大部分内容归纳来源于阮一峰老师的 grid布局教程 。 概念 网格布局类似表格,但是比表格有更高的可控性。网格布局只关系父子级元素,和弹性布局类似,以下术语参照个人理解。 术语: 容器:标识网格布局的根容器。 项目:是被容器包裹的第一层元素。 行列:被网格线分隔成的逐行逐列。(类似表格的行...

    qq_42881675的博客 1149

    grid 布局案例之grid-template-areas和grid-column的使用

    分别使用grid-template-areas和grid-column两种方法进行同样效果布局。

    小哈力----一个小前端工程师 1283
    上一篇: Dify双向MCP实操:手把手教你玩转AI应用互通
    下一篇: 【每天一个小笔记】02 LangChain的四大消息类型
    凸凹恼
    博客等级 码龄5年 5粉丝 21原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值