[Css]Grid属性简单陈列(适合开发时有基础的快速过一眼)

news2024/10/6 8:22:09

[css进阶]Grid属性简介

文章目录

  • [css进阶]Grid属性简介
    • 典型需求
    • 网格容器的属性
      • display
      • grid-template-columns和grid-template-rows
      • grid-template-areas
      • grid-template
      • grid-column-gap grid-row-gap
      • grid-gap
      • justify-items
      • align-items
      • justify-content
      • align-content
      • grid-auto-columns和grid-auto-rows
      • grid-auto-flow
      • grid
    • 网格项目的属性
      • grid-column-start, grid-column-end, grid-row-start, grid-row-end
      • grid-column 和 grid-row
      • grid-area
      • justify-self
      • align-self
  • Demo
      • Demo1
      • Demo2

参考

  • https://juejin.cn/post/6844903550225514509
  • https://gridbyexample.com/examples/

典型需求

先来看一个需求:一行排3个元素,宽度小于一定的时候,变成一行排列两个。
其实antd的Grid组件等栅格布局都能很好地实现这个功能,不过下面现在先用gird属性来实现,以此更好地理解它的标准和原理。

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

@media (max-width: 1600px) {
  .grid {
     grid-template-columns: repeat(2, 1fr);
  }
}

.grid > div {
  padding: 8px;
  color: white;
  background: grey;
}
<div class="grid">
  <div>content</div>
  <div>content</div>
  <div>content</div>
  <div>content</div>
  <div>content</div>
  <div>content</div>
  <div>content</div>
</div>

屏幕不够大,一行就排两个。

image.png

当屏幕够大时,变成这样。

image.png

网格容器的属性

display

  • gird: 生成块级网格
  • inline-grid: 生成内联网格
  • subgrid: 嵌套网格(继承父网格)
.container{
  display: grid | inline-grid | subgrid
}

grid-template-columns和grid-template-rows

使用空格分隔的值列表来定义网格的列和行。这些值表示轨道大小,他们之间的空间表示网格线值

  • 可以是网格中的空闲空间的长度,百分比, 或分数
  • 线的名称 例如, 在网格轨迹之间流出空白区域时, 网格线会自动分配数字名称
.container{
  display: grid;
  grid-template-columns: 40px 50px auto 50px 40px;
  grid-template-rows: 25% 100px auto;
}


.container{
  grid-template-columns: [first] 40px [line2] 50px [line2] auto [line3] auto [col4-start] 50px [five] 5px; 
  grid-template-rows: [row1-start] 25% [row1-end] 100px [thrid-line] auto [last-line];
}
.container{
  grid-template-columns: repeat(3, 20px [col-start]) 5%;
}

设置单位为fr网格会允许您设置的网格轨道大小为网格容器的自由空间的一小部分,例如,这会将每个项目设置为容器宽度的三分之一。

.container {
  grid-template-columns: 1fr 1fr 1fr;
}

可用空间是在任何非弹性项目之后计算的,在这个例子中,fr单元可用空间的总量不包括50px

.container{
  grid-template-columns: 1fr 50px 1fr 1fr;
}

grid-template-areas

通过应用grid-area属性指定网格空间的名称来定义网格模板。 值:

  • Xxx: 指定的网格空间的名称grid-area
  • . : 表示一个空的网格单元
  • none: 没有定义网格空间
.container{
  grid-template-areas: "<grid-area-name> | . | none | ...";
}

Demo

.container{
  display: grid;
  grid-template-columns: repeat(4, 50px);
  grid-template-rows: auto;
  grid-template-areas: 
    "header header header header"
    "main main . slidebar"
    "footer footer footer footer"
}
.item-a{
  grid-area: header;
}
.item-b{
  grid-area: main;
}
.item-c{
  grid-area: slidebar;
}
.item-d{
  grid-area: footer;
}

img

grid-template

一个简短设置grid-template-rows, grid-template-columnsgrid-template-areas在一起的声明,可读性不太好,不建议使用。

grid-column-gap grid-row-gap

指定网格线的大小值:

.container{
  display: grid;
  grid-template-columns: repeat(4, 50px);
  grid-template-rows: repeat(4, 80px);
  grid-column-gap: 10px;
  grid-row-gap: 15px;
}

grid-gap

速记grid-row-gapgrid-column-gap 值:

  • : 长度值
.container {
  grid-gap: <grid-row-gap><grid-column-gap>
}

justify-items

沿着行轴对齐网格内的内容(而不是align-items沿着列轴对齐),适用于所有网格容器内的网格项目 值:

  • start: 将内容对齐到网格区域的左端
  • end: 将内容对齐到网格区域的右端
  • center: 将网格区域中心的内容对齐
  • stretch: 填充网格区域的整个宽度
.container{
  justify-items: start;
}

此行为也可以通过justify-self在个别网格项目上设置

align-items

沿列轴对齐网格的内容(而不是justify-items沿着行轴对齐)。该值适用于容器内的所有网格项目 值:

  • start: 将内容对齐到网格空间的顶部
  • end: 将内容对齐到网格空间的底部
  • center: 将内容对齐到网格空间的中心
  • stretch: 填充网格空间的整个高度
.container {
  align-items: start;
}

justify-content

有时,网格的总大小可能小于其网格容器的大小, 如果您的所有网格项目都是用非灵活单位进行大小调整,就可能发生这种情况。这时候可以设置网格容器内的网格的对齐方式,此属性沿着行轴对齐网络值:

  • start: 将网格对齐到网格容器的左端
  • end: 将网格对齐到网格容器的右端
  • center: 将网格对齐到网格容器的中心
  • stretch: 调整网格的大小以允许网格填充网格容器的整个宽度
  • space-around: 在每个网格项目之间分配一个均匀的空间,在两个端分配一半的空间
  • space-between: 在每个网格项目之间分配一个均匀的空间,在两个端没有分配空间
  • space-evenly:在每个网格项目之间分配一个均匀的空间,包括两个远端 例子
.container{
  justify-content: start;
}

align-content

此属性和justify-content一样,只不过是沿着列轴对齐网格 值:

  • start: 将网格对齐到网格容器的顶部
  • end: 将网格对齐到网格容器的底部
  • cneter: 将网格对齐到网格容器的中心
  • stretch: 调整网格项目的大小, 以允许网格项目填充网格容器的整个高度
  • space-around: 在每个网格项目之间分配均匀的空间,在两端分配一半的空间
  • sapce-between: 在每个网格项目之间分配一个均匀的空间,在两端没有空间
  • space-evenly: 在每个项目之间分配一个均匀的空间, 包括两端 例子:
.container{
  align-content: start;
}

grid-auto-columns和grid-auto-rows

指定任何自动生成的网格轨道的大小,当明确声明超出定义的网格空间的行或列(通过grid-template-rows / grid-template-columns)时,会创建隐式网格轨道值:

  • 可以长度, 百分比, 或分数(使用fr单位) 如何创建隐式网格轨道, 例子:
.contaienr{
  display: grid;
  grid-template-columns: repeat(2, 60px);
  grid-template-rows: repeat(2, 90px);
}

.container{
  grid-auto-columns: 60px;
}

grid-auto-flow

如果您没有明确放置在网格上的网格项目,则自动分配算法会自动分配这些项目。该属性控制自动分配算法的原理 值:

  • column: 告诉自动分配算法依次填充每行,根据需要添加新行
  • row: 告诉自动分配算法一次填充每列,根据需要添加新列
  • dense: 告诉自动分配算法,如果之后出现较小的项目,则尝试在网格中尽早填充空间 dense可能导致您的项目出现乱序。

例子:

<section class="container">
  <div class="item-a">item-a</div>
  <div class="item-b">item-b</div>
  <div class="item-c">item-c</div>
  <div class="item-d">item-d</div>
  <div class="item-e">item-e</div>
</section>

你定义了一个五行两列的网格,并设置grid-auto-flowrow

.container{
  display: grid;
  grid-template-columns: repeat(5, 60px);
  grid-template-rows: repeat(2, 30px);
  grid-auto-flow: row;
}

grid

简写为所有设置下列属性的单一声明: grid-template-rows,grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columnsgrid-flow

网格项目的属性

grid-column-start, grid-column-end, grid-row-start, grid-row-end

通过引用特定的网格线来确定网格内项目的位置。 值:

  • : 可以是一个数字来引用一个编号的网格线,或者一个名称来引用一个命名的网格线
  • span : 项目将跨越提供的网格轨道数量
  • span : 项目将跨越, 直到与它提供的名称命中
  • auto: 自动分配
.item-a {
  grid-column-start: 2;
  grid-column-end: five;
  grid-row-start: row1-start
  grid-row-end: 3
}

grid-column 和 grid-row

简写为grid-column-start+grid-column-endgrid-row-start+grid-row-end 值:

.item-c {
  grid-column: 3 / span 2;
  grid-row: third-line / 4;
}

grid-area

为项目提供一个名称,以便可以通过使用grid-template-areas属性创建的模板来引用他。或者属性可以用作grid-row-start+grid-column-start+grid-row-end+grid-column-end 值:

  • : 你选择的名称
  • / / / :可以是数字或命名行
.item {
  grid-area:  <name> | <row-start> / <column-start> / <row-end> / <column-end>;
}
.item-d{
  grid-area: header;
}

.item-d {
  grid-area: 1 / col4-start / last-line / 6
}

justify-self

沿着行轴对齐网格的内容,此属性适用与单个网格项目的内容 值:

  • start: 将内容对齐到网格空间的左端
  • end: 将内容对齐到网格空间的右端
  • center: 将网格空间中心的内容对齐
  • stretch: 填充网格空间的整个宽度
.item {
  justify-self: start | end | center | stretch;
}

align-self

沿列轴对齐网格内的内容,此值适用与单个网格项目内的内容 值

  • start: 将内容对齐到网格空间的顶部
  • end: 将内容对齐到网格空间的底部
  • center: 将网格空间中心的内容对齐
  • stretch: 填充网格空间的整个高度
.item {
  align-self: start | end | center | stretch;
}

Demo

更多demo:https://gridbyexample.com/examples/

Demo1

1个item占用一行

.father{
  display: grid;
  grid-template-columns: 416px minmax(366px, 416px);
}

.son{
  grid-column-start: span 1
}

Demo2

<div class="wrapper">
  <div class="box header">Header</div>
  <div class="box sidebar">Sidebar</div>
  <div class="box content">Content
    <br /> More content than we had before so this column is now quite tall.</div>
  <div class="box footer">Footer</div>
</div>
body {
  margin: 40px;
}

.sidebar {
    grid-area: sidebar;
  }

  .content {
    grid-area: content;
  }

  .header {
    grid-area: header;
  }

  .footer {
    grid-area: footer;
  }


  .wrapper {
    display: grid;
    grid-gap: 10px;
    grid-template-columns: 120px 120px 120px;
    grid-template-areas:
    "....... header header"
    "sidebar content content"
    "footer  footer  footer";
    background-color: #fff;
    color: #444;
  }


.box {
  background-color: #444;
  color: #fff;
  border-radius: 5px;
  padding: 10px;
  font-size: 150%;
}

.header,
.footer {
  background-color: #999;
}

img

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

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

相关文章

【面试题】ES6 如何将 Set 转化为数组

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库Set 是 ES6 中新增的一种集合类型&#xff0c;类似于数组&#xff0c;但其成员的值是唯一的&#xff0c;即不会重复。关于Set&#xff0c;可以阅…

Leaf说明

什么是Leafleaf是叶子的意思我们使用的Leaf是美团公司开源的一个分布式序列号(id)生成系统我们可以在Github网站上下载项目直接使用为什么需要Leaf上面的图片中是一个实际开发中常见的读写分离的数据库部署格式专门进行数据更新(写)的有两个数据库节点它们同时新增数据可能产生…

ThinkPHP5篮球培训报名系统

有需要请私信或看评论链接哦 可远程调试 ThinkPHP5篮球培训报名系统一 介绍 此篮球培训报名系统基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。用户可注册登录&#xff0c;充值&#xff0c;报名&#xff0c;反馈信息等&…

手摸手快速入门 正则表达式 (Vue源码中的使用)

vue2源码 在 vue2 源码的 src\compiler\parser\html-parser.js 文件中 里面有大量的正则表达式&#xff0c;如下图 可以看到非常的长&#xff0c;不是我说&#xff0c;就前几行&#xff0c;如果没有相关的 正则表达式 的工具&#xff0c;我可能就被劝退了&#x1f62d; 这里…

反沙箱CobaltStrike木马加载器分析

前言 近日&#xff0c;笔者参加了浙江护网&#xff0c;在攻击队停止攻击的那一天凌晨&#xff0c;Windows服务器被攻破大量失分&#xff0c;早晨溯源时拿到了这一份名为chrome.exe的木马样本。 木马HASH SHA256:7fbe93d7c29b4ea4ce918f3d16a74d2930120f44d00862bdc0a1f82899…

ubuntu server系统树莓派安装mysql8.0开启远程访问

文章目录前言博客一、安装mysql8.0二、创建一个远程访问的新用户三、在MySQL配置文件中启用远程访问。四、navicat15连接mysql8.0返回10061chatgpt回复前言 百度了半天没解决&#xff0c;问了下chatgpt成功解决了…… 博客 一、安装mysql8.0 确认MySQL 8.0服务器已安装并正在…

【ESP32-S3】Pycharm 使用 microPython 教程(避坑)

一、下载Pycharm等操作 1.百度云下载链接 链接&#xff1a;https://pan.baidu.com/s/1tkbMzS5B_v-Cn4WQlTqS3Q?pwd0108 提取码&#xff1a;0108 2.安装 按照压缩包中的教程来&#xff0c;你懂的。 二、配置microPython环境 1.安装 microPython 插件 1.1 File > Sett…

【云原生】k8s之Yaml文件详解

一、K8S支持的文件格式 kubernetes支持YAML和JSON文件格式管理资源对象。 JSON格式&#xff1a;主要用于api接口之间消息的传递YAML格式&#xff1a;用于配置和管理&#xff0c;YAML是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 1、yaml和json的主…

企业级信息系统开发学习笔记1.5 初探Spring AOP

文章目录零、本讲学习目标一、Spring AOP&#xff08;一&#xff09;AOP基本含义&#xff08;二&#xff09;AOP基本作用&#xff08;三&#xff09;AOP与OOP对比&#xff08;四&#xff09;AOP使用方式&#xff08;五&#xff09;AOP基本概念二、提出游吟诗人唱赞歌任务&#…

手把手教你做插件(2)模块大串联

0&#xff0c;前言 这篇文章笔记比较简略&#xff0c;大部分的操作都是和上一篇文章重复了&#xff0c;建议先看上一节文章&#xff0c;直达电梯&#xff1a;UE4 手把手教你做插件&#xff08;1&#xff09; 从代码引用插件_asiwxy的博客-CSDN博客UE4 手把手教你创建插件https:…

Windows10神州网信政府版麦克风、摄像头的使用

Windows10神州网信政府版默认麦克风摄像头是禁用状态&#xff0c;此禁用状态符合版本规定。 在录课和直播过程中&#xff0c;如果需要使用麦克风和摄像头的功能&#xff0c;可以这样更改&#xff1a; 1、鼠标右键点击屏幕左下角的开始菜单图标&#xff0c;选择windows中的“运…

[6/101] 101次软件测试面试之经典面试题剖析

01、自我介绍答&#xff1a;大家好&#xff0c;我是一名软件测试工程师&#xff0c;但我更喜欢称自己为“软件bug捕手”。我相信&#xff0c;软件测试工程师的使命就是让软件更加健壮、更加可靠、更加美好。我们就像是一群“特警”&#xff0c;在黑暗的代码中寻找漏洞和缺陷&am…

spring boot——自定义依赖实现自动配置

需求 要实现的功能是&#xff1a;实现一个可以支持miniooss两种方式&#xff0c;上传下载文件的自定义依赖。其中还包括一些创建桶、删除桶、删除文件等功能&#xff0c;但是最主要的是实现自动配置。 如果对spring理解很深的话&#xff0c;自动配置这些东西很容易理解&#…

php获取api接口数据的方法

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

传输层TCP与UDP协议

目录 传输层 传输层功能 传输层所提供的服务 传输层的两个协议 TCP协议与UDP协议 端口 端口分类 IP地址和端口的关系 UDP协议 前言&#xff1a; UDP报文格式 检验和的伪首部 伪首部内容 TCP协议 TCP报文格式 TCP协议数据段的理解 TCP的伪首部 伪首部内容 标…

基于Jeecgboot前后端分离的ERP系统开发系列--出库单(3)

继续对销售出库单进行完善与处理 一、列表显示状态 目前先给出库表单两种状态&#xff0c;未审核与审核通过状态&#xff0c;前端通过下面调整 { title:状态, align:"center", dataIndex: status, customRender:f…

Netty(四):优化与源码

文章目录1. 优化1.1 扩展序列化算法1.2 参数调优1&#xff09;CONNECT_TIMEOUT_MILLIS2&#xff09;SO_BACKLOG3&#xff09;ulimit -n4&#xff09;TCP_NODELAY5&#xff09;SO_SNDBUF & SO_RCVBUF6&#xff09;ALLOCATOR7&#xff09;RCVBUF_ALLOCATOR1.3 RPC 框架1&…

IDEA性能优化设置(解决卡顿问题)修改内存

在我们日常使用IDEA进行开发时&#xff0c;可能会遇到许多卡顿的瞬间&#xff0c;明明我们的机器配置也不低啊&#xff1f;为什么就会一直卡顿呢&#xff1f; 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限&#xff08;通常很小&#xff09;&#xff0c;这就…

理解IM消息“可靠性”和“一致性”问题,以及解决方案探讨

试想如果一个IM连发出的消息都不知道对方到底能不能收到、发出的聊天内容对方看到的到底是不是“胡言乱语”&#xff08;严重乱序问题&#xff09;&#xff0c;这样的APP用户肯定不会让他在手机上过夜&#xff08;肯定第一时间卸载了&#xff09;&#xff0c;因为最基本的聊天逻…

python基础 | python基础语法

文章目录&#x1f4da;基础语法&#x1f407;输入和输出&#x1f955;print()输出&#x1f955;input()输入&#x1f407; 变量的命名&#x1f407;条件判断&#x1f955;单向判断&#x1f955;双向判断&#x1f955;多向判断&#x1f955;if嵌套&#x1f955;三元表达式&#…