当前位置: 首页 > news >正文

css-grid使用

文章目录

  • grid
    • 概念
      • 容器和项目
      • 网格轨道:
      • 网格单元
      • 网格线
    • 使用
      • 分配item空间大小对于子元素的意义
    • 行列指定
      • 隐式和显示网格
      • 默认排列
  • grid容器属性
    • `grid-template-rows: 100px 100px 200px`;
    • `grid-template-columns: 100px 100px 100px`;
    • `grid-auto-rows: 200px`
    • `grid-column-gap: 10px`
    • `grid-row-gap: 10px`
    • `grid-template-areas`
    • `grid-auto-flow`
    • `place-items`
    • `place-content`
    • 指定行列的数据
  • grid元素属性
    • `grid-column-start: 1`
    • `grid-column-end: 3`
    • `grid-row-start: 1`
    • `grid-row-end: 3`
    • place-self
  • 注意
    • 子元素内容撑开grid网格
      • 解决方法
    • grid-gap设置导致内容溢出
    • grid格子与padding
    • 移动端使用grid栅格元素高度为整个grid容器高度

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元素的高度,而不是栅格的高度。

相关文章:

css-grid使用

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

springBoot提取一个List<?>中的某个字段集合

import cn.hutool.core.collection.CollUtil;PageResult prrecommendUserApi.queryRecommendUserList(dto.getPage(),dto.getPagesize(),userId);List<RecommendUser> items (List<RecommendUser>) pr.getItems(); //提取所有推荐的用户id List<Long> ids …...

【BUG】 ‘cv2.cv2‘ ‘wechat_qrcode_WeChatQRCode‘

首发博客地址 https://blog.zysicyj.top/ 报错内容 AttributeError: module cv2 has no attribute wechat_qrcode_WeChatQRCode 解决方法 pip install opencv-pythonpip install opencv-contrib-python 本文由 mdnice 多平台发布...

10 Mybatis

文章目录 1 概述1.1 什么是Mybatis?1.2 JDBC介绍(了解)1.2.1 问题分析1.2.2 技术对比 1.3 数据库连接池1.4 lombok 2 Mybatis基础操作2.1 准备2.2 删除2.2.1 日志输入2.2.2 预编译SQL2.2.2.1 介绍2.2.2.2 SQL注入2.2.2.3 参数占位符 2.3 新增2.3.1 主键返回 2.4 更新2.5 查询2…...

【PHP】PHP的面向对象编程

PHP面向对象编程是PHP编程的一个重要方向&#xff0c;它通过将数据和操作封装在对象中&#xff0c;使得代码更加模块化、可重用性和易于维护。本文将介绍PHP面向对象编程的基本概念、核心思想和常见应用&#xff0c;并探讨使用PHP面向对象编程时需要注意的问题。 一、概述 PH…...

Windows10突然出现音频无法正常运行的解决方法

文章目录 前言 一 问题描述 二 解决方法 2.1 下载完成之后选择安装 2.2 选择其他位置来安装 2.3 静静等待安装完成 三 升级Windows显卡和声卡 总结 前言 本文主要介绍Windows里面的音频出现问题的解决方法 一 问题描述 Windows使用好好的&#xff0c;突然就出现声卡出…...

Maven面试题大全及答案

1.什么是Maven&#xff1f; Maven使用项目对象模型(POM)的概念&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的软件项目管理工具。 Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可…...

探究字符串匹配算法:暴力法与KMP算法的Java实现

探究字符串匹配算法&#xff1a;暴力法与KMP算法的Java实现 字符串匹配是计算机科学中的基本问题之一&#xff0c;它涉及在一个主串中查找特定的子串。在本文中&#xff0c;我们将深入探讨暴力法和KMP算法这两种常见的字符串匹配算法&#xff0c;并提供详细的Java代码示例。 …...

前端面试:【浏览器与渲染引擎】工作原理与渲染流程

嗨&#xff0c;亲爱的读者&#xff01;你是否曾经好奇过当你在浏览器中输入URL并按下回车时&#xff0c;网页是如何显示在你的屏幕上的&#xff1f;这背后涉及了复杂的浏览器工作原理和渲染流程。本文将带你深入了解浏览器如何工作以及网页如何被渲染出来。 1. 浏览器的工作原理…...

PySide6学习笔记--gui小模版使用

一、界面绘制 1.desiner画图 2.画图代码 # -*- coding: utf-8 -*-################################################################################ ## Form generated from reading UI file t1gui.ui ## ## Created by: Qt User Interface Compiler version 6.5.2 ## ##…...

如何用Python实现冒泡排序

1 问题 冒泡排序是一种简单的排序算法&#xff0c;它也是一种稳定排序算法。其实现原理是重复扫描待排序序列&#xff0c;并比较每一对相邻的元素&#xff0c;当该对元素顺序不正确时进行交换。一直重复这个过程&#xff0c;直到没有任何两个相邻的元素可以交换&#xff0c;就表…...

C++Qt堆叠窗体的使用案例

本博文源于笔者最近学习的Qt&#xff0c;内容讲解堆叠窗体QStackedWidget案例&#xff0c;效果是选择左侧列表框中不同的选项时&#xff0c;右侧显示所选的不同的窗体。 案例效果 案例书写过程 控件都是动态创建的&#xff0c;因此.h文件需要创建控件&#xff0c;.cpp书写业务…...

Linux之套接字UDP实现网络通信

Linux之套接字UDP实现网络通信 文章目录 Linux之套接字UDP实现网络通信1.引言2.具体实现2.1需要知道的套接字接口1.socket()2.bind()3.recvfrom()4.sendto() 2.2服务器端server.hpp2.3服务器端server.cc2.4客户端Client.cc 1.引言 ​ 套接字(Socket)是计算机网络中实现网络通信…...

Matlab绘制二值图像

二值化介绍 只有黑白两种颜色的图像称为黑白图像或单色图像&#xff0c;是指图像的每个像素只能是黑或者白&#xff0c;没有中间的过渡&#xff0c;故又称为二值图像。其特点是二值图像的像素值只能为0和1&#xff0c;分别代表黑色和白色&#xff0c;图像中的每个像素值用1位存…...

Kali 网络参数的配置

手工方式 Wired 有线 Woreless 无线 图形化的网络管理器&#xff08;依赖的服务&#xff1a;NetworkManager&#xff09; ┌──(root㉿kali)-[~] └─# systemctl status NetworkManager ● NetworkManager.service - Network ManagerLoaded: loaded (/lib/systemd/system/N…...

在 Redis 中处理键值 | Navicat

Redis 是一个键值存储系统&#xff0c;允许我们将值与键相关联起来。与关系型数据库不同的是&#xff0c; 在Redis 中&#xff0c;不需要使用数据操作语言 &#xff08;DML&#xff09; 和查询语法&#xff0c;那么我们如何进行数据的写入、读取、更新和删除操作呢&#xff1f;…...

RedisTemplate和StringRedisTemplate的区别、对比

学习 Jedis、RedisTemplate、StringRedisTemplate之间的比较 博客中提到&#xff1a;一. Jedis是Redis官方推荐的面向Java的操作Redis的客户端。 二. RedisTemplate,StringRedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更…...

使用ChatGPT进行创意写作的缺点

Open AI警告ChatGPT的使用者要明白此工具的局限性&#xff0c;更不应完全依赖。作为一位创作者&#xff0c;这一点非常重要&#xff0c;应尽可能地避免让版权问题或不必要的文体问题出现在自己的作品中。[1] 毕竟使用ChatGPT进行创意写作目前还有以下种种局限或缺点[2]&#xf…...

七、任务优先级和Tick

1、任务与中断的优先级 (1)相同优先级任务轮流执行。 (2)高优先级任务打断低优先级任务。 (3)中断可以打断所有优先级的任务。 2、任务优先级 (1)优先级的取值范围是&#xff1a;0~(configMAX_PRIORITIES – 1)&#xff0c;数值越大优先级越高。 (2)FreeRTOS会确保最高优…...

Python——三目运算语句

本文基于python3。 目录 1、三目运算语句的定义2、三目运算语句&#xff1a;包含逻辑运算符 (and、or、not)1、 包含 and2、包含 or3、包含 not4、包含 and、or、not 3、三目运算语句&#xff1a;使用多个if ... else ...形式4、三目运算语句&#xff1a;在列表&#xff08;li…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...