前端CSS-CSS网格布局| “朝闻道”知识分享大赛

2201_75824342 2024-11-29 23:57:37

这是我参加朝闻道知识分享大赛的第35篇文章。


CSS 网格布局(Grid Layout)是一个功能强大的二维布局系统,允许我们创建复杂的布局结构。以下是网格布局的详细教程,涵盖基础概念、属性、属性值的作用,以及每个知识点的完整 HTML 示例。

 

1. 网格容器和网格项目

  • 定义:一个 HTML 元素在设置 display: grid;display: inline-grid; 后会成为网格容器。

  • 作用:启用网格布局模式,容器内的直接子元素(网格项目)将自动成为网格布局的一部分。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>网格容器示例</title>
    <style>
        .grid-container {
            display: grid;
            background-color: #f0f0f0;
            padding: 10px;
            gap: 10px;
        }
        .grid-item {
            background-color: #4CAF50;
            color: white;
            padding: 20px;
            font-size: 18px;
            text-align: center;
        }
    </style>
</head>
<body>
​
    <div class="grid-container">
        <div class="grid-item">1</div>
        <div class="grid-item">2</div>
        <div class="grid-item">3</div>
    </div>
​
</body>
</html>

 

2. 定义网格的行和列

通过 grid-template-columnsgrid-template-rows 属性定义网格的列和行。每个列或行可以指定宽度和高度,网格容器会将子元素排列在定义的行和列中。

属性

  • grid-template-columns:定义网格容器的列结构。

  • grid-template-rows:定义网格容器的行结构。

属性值

  • 固定值px% 等,例如 100px 表示固定宽度或高度。

  • 弹性单位fr 表示按比例分配剩余空间,例如 1fr 2fr 表示按 1:2 分配。

  • auto:自动根据内容决定大小。

  • minmax(min, max):定义最小值和最大值的范围。

  • repeat():简化重复的行或列定义。

 

3. 网格间距(gap)

gap 属性用于设置网格项目之间的间距,包括行间距(row-gap)和列间距(column-gap)。

属性

  • gap:同时设置行间距和列间距。

  • row-gap:单独设置行间距。

  • column-gap:单独设置列间距。

 

4. 跨行和跨列(grid-column 和 grid-row)

grid-columngrid-row 属性用于控制网格项目跨越的行数和列数。

属性

  • grid-column:设置项目跨越的列范围。

  • grid-row:设置项目跨越的行范围。

属性值

  • start / endstart 指定起始行或列,end 指定结束行或列。

  • span:使用 span 表示跨越的列数或行数。

 

5. 自动布局(auto-fill 和 auto-fit)

使用 auto-fillauto-fit 可以创建自适应的网格布局,网格项目会自动填满容器空间,非常适合响应式设计。

属性

  • auto-fill:尽可能多地填充网格单元,允许多余的项目换行。

  • auto-fit:填充并压缩空余的网格单元。

示例:自适应网格布局

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自动布局</title>
    <style>
        .grid-container {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
            gap: 10px;
            background-color: #f0f0f0;
            padding: 10px;
        }
        .grid-item {
            background-color: #FFC107;
            color: white;
            padding: 20px;
            font-size: 18px;
            text-align: center;
        }
    </style>
</head>
<body>
​
    <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 class="grid-item">5</div>
        <div class="grid-item">6</div>
        <div class="grid-item">7</div>
        <div class="grid-item">8</div>
    </div>
​
</body>
</html>

 

6. 区域命名(grid-template-areas 和 grid-area)

使用 grid-template-areas 可以为布局区域命名,结合 grid-area 将网格项目放置在命名区域内。适合于构建复杂布局,如头部、侧边栏、内容和底部。

属性

  • grid-template-areas:定义网格容器的布局区域。

  • grid-area:指定网格项目的位置,与 grid-template-areas 匹配。

示例:命名区域布局

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>区域命名布局</title>
    <style>
        .grid-container {
            display: grid;
            grid-template-areas:
                "header header header"
                "sidebar content content"
                "footer footer footer";
            grid-template-columns: 1fr 3fr;
            grid-template-rows: auto 1fr auto;
            gap: 10px;
            height: 100vh;
            background-color: #f0f0f0;
            padding: 10px;
        }
​
        .header {
            grid-area: header;
            background-color: #4CAF50;
            color: white;
            padding: 20px;
            text-align: center;
        }
​
        .sidebar {
            grid-area: sidebar;
            background-color: #333;
            color: white;
            padding: 20px;
        }
​
        .content {
            grid-area: content;
            background-color: #fff;
            padding: 20px;
            border: 1px solid #ddd;
        }
​
        .footer {
            grid-area: footer;
            background-color: #4CAF50;
            color: white;
            text-align: center;
            padding: 10px;
        }
    </style>
</head>
<body>
​
    <div class="grid-container">
        <div class="header">头部</div>
        <div class="sidebar">侧边栏</div>
        <div class="content">
            <p>这是内容区域。可以容纳文章、图片、视频等内容。</p>
        </div>
        <div class="footer">页脚</div>
    </div>
​
</body>
</html>

 

7. 小结

以上介绍了网格布局的基础属性和常见用法,包括:

  1. 网格行和列:通过 grid-template-columnsgrid-template-rows 设置列宽和行高。

  2. 网格间距:通过 gaprow-gapcolumn-gap 设置行列间距。

  3. 跨行跨列:使用 grid-columngrid-row 控制项目跨越范围。

  4. 自动布局:使用 auto-fillauto-fit 实现响应式布局。

  5. 区域命名:通过 grid-template-areas 命名区域,为复杂布局提供便捷的方法。

...全文
168 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。

1,041

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧