html详细的网格样式

简介: CSS网格布局(Grid Layout)是CSS中强大的二维布局系统,能够灵活控制行与列,适用于构建复杂网页结构。它支持响应式设计、对齐控制、区域命名等功能,代码更简洁直观,极大提升了布局效率与可维护性。

网格布局(Grid Layout)是 CSS 中强大的布局系统,特别适合构建复杂的二维布局。以下是网格布局的主要优点:

1. 二维布局能力

  • 同时控制行和列的布局
  • 可以精确控制元素在水平和垂直方向上的位置
  • 比浮动和定位布局更直观易懂
.area-grid {
   
    display: grid;
    grid-template-areas: 
        "header header header"
        "sidebar main main"
        "footer footer footer";
    grid-template-columns: 150px 1fr 1fr;
    grid-template-rows: 80px 1fr 60px;
}

2. 灵活的轨道系统

  • 支持多种单位:px、fr、%、auto 等
  • 可以使用 repeat() 函数简化重复定义
  • fr 单位能够按比例分配剩余空间
.fr-grid {
   
    display: grid;
    grid-template-columns: 1fr 2fr 1fr; /* 按比例分配 */
}

.repeat-grid {
   
    display: grid;
    grid-template-columns: repeat(4, 1fr); /* 重复4列 */
}

3. 响应式设计友好

  • auto-fitminmax() 实现自适应布局
  • 能够根据屏幕尺寸自动调整列数和大小
  • 无需媒体查询即可实现响应式效果
.auto-grid {
   
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}

4. 强大的对齐控制

  • 提供 justify-itemsalign-items 等属性控制对齐
  • 可以单独控制某个网格项的对齐方式
  • 支持内容分布和对齐的精细控制

5. 网格线和区域命名

  • 可以为网格线和区域命名,提高代码可读性
  • 便于团队协作和维护
  • 使复杂布局更易于理解和修改
.named-grid {
   
    display: grid;
    grid-template-columns: [start] 1fr [middle] 1fr [end];
    grid-template-rows: [top] 100px [center] 100px [bottom];
}

.area-grid {
   
    grid-template-areas: 
        "header header header"
        "sidebar main main"
        "footer footer footer";
}

6. 子元素定位灵活

  • 可以精确控制子元素跨越的行数和列数
  • 支持重叠布局
  • 子元素可以脱离正常文档流进行定位
.item1 {
   
    grid-column: 1 / 3; /* 占据第1到第3列 */
    grid-row: 1 / 2;    /* 占据第1行 */
}

7. 与 Flexbox 互补

  • Grid 适合整体页面布局
  • Flexbox 适合一维布局(行或列)
  • 两者结合使用可以构建更复杂的界面

8. 浏览器支持良好

  • 现代浏览器都支持 CSS Grid
  • 有良好的回退方案支持旧浏览器
  • 性能优化良好

9. 简化代码

  • 减少了对额外包装元素的需求
  • 无需清除浮动等传统布局技巧
  • 代码更简洁、可读性更强

总的来说,CSS Grid 提供了一种更直观、更强大的布局方式,特别适合构建复杂的网页布局,是现代 Web 开发中不可或缺的工具。
具体内容实现代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>网格布局详解</title>
    <style>
        /* 基础样式 */
        .container {
            margin: 20px 0;
            padding: 15px;
            border: 2px solid #333;
        }

        .box {
            background-color: #3498db;
            color: white;
            padding: 20px;
            text-align: center;
            font-weight: bold;
        }

        /* 1. 基本网格布局 */
        .basic-grid {
            display: grid;                    /* 启用网格布局 */
            grid-template-columns: 200px 200px 200px; /* 定义3列,每列200px */
            grid-template-rows: 100px 100px;  /* 定义2行,每行100px */
            gap: 10px;                        /* 网格间隙 */
        }

        /* 2. 使用fr单位的网格 */
        .fr-grid {
            display: grid;
            grid-template-columns: 1fr 2fr 1fr; /* fr单位:按比例分配剩余空间 */
            grid-template-rows: 100px 100px;
            gap: 10px;
        }

        /* 3. 重复网格 */
        .repeat-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr); /* 重复4次,每列占1份空间 */
            grid-template-rows: repeat(2, 100px);  /* 重复2次,每行100px */
            gap: 10px;
        }

        /* 4. 自动网格 */
        .auto-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); /* 自适应列数 */
            gap: 10px;
        }

        /* 5. 网格线命名 */
        .named-grid {
            display: grid;
            grid-template-columns: [start] 1fr [middle] 1fr [end]; /* 命名网格线 */
            grid-template-rows: [top] 100px [center] 100px [bottom];
            gap: 10px;
        }

        /* 6. 网格区域命名 */
        .area-grid {
            display: grid;
            grid-template-areas: 
                "header header header"
                "sidebar main main"
                "footer footer footer";
            grid-template-columns: 150px 1fr 1fr;
            grid-template-rows: 80px 1fr 60px;
            gap: 10px;
            height: 300px;
        }

        .header { 
            grid-area: header; 
            background-color: #e74c3c;
        }

        .sidebar { 
            grid-area: sidebar; 
            background-color: #2ecc71;
        }

        .main { 
            grid-area: main; 
            background-color: #f39c12;
        }

        .footer { 
            grid-area: footer; 
            background-color: #9b59b6;
        }

        /* 7. 子元素定位 */
        .positioned-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            grid-template-rows: repeat(3, 100px);
            gap: 10px;
        }

        .item1 {
            grid-column: 1 / 3;    /* 占据第1到第3列 */
            grid-row: 1 / 2;       /* 占据第1行 */
            background-color: #e74c3c;
        }

        .item2 {
            grid-column: 3 / 5;    /* 占据第3到第5列 */
            grid-row: 1 / 3;       /* 占据第1到第3行 */
            background-color: #2ecc71;
        }

        .item3 {
            grid-column: 1 / 2;    /* 占据第1列 */
            grid-row: 2 / 4;       /* 占据第2到第4行 */
            background-color: #f39c12;
        }

        .item4 {
            grid-column: 2 / 4;    /* 占据第2到第4列 */
            grid-row: 3 / 4;       /* 占据第3行 */
            background-color: #9b59b6;
        }
    </style>
</head>
<body>
    <h1>网格布局(Grid Layout)详解</h1>

    <!-- 1. 基本网格布局 -->
    <div class="container">
        <h2>1. 基本网格布局</h2>
        <div class="basic-grid">
            <div class="box">1</div>
            <div class="box">2</div>
            <div class="box">3</div>
            <div class="box">4</div>
            <div class="box">5</div>
            <div class="box">6</div>
        </div>
        <p>使用 <code>grid-template-columns</code> 和 <code>grid-template-rows</code> 定义网格结构</p>
    </div>

    <!-- 2. 使用fr单位 -->
    <div class="container">
        <h2>2. 使用fr单位</h2>
        <div class="fr-grid">
            <div class="box">1fr</div>
            <div class="box">2fr</div>
            <div class="box">1fr</div>
            <div class="box">1fr</div>
            <div class="box">2fr</div>
            <div class="box">1fr</div>
        </div>
        <p><code>fr</code> 单位表示可用空间的分数</p>
    </div>

    <!-- 3. 重复网格 -->
    <div class="container">
        <h2>3. 重复网格</h2>
        <div class="repeat-grid">
            <div class="box">1</div>
            <div class="box">2</div>
            <div class="box">3</div>
            <div class="box">4</div>
            <div class="box">5</div>
            <div class="box">6</div>
            <div class="box">7</div>
            <div class="box">8</div>
        </div>
        <p>使用 <code>repeat()</code> 函数简化重复的网格定义</p>
    </div>

    <!-- 4. 自动网格 -->
    <div class="container">
        <h2>4. 自动网格</h2>
        <div class="auto-grid">
            <div class="box">1</div>
            <div class="box">2</div>
            <div class="box">3</div>
            <div class="box">4</div>
            <div class="box">5</div>
            <div class="box">6</div>
        </div>
        <p><code>auto-fit</code> 和 <code>minmax()</code> 实现响应式网格</p>
    </div>

    <!-- 5. 网格区域命名 -->
    <div class="container">
        <h2>5. 网格区域命名</h2>
        <div class="area-grid">
            <div class="box header">Header</div>
            <div class="box sidebar">Sidebar</div>
            <div class="box main">Main Content</div>
            <div class="box footer">Footer</div>
        </div>
        <p>使用 <code>grid-template-areas</code> 创建复杂的布局结构</p>
    </div>

    <!-- 6. 子元素定位 -->
    <div class="container">
        <h2>6. 子元素定位</h2>
        <div class="positioned-grid">
            <div class="box item1">1 (跨度: 2列, 1行)</div>
            <div class="box item2">2 (跨度: 2列, 2行)</div>
            <div class="box item3">3 (跨度: 1列, 2行)</div>
            <div class="box item4">4 (跨度: 2列, 1行)</div>
        </div>
        <p>使用 <code>grid-column</code> 和 <code>grid-row</code> 精确控制子元素位置</p>
    </div>
    </body>
</html>
相关文章
|
4月前
|
存储 人工智能 API
RAG:让AI不再胡说八道的秘密武器
想象一下,你的AI助手突然变成了一个什么都知道的专家,不再胡编乱造,而是有理有据地回答你的问题。这不是科幻小说,这就是RAG技术的魔力!让我们一起探索如何让AI变得更聪明、更可靠的奥秘。
|
2月前
|
人工智能 自然语言处理 前端开发
最佳实践2:用通义灵码以自然语言交互实现 AI 高考志愿填报系统
本项目旨在通过自然语言交互,结合通义千问AI模型,构建一个智能高考志愿填报系统。利用Vue3与Python,实现信息采集、AI推荐、专业详情展示及数据存储功能,支持响应式设计与Supabase数据库集成,助力考生精准择校选专业。(239字)
215 12
|
存储 NoSQL Java
什么是Cookie与Session之Session详解
什么是Cookie与Session之Session详解
1010 0
|
2月前
|
人工智能 供应链 安全
智能体开发的学习路径:对标国家职业标准的系统化能力构建
程序员陈凯苦于转型智能体开发,课程零散难入门。直到接触“智能体来了”系统化课程,依《人工智能工程技术人员国家职业标准》分三阶段进阶:1-3月打基础,掌握Python、大模型与数据库;3-6月学架构、意图识别与对话管理,达中级水平;6-12月实战企业级项目,如供应链智能体,契合高级工程师要求。课程融合API开发、安全治理与模型优化,助力从Java开发者成长为AI工程师。
|
4月前
|
人工智能 自然语言处理 前端开发
用通义灵码在VsCode生成新浪新闻某文章HTML页面
在VSCode中安装通义灵码插件,可高效辅助编程。通过输入提示词,结合网页内容生成代码,优化开发流程。AI辅助显著提升编码速度与质量,引发对未来开发岗位的思考。
166 0
|
5月前
|
数据采集 数据可视化 JavaScript
用 通义灵码和 PyQt5 爬虫智能体轻松爬取掘金,自动化采集技术文章和数据
本文介绍了如何利用智能开发工具通义灵码和Python的PyQt5框架,构建一个自动化爬取掘金网站技术文章和数据的智能爬虫系统。通过通义灵码提高代码编写效率,使用PyQt5创建可视化界面,实现对爬虫任务的动态控制与管理。同时,还讲解了应对反爬机制、动态内容加载及数据清洗等关键技术点,帮助开发者高效获取并处理网络信息。
|
2月前
|
人工智能 开发框架 自然语言处理
智能体来了!从大学课堂到产业实践,AI人才培养的全新路径
人工智能浪潮加速,“智能体”正推动AI从技术走向应用。黎跃春教授倡导智能体教育与产业融合,提出“3+2”学习路径,助力大学生零基础入门、实战进阶,培养跨学科创新人才,迎接未来AI新蓝海。
|
2月前
|
人工智能 开发框架 自然语言处理
智能体来了!智能体教育新纪元:从黎跃春的智能体开发实训,看AI人才培养的未来路径
智能体时代来临,AI教育迈向“系统智能”新阶段。从零基础入门到项目实训,再到产教融合,培养具备AI思维与实战能力的创新型人才,推动教育与产业双向奔赴。
|
4月前
|
供应链 前端开发 UED
帮助vscode初学者制作html网页
## 代码摘要 这是一个模拟新浪新闻的HTML页面,标题为"中国驻德国大使馆举办招待会 庆祝中德建交50周年"。 **主要特点:** - 采用800px居中布局,模仿新浪新闻风格 - 包含新闻标题、视频、多张图片和正文内容 - 使用CSS设置不同颜色区分元素(紫色标题、棕色时间、绿色文本等) - 嵌入视频播放器和5张新闻图片,支持错误处理 - 相关新闻链接点击弹出提示信息 - 使用localStorage记录页面访问次数 - 兼容性处理完善,支持媒体资源加载失败时显示默认占位图 页面结构清晰,样式美观,功能完整,具有良好的用户体验。
227 2
|
4月前
|
搜索推荐 算法 Java
基于大数据的旅游可视化及推荐系统
本项目围绕数字化旅游系统的开发与应用展开研究,结合SpringBoot、Layui、MySQL、Java等技术,构建基于协同过滤算法的智能推荐系统。内容涵盖项目背景、研究现状、开发工具及功能结构,旨在提升旅游体验与管理效率,推动旅游业数字化转型。

热门文章

最新文章