7. CSS 网格布局

CSS3引入了强大的网格布局(Grid Layout),它提供了一种二维的布局方式,使得创建复杂的网页布局变得更加简单和直观。通过定义行和列,我们可以精确控制网页元素的排列和对齐。本章将详细介绍网格布局的基本概念和属性,并通过具体示例帮助读者掌握如何使用网格布局。

7.1 网格布局简介

网格布局是一种二维布局系统,允许我们在水平和垂直两个方向上定义布局。它由网格容器(grid container)和网格项目(grid item)组成。网格布局非常灵活,适合创建复杂和响应式的网页设计。

特点
  • 二维布局:同时控制行和列的排列。
  • 灵活的尺寸:使用网格单元和轨道,可以创建灵活的布局。
  • 简化复杂布局:能够轻松实现传统布局方法中难以实现的设计,如垂直居中、等高列等。
7.2 网格容器与项目

网格容器是应用网格布局的元素,网格项目是网格容器内的直接子元素。

示例
<div class="grid-container"><div class="grid-item">1</div><div class="grid-item">2</div><div class="grid-item">3</div><div class="grid-item">4</div>
</div>
.grid-container {display: grid; /* 定义网格容器 */grid-template-columns: repeat(2, 1fr); /* 定义两列,每列占1fr(比例单位) */grid-template-rows: repeat(2, 100px); /* 定义两行,每行100px高 */gap: 10px; /* 设置行和列之间的间距 */
}.grid-item {background-color: #3498db;color: white;padding: 20px;text-align: center;
}
7.3 网格布局属性详解
网格容器属性
  1. display: grid:将元素定义为网格容器。

    • 示例:

      .grid-container {display: grid;
      }
      
  2. grid-template-columns:定义列的布局。

    • 取值:长度值(如100px)、比例单位(如1fr)、百分比(如50%)、autorepeat()函数等。

    • 示例:

      .grid-container {grid-template-columns: 1fr 2fr; /* 第一列占1份,第二列占2份 */
      }
      
  3. grid-template-rows:定义行的布局。

    • 取值与grid-template-columns相同。

    • 示例:

      .grid-container {grid-template-rows: 100px auto; /* 第一行100px高,第二行自动分配剩余空间 */
      }
      
  4. gap(或grid-gap):设置网格项目之间的间距。

    • 取值:长度值,如10px

    • 示例:

      .grid-container {gap: 10px; /* 设置行和列之间的间距 */
      }
      
  5. grid-template-areas:定义命名的网格区域。

    • 示例:

      .grid-container {grid-template-areas:"header header""sidebar content""footer footer";
      }
      .header {grid-area: header;
      }
      .sidebar {grid-area: sidebar;
      }
      .content {grid-area: content;
      }
      .footer {grid-area: footer;
      }
      
  6. justify-items:定义网格项目在水平方向上的对齐方式。

    • 取值:startendcenterstretch

    • 示例:

      .grid-container {justify-items: center; /* 所有项目在水平方向上居中对齐 */
      }
      
  7. align-items:定义网格项目在垂直方向上的对齐方式。

    • 取值与justify-items相同。

    • 示例:

      .grid-container {align-items: center; /* 所有项目在垂直方向上居中对齐 */
      }
      
  8. justify-content:定义整个网格容器在水平方向上的对齐方式。

    • 取值:startendcenterspace-betweenspace-aroundspace-evenly

    • 示例:

      .grid-container {justify-content: space-between; /* 网格在水平方向上均匀分布 */
      }
      
  9. align-content:定义整个网格容器在垂直方向上的对齐方式。

    • 取值与justify-content相同。

    • 示例:

      .grid-container {align-content: space-around; /* 网格在垂直方向上均匀分布 */
      }
      
网格项目属性
  1. grid-column-startgrid-column-end:定义网格项目的列起始和结束位置。

    • 示例:

      .grid-item {grid-column-start: 1; /* 列开始位置 */grid-column-end: 3; /* 列结束位置 */
      }
      
  2. grid-row-startgrid-row-end:定义网格项目的行起始和结束位置。

    • 示例:

      .grid-item {grid-row-start: 1; /* 行开始位置 */grid-row-end: 3; /* 行结束位置 */
      }
      
  3. grid-area:可以同时设置项目的行和列位置,结合grid-template-areas使用。

    • 示例:

      .grid-item {grid-area: header; /* 使用命名的网格区域 */
      }
      
  4. justify-self:定义单个网格项目在水平方向上的对齐方式。

    • 取值与justify-items相同。

    • 示例:

      .grid-item {justify-self: end; /* 单个项目在水平方向上对齐到右边 */
      }
      
  5. align-self:定义单个网格项目在垂直方向上的对齐方式。

    • 取值与align-items相同。

    • 示例:

      .grid-item {align-self: start; /* 单个项目在垂直方向上对齐到顶部 */
      }
      
7.4 创建复杂网格布局

网格布局能够轻松创建复杂的网页布局,例如响应式的页面结构和仪表板布局。

示例:响应式三栏布局
<div class="complex-grid"><div class="header">Header</div><div class="sidebar">Sidebar</div><div class="content">Content</div><div class="footer">Footer</div>
</div>
.complex-grid {display: grid;grid-template-areas:"header header header""sidebar content content""footer footer footer";grid-template-columns: 1fr 2fr 1fr;grid-template-rows: auto 1fr auto;gap: 10px;
}.header {grid-area: header;background-color: #3498db;color: white;text-align: center;padding: 20px;
}.sidebar {grid-area: sidebar;background-color: #2ecc71;color: white;padding: 20px;
}.content {grid-area: content;background-color: #e74c3c;color: white;padding: 20px;
}.footer {grid-area: footer;background-color: #9b59b6;color: white;text-align: center;padding: 20px;
}
7.5 网格布局与响应式设计

网格布局与媒体查询结合使用,可以创建响应式设计,适应不同的屏幕尺寸和设备。

示例:响应式网格布局
<div class="responsive-grid"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div><div class="item">6</div>
</div>
.responsive-grid {display: grid;grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));gap: 10px;
}.item {background-color: #3498db;color: white;padding: 20px;text-align: center;
}/* 媒体查询,适配不同屏幕尺寸 */
@media (max-width: 600px) {.responsive-grid {grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));}
}

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

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

相关文章

pytorch学习day1

一.pytorch主要模块介绍 1.1 模块介绍 模块描述torch包含激活函数和主要的张量操作torch.Tensor定义了张量的数据类型&#xff0c;方法可返回新张量&#xff0c;方法后缀带下划线可修改张量本身torch.cuda定义了 CUDA 运算相关的函数&#xff0c;如检查 CUDA 是否可用&#x…

橙派探险记:开箱香橙派 AIpro 与 疲劳驾驶检测的奇幻之旅

橙派探险记&#xff1a;开箱香橙派 AIpro 与 疲劳驾驶检测的奇幻之旅 引子&#xff1a;神秘包裹的到来 在很久很久以前......在一个阳光明媚的下午&#xff0c;我终于收到了期待已久的包裹——香橙派 AIpro。这份礼物辗转两次才到我的手上&#xff0c;每一天我都怀着满心的期待…

JetLinks物联网平台在windows 7搭建(前后端)部署教程

近期对接TCP、modbusTCP等自定义解析&#xff0c;做了很多万能解析的方法&#xff0c;却都不遂人意&#xff0c;而一直在用的ThingsBoard不能直接对接TCP透传(企业版除外)&#xff0c;需要在外围做一些自定义解析&#xff0c;然后转json再mqtt上传&#xff0c;感觉来说比较麻烦…

RTKLIB学习--前向滤波

#前言 如果要详细了解RTKLIB或进行二次开发&#xff0c;了解obs指针所存储每个历元的卫星观测数据是必不可少的环节&#xff0c;此文对RTKLIB的&#xff08;由于后处理和实时运行都要用到前向滤波&#xff09;前向滤波&#xff08;从文件头读取观测数据到obs结构体中&#xff0…

Android笔记--应用安装

这一节了解一下普通应用安装app的方式&#xff0c;主要是唤起系统来安装&#xff0c;直接上代码: 申请权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.WRITE_EXT…

【包装类简单认识泛型】

目录 1&#xff0c;包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 2&#xff0c;什么是泛型 3&#xff0c;引出泛型 3.1 语法 4&#xff0c;泛型如何编译的 4.1 擦除机制 4.2 为什么不能实例化泛型类型数组 5&#xff0c;泛型的上界 5.1 语法 5.2 复杂示例…

Windows内核函数 - 添加、修改注册表键值

打开注册表的句柄后&#xff0c;就可以对该项进行设置和修改了。注册表是以二元形式存储的&#xff0c;即“键名”和“键值”。通过键名设置键值&#xff0c;而键值可以划分几个类&#xff0c;如下表所示。 表1 键值的分类 在添加和修改注册表键值的时候&#xff0c;要分类进行…

dp秒杀优惠券

1、全局id生成器 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受单表数据量的限制 场景分析&#xff1a;如果我们的id具有太明显的规则&#xff0c;用户或者…

前端实时更新数据的几种方式

实时更新数据的几种方式 背景 在我们的日常工作中,我们往往会遇到客户端需要实时获取服务端最新数据的场景,例如聊天系统(WeChat/Telegram),股票行情查看软件(同花顺/富途),feed 推送系统(Twitter/微博)等等。在实现这些需求的时候,我们的技术方案是有很多的,本文将会给…

C++修改文件后缀名;链表循环删除乘积为10的元素

1. 文件名修改 在一个文件目录下&#xff0c;存在相同扩展名 ".stp"的多个文件&#xff0c;对这样的文件名&#xff0c;请修改文件名称&#xff0c;在文件 名称后增加排序标识 "-01" &#xff0c; "-02" &#xff0c; "-03"... #incl…

python基于百度,哈工大等停用表进行的中文分词

import os import pandas as pd import jieba# 加载停用词 def load_stopwords(filenames):stopwords set()for filename in filenames:with open(filename, r, encodingutf-8) as f:for line in f:stopwords.add(line.strip())return stopwords# 中文分词并去除停用词 def se…

企业网站有必要进行软件测试吗?网站测试有哪些测试流程?

企业网站在现代商业中扮演着重要的角色&#xff0c;它不仅是企业形象的重要体现&#xff0c;也是与客户、合作伙伴进行沟通与交流的重要渠道。然而&#xff0c;由于企业网站的复杂性和关键性&#xff0c;其中可能存在各种潜在的问题和隐患。因此&#xff0c;对企业网站进行软件…

企业如何安全的使用U盘

问题的背景&#xff1a; U盘&#xff08;USB闪存盘&#xff09;的优点主要包括&#xff1a; 便携性&#xff1a;U盘体积小、重量轻&#xff0c;便于携带&#xff0c;可以轻松地在不同设备间传输数据。高速传输&#xff1a;相比传统机械硬盘&#xff0c;U盘的读写速度更快&…

el-upload上传文件使用http-request方法,formdata传集合List到后台

el-upload上传文件 前言1、使用el-upload上传文件1.1代码演示1.2回显列表2、formdata传集合List到Springboot后台前言 在使用el-upload上传文件,会遇到必须使用:action="upload_url"远端链接的问题,本章我们讲解怎样不适用远端链接,通过上传获取到本地的file文件…

海尔智家牵手罗兰-加洛斯,看全球创牌再升级

晚春的巴黎西郊&#xff0c;古典建筑群与七叶树林荫交相掩映&#xff0c;坐落于此的罗兰加洛斯球场内座无虚席。 来自全球各地的数万观众&#xff0c;正与场外街道上的驻足者们一起&#xff0c;等待着全世界最美好的网球声响起…… 当地时间5月26日&#xff0c;全球四大职业网…

RFM模型-分析母婴类产品

1&#xff0c;场景描述 假设我们是某电商平台的数据分析师&#xff0c;负责分析母婴产品线的用户数据。母婴产品的购买行为具有一定的周期性和生命周期特征&#xff0c;如用户在不同怀孕阶段的需求不同&#xff0c;以及宝宝出生后的不同成长阶段需要不同的产品。 2&#xff0…

Flutter 中的 RichText 小部件:全面指南

Flutter 中的 RichText 小部件&#xff1a;全面指南 Flutter 是一个流行的跨平台 UI 工具包&#xff0c;它允许开发者使用 Dart 语言来构建高性能、高保真的移动应用。在 Flutter 中&#xff0c;RichText 是一个非常有用的小部件&#xff0c;它允许开发者在同一个文本行中混合…

XV7011BB可为智能割草机的导航系统提供新的解决方案

智能割草机作为现代家庭和商业草坪维护保养的重要工具&#xff0c;其精确的定位和导航系统对于提高机器工作效率和确保安全运行至关重要。在智能割草机的发展历程中&#xff0c;定位和导航技术一直是关键的创新点。 传统的基于RTK(实时动态差分定位技术)技术的割草机虽然在…

景源畅信电商:抖音开店步骤是什么?

随着社交媒体的兴起&#xff0c;抖音已经成为一个不可忽视的电商平台。许多人都希望通过抖音开店来实现自己的创业梦想。那么&#xff0c;抖音开店的具体步骤是什么呢?接下来&#xff0c;我们将详细阐述这一问题。 一、明确回答问题抖音开店的步骤主要包括&#xff1a;注册账号…

1初识C#

1、Console安慰 Console.WriteLine("Hello, world!"); // 输出 "Hello, world!" 并换行 Console.WriteLine(123.45); // 输出数字 123.45 并换行 Console.WriteLine("Name: " name); // 输出 "Name: [变量name的值]" 并换行 2、 C…