css-grid使用

2023-10-27

grid

网格布局,flex是一维的,grid是二维的。
和flex一样,grid的概念也有三个,一个是整体的容器,一个是格子,一个是格子中存放的元素(也就是grid子元素);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSARlw6i-1692416147621)(./images/grid.png)]

概念

容器和项目

在元素上声明 display:grid 或 display:inline-grid 来创建一个网格容器。这个元素的所有直系子元素将成为网格项目。

网格轨道:

grid-template-columns 和 grid-template-rows 属性来定义网格中的行和列。容器内部的水平区域称为行,垂直区域称为列。

网格单元

一个网格单元是在一个网格元素中最小的单位, 从概念上来讲其实它和表格的一个单元格很像。

网格线

划分网格的线,称为"网格线"。应该注意的是,当我们定义网格时,我们定义的是网格轨道,而不是网格线。Grid 会为我们创建编号的网格线来让我们来定位每一个网格元素。
m 列有 m + 1 根垂直的网格线,n 行有 n + 1 跟水平网格线。
一般而言,是从左到右,从上到下,1,2,3 进行编号排序。当然也可以从右到左,从下到上,按照 -1,-2,-3…顺序进行编号排序

使用

  • display: grid
  • display: inline-grid
    理解参考flex;
    当一个父元素使用grid显示,它内部就是grid子元素。

分配item空间大小对于子元素的意义

指定grid的大小,指定的大小是整个元素的所有区域(包括margin);

行列指定

隐式和显示网格

显式网格包含了你在 grid-template-columns 和 grid-template-rows 属性中定义的行和列。如果你在网格定义之外又放了一些东西,或者因为内容的数量而需要的更多网格轨道的时候,网格将会在隐式网格中创建行和列;
假如有多余的网格(也就是上面提到的隐式网格),那么它的行高和列宽可以根据 grid-auto-columns 属性和 grid-auto-rows 属性设置。它们的写法和grid-template-columns 和 grid-template-rows 完全相同。如果不指定这两个属性,浏览器完全根据单元格内容的大小,决定新增网格的列宽和行高

默认排列

默认布局就是常规布局,item由内部元素内容撑开。

grid容器属性

grid-template-rows: 100px 100px 200px;

指定几个就是指定几行,数值指定的行的高度

  • grid-template-rows: repeat(10, 100px); 指定10个100px
  • grid-template-rows: repeat(autofill, 100px); 每列100px,自动填充完毕父元素宽度
  • grid-template-rows: 1fr 1fr 2fr;
    fraction – 分数,就是按比例对父元素进行分配
  • grid-template-rows: repeat(4, 1fr); 平均分为4份
    网格线可以进行命名,命名之后,就可以在原本使用网格线索引的位置直接使用自定义命名的网格线。
  • grid-template-columns: [main-start] 1fr [content-start] 1fr [content-end] 1fr [main-end];
  • grid-template-rows: [main-start] 100px [content-start] 100px [content-end] 100px [main-end];
    可以指定的值:
  • 100px 固定值
  • 1fr 相当比例
  • auto 自动扩充
  • minmax() 最大最小范围
  • auto-fill 列数量、行数量自适应
  • repeat() 重复几个数字 repeat(auto-fill, 100px);

grid-template-columns: 100px 100px 100px;

指定几个就是指定几列,数值指定的是列的长度

grid-auto-rows: 200px

当没有指定行方向的

  • auto 内容撑开

grid-column-gap: 10px

列与列之间单元格的间隔

grid-row-gap: 10px

行与行之间单元格的间隔

grid-template-areas

定义区域,定义完毕后可以在网格元素使用grid-area中引用区域

  grid-template-areas: 'a b c'
                       'a b c'
                       'a b c';

定义单元格区域,匿名区域使用.表示;
区域的命名会影响到网格线,每个区域的起始网格线会自动命名为区域名-start;终止网格线会自动命名为区域名-end

grid-auto-flow

划分网格后,容器的子元素会按照顺序,自动放置在每一个网格

  • row 该关键字指定自动布局算法按照通过逐行填充来排列元素,在必要时增加新行。如果既没有指定 row 也没有 column,则默认为 row。
  • column 该关键字指定自动布局算法通过逐列填充来排列元素,在必要时增加新列。
  • dense 该关键字指定自动布局算法使用一种“稠密”堆积算法,如果后面出现了稍小的元素,则会试图去填充网格中前面留下的空白。这样做会填上稍大元素留下的空白,但同时也可能导致原来出现的次序被打乱。

place-items

  • justify-items 单元格中元素水平方向的对齐方式
  • align-items 单元格中元素垂直方向的对齐方式
  • start | end | center | stretch 上、中、下、拉伸

place-content

指定整个内容区域的排布方式

  • justify-content
  • align-content
  • start | end | center | stretch | space-around | space-between | space-evenly;

指定行列的数据

  • 100px 固定像素
  • 1fr 按比例分配
  • minmax(100px, 1fr) 指定最大最小值
  • auto 由浏览器决定大小,直接将剩余空间占据

grid元素属性

grid-column-start: 1

规定从哪一列开始显示项目,或者跨越多少列

grid-column-end: 3

规定在哪一条列线(column-line)上停止显示项目,或跨越多少列。

grid-row-start: 1

grid-row-end: 3

指定的是网格线,指定元素占据网格范围,网格线索引从1开始;
简写:

  • grid-column: 1 / 3
  • grid-row: 1 / span 2
  • 负数为网格从后往前数的位置

place-self

  • justify-self
  • align-self

注意

子元素内容撑开grid网格

当网格高度或者宽度设置为fr或者auto的时候,当子元素高度或者宽度超过了网格设置,子元素会将网格撑开;

解决方法

  1. 将网格宽度或者高度设置为px、百分比,但是此时不能设置grid-gap,设置之后就会出现子元素内容溢出的问题
  2. 网格中的元素设置overflow: hidden
    • 网格元素设置width: 100%; height: 100%; overflow: hidden之后,如果子元素越界,可以将对应的子元素设置为width: 100%; height: 100%; overflow: auto,这样就可以通过滑动进行子元素全部内容查看

grid-gap设置导致内容溢出

此时要留意gird-template-rows或者gird-template-columns的设置是不是用的百分比或者固定数值,如果是的话,那么设置grid-gap就可能会造成内容溢出,就百分比而言,grid整体长度和宽度是先计算百分比,后叠加grid-gap;此时可以使用fr的形式,这种情况下会刨除grid-gap后再去计算fr,这样就可以避免内容溢出;

grid格子与padding

grid格子分配的是grid元素content内容区的区域,因此如果当子元素超过grid单元格的时候,就会出现滚动条(overflow: auto);而滚动条会紧贴grid格子,可以通过设置padding来分隔开这两部分,看起来会更舒服。

移动端使用grid栅格元素高度为整个grid容器高度

这个要排查一下grid元素是否有设置display: grid,没哟设置改属性,即使设置了grid-template-rows;然后grid栅格元素中设置了height: 100%之后,栅格子元素的高度就会直接为grid元素的高度,而不是栅格的高度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css-grid使用 的相关文章

  • 带有图像垂直对齐的内联框:与父框居中

    请运行演示 margin 0 padding 0 body font family Microsoft Yahei font size 16px background color lightblue height 200px width 2
  • 如何更改 .NET MAUI Blazor 项目中的默认字体?

    我有一个用于 NET MAUI Blazor 应用程序的默认 Visual Studio 项目 针对 Windows x64 构建 我尝试了两种不同的更改字体的方法 在MauiProgram cs中有一个字体的配置ConfigureFont
  • IE jquery click 仅适用于 li 中的文本,不适用于整个框

    我创建了一系列作为 li 的按钮 我希望用户能够单击它们 ul class item list li class item button style color 4bb2c5 1 li li class item button style
  • 项目之间的点线

    我正在建立一个餐厅网站和菜单 我需要在菜单项和价格之间画一条 点线 我需要得到它 而不需要手动一一写点 此功能应该自动工作 是否可以使用 span 或 div 等背景来创建它 我拥有的 我想要的是 我想你正在寻找这样的东西 html div
  • 使用日期类型将输入字段中的日期居中

    我想将日期居中input not input inside div 如果我进行居中 它将把日期居中于input因为有一个右侧面板用于根据日历选择日期 该面板根据输入宽度调整大小 用于演示的小代码片段 center text align ce
  • 何时使用
    换行符 vs CSS 定位?

    我经常想知道如何正确使用 br 越线 似乎它们经常被错误地用于定位或清除应该使用 CSS 的内容 W3schoools org 说使用 br 适用于空白行 但不适用于创造或分离 http www w3schools com tags tag
  • 允许指针(单击)事件穿过元素,同时保持滚动功能

    我的目标是拥有一个允许 下面要点击 交互的元素 滚动 众所周知 1 的解是pointer events none 这正如中所描述的单击 DIV 到底层元素 https stackoverflow com questions 3680429
  • 页面不会居中对齐

    我遇到了 CSS 问题 http www luukratief design nl dump parallax index html http www luukratief design nl dump parallax index htm
  • 使用百分比 (%) 时如何计算填充?

    为什么本例中的内边距不等于 300 像素 Test width 600px padding right 50 box sizing border box background ddd div TEXT ETISI DHOASIHD I SA
  • Sass 负变量值?

    我有几个 scss 选择器 其中我使用相同数量的正数和负数 如下所示 padding 0 15px 15px margin 0 15px 20px 15px 我更喜欢对所有 15px 量使用一个变量 但这不起作用 pad 15px padd
  • Bootstrap 列中的标题高度相同

    我有这样的 html bootstrap css div class container div class row div class col xs 6 col div class block div class title strong
  • 带有旋转文本的垂直导航

    我正在尝试实现一个包含链接的垂直导航菜单 并且我已使用 css3 将链接文本旋转到 270 度 我旋转了它 因为我希望文本从下到上 问题是当我添加顶部填充时 间距不一致 你可以看到我的代码here http jsbin com ravudu
  • 确定使用 -webkit-line-clamp 表示多行省略号时是否显示省略号

    我们使用多行 CSS 省略号https css tricks com line clampin https css tricks com line clampin 我们想要检测省略号是否正在显示 并根据省略号是否正在显示来决定显示工具提示
  • 具有固定位置的平滑滚动标题

    当我将位置更改为固定时如何创建平滑滚动 我尝试添加动画但不起作用 最好使用jquery动画 window scroll function var sticky mobile menu scroll window scrollTop if s
  • css:将div制作成圆角并在其3/4处添加边框

    我有这样的代码 div class circle div and css circle border left 1px solid red border bottom 1px solid red border radius 200px wi
  • 如何使用javascript隐藏div

    我想使用 Javascript 隐藏一个 div 下面是我的div div class ui dialog titlebar ui widget header ui corner all ui helper clearfix span cl
  • 如何中和 CSS 定义而不覆盖

    有没有一种方法可以中和元素的 CSS 规则而不覆盖所有内容 例如 我正在使用 Twitter Bootstrap 它有许多预定义的 CSS 定义table 在某些地方 我不想要它们 对某些table元素 我想知道我是否可以做这样的事情 ta
  • 从 3.1 返回后加载 Rails 3(服务器)时出现问题

    Rails 完全菜鸟 我正在使用 Hartl 教程 到了第 4 章 CSS 4 1 2 一切看起来都很顺利 但遇到了一个问题 使页面上的文字看起来
  • SVG 剪辑路径在 Safari 上不起作用

    我有一个简单的动画 从下往上填充 svg 然后淡出 填充是使用clipPath随着使用path with a stroke dasharray stroke dashoffset 问题是clipPath在 Safari 上似乎完全被忽略了
  • 如何更改 div 悬停时的跨度颜色

    我正在尝试更改 div 悬停时跨度的颜色 如何使红色汉堡按钮 即跨度 在 div 悬停时将颜色更改为黑色 PS 现在它在跨度的悬停上执行此操作 JSFiddle https jsfiddle net bjjbqct8 https jsfid

随机推荐

  • GCC详解-gcc之-Wl选项

    1 介绍 Wl后面的东西是作为参数传递给链接器ld的 比如 gcc Wl aaa bbb ccc 最后会被解释为 ld aaa bbb ccc 2 Wl Map xxx txt 生成map文件 如下会生成map文件mymap txt gcc
  • 算法笔记——差分数组

    差分数组 概念 所谓差分数组就是对数组的相邻元素求差保存到一个新的数组中 这个数组就是差分数组 如下所示 序号 0 1 2 3 4 原数组a 1 5 3 4 3 差分数组d 1 4 2 1 1 作用 用于频繁的区间修改 区间修改是对数组的一
  • 618技术揭秘 - 大促弹窗搭投实践

    背景 618 大促来了 对于业务团队来说 最重要的事情莫过于各种大促营销 如会场 直播带货 频道内营销等等 而弹窗作为一个极其重要的强触达营销工具 通常用来渲染大促氛围 引流主会场 以及通过频道活动来提升频道复访等 因此 如果能将运营的策略
  • SQL N+1问题

    什么是N 1问题 在两个表存在一对一 一对多 多对一 多对多等关联信息时 查询一条数据会衍生N条查询的情况就是N 1问题 比如两个实体类A B A与B数一对多 B与A是多对一 在查询A时 会执行的语句如下 1 从A表查找符合要求的属性 此时
  • notepad 使用方法

    1 notepad 替换以特殊字符开头的行 替换每行 之前的所有字符 包括字符 删除包含特定字符 的行 r n
  • TDD三定律

    定律一 在编写不能通过的单元测试前 不可编写生产代码 定律二 只可编写刚好无法通过的单元测试 不能编译也算不过 定律三 只可编写刚好足以通过当前失败测试的生产代码 测试代码的要素 可读性 可读性 可读性 重要事说三遍 编写测试用例的模式 或
  • 竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

    文章目录 0 前言 1 课题背景 2 实现效果 实现功能 可视化统计 web模块界面展示 3 LDA模型 4 情感分析方法 预处理 特征提取 特征选择 分类器选择 实验 5 部分核心代码 6 最后 0 前言 优质竞赛项目系列 今天要分享的是
  • HCIP-IERS 部署企业级路由交换网络 - IS-IS 协议原理与配置

    目录 IS IS 协议原理与配置 ISIS 知识点 前言 场景应用 历史起源 路由计算过程 地址结构 路由器分类 邻居HELLO报文 邻居关系建立 DIS及DIS与DR的类比 链路状态信息的载体 链路状态信息的交互 路由算法 网络分层路由域
  • PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.10 计算工资

    import java util Scanner public class Main public static void main String args Scanner sc new Scanner System in
  • 【深度学习案例】手写数字项目实现-2.Python模型训练

    深度学习入门教程 手写数字项目实现 2 Python模型训练 4 Python基于Pytorch框架实现模型训练 4 1 训练环境 4 2 定义数据加载器 4 3 定义网络 net py 4 4 定义训练器 trainer py 4 5 模
  • 网络安全——Web目录扫描

    一 Web目录扫描原因 1 发现网站后台管理登录页面 可以尝试发现漏洞 进行爆破 2 寻找未授权页面 有些网站在开发时有一些没有授权的页面 在上线后没有及时清除 可以利用这个弱点进行入侵 3 寻找网站更多隐藏信息 二 Web目录扫描方法 1
  • spring事务-编程式事务控制-代码中控制

    1 启动类加注解 EnableTransactionManagement 如果使用声明式注解 Transactional 则不需要加 2 导致事务回滚只有两种情况 事务内代码抛出异常 transactionStatus setRollbac
  • 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    第四十五章 FLASH模拟EEPROM实验 STM32本身没有自带EEPROM 但是STM32具有IAP 在应用编程 功能 所以我们可以把它的FLASH当成EEPROM来使用 本章 我们将利用STM32内部的FLASH来实现第三十六章实验类
  • cors跨域和ajax跨域,jQuery ajax和跨域(CORS)和基本身份验证

    我在建议的可能重复的问题中尝试了答案 但他们没有改变结果 jQuery ajax和跨域 CORS 和基本身份验证 我一直在尝试从本地PC上的客户端 测试Chrome和IE 通过ajax POST到远程服务器的API 但没有成功 Ajax返回
  • SQL 计算留存率以7日内留存率为例

    SQL 计算留存率 留存率 目标日中初始日的用户数 初始日的用户数 现已计算7日留存率为例进行SQL代码逻辑梳理 表名 Table 字段 user id log date as date select t1 date t2 gap t2 r
  • Spring Boot 中的 @RefreshScope 注解:原理和使用

    Spring Boot 中的 RefreshScope 注解 原理和使用 什么是 RefreshScope 注解 在微服务架构中 配置管理是一个重要的问题 通常 配置是在应用程序启动时加载并缓存起来的 但是 在某些情况下 需要动态地修改配置
  • QML编程 基础 小白

    QT quick 添加quick模块 QQuickView 视图 用来链接QML和程序 QQuickView viewer Quick视图 viewer setSource QUrl QLatin1String qrc qml qmlvid
  • Linux 内核定时器实验————复习到这

    目录 Linux 时间管理和内核定时器简介 内核时间管理简介 内核定时器简介 Linux 内核短延时函数 硬件原理图分析 实验程序编写 修改设备树文件 定时器驱动程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 定时器
  • vs2015自带混淆工具DotFuscator使用方法(超简单)

    首先声明 混淆并不能防反编译工具 只能增加反编译出来的代码阅读难度 把方法和变量名变成无意义的声明如把students换成a b等 混淆前记得先备份下 以免混淆失败造成损失 步骤1 打开vs2015 工具 选择PreEmptive Dotf
  • css-grid使用

    文章目录 grid 概念 容器和项目 网格轨道 网格单元 网格线 使用 分配item空间大小对于子元素的意义 行列指定 隐式和显示网格 默认排列 grid容器属性 grid template rows 100px 100px 200px g