首页 > 其他分享 >[学习笔记]从Flexbox到Grid布局的实战指南

[学习笔记]从Flexbox到Grid布局的实战指南

时间:2024-12-08 12:31:05浏览次数:11  
标签:flex Flexbox 布局 笔记 grid Grid 项目

现代CSS功能:从Flexbox到Grid布局的实战指南

随着Web开发的不断演进,CSS布局技术也在不断发展。现代CSS引入了强大的布局工具,如Flexbox和Grid,使开发者能够更轻松地创建复杂的网页布局。在这篇博客中,我们将深入探讨这些现代CSS功能,了解它们的特点,并提供实用指南帮助您在项目中应用这些技术。

一、从盒模型到现代布局的演变

在网页布局的早期阶段,开发者主要依靠浮动(floats)和定位(positioning)来创建复杂布局。然而,这些方法往往需要大量的代码和技巧,且难以维护。随着需求的增加,Flexbox和Grid应运而生,为开发者提供了更加直观和高效的布局方式。

1.1 盒模型的基础

在深入了解Flexbox和Grid之前,理解CSS盒模型(Box Model)的基础是至关重要的。CSS盒模型包括边距(margin)、边框(border)、填充(padding)和内容(content)。每个元素在网页上都是一个矩形框,盒模型定义了元素的总大小和空间占用。

.box {
    margin: 10px;
    border: 2px solid #000;
    padding: 20px;
    width: 100px;
}

二、Flexbox布局

Flexbox,全称为“Flexible Box”(弹性盒子),是一种一维布局模型,主要用于单行或单列的布局设计。它的独特之处在于能够在容器内的所有子元素之间自动分配多余的空间,并调整它们的大小以填充容器。

2.1 Flexbox的基本概念

  • Flex容器和项目:设定display: flex;的元素成为Flex容器,其直接子元素则为Flex项目。
  • 主轴和交叉轴:Flexbox布局遵循主轴和交叉轴的概念,项目可以沿任意轴排列。
  • 项目对齐:使用justify-contentalign-items可以分别控制项目在主轴和交叉轴上的对齐方式。

2.2 Flexbox属性详解

  1. flex-direction: 决定项目在Flex容器的排列方向。

    • row: 默认值,从左到右在主轴上排列。
    • column: 项目从上到下排列。
    .flex-container {
        display: flex;
        flex-direction: row;
    }
    
  2. justify-content: 定义项目在主轴上的对齐方式。

    • flex-start: 项目向主轴的起始位置靠齐。
    • center: 项目居中。
    • space-between: 项目平均分布,首尾项目紧靠容器边缘。
    .flex-container {
        justify-content: center;
    }
    
  3. align-items: 设置项目在交叉轴上的对齐方式。

    • stretch: 默认值,项目将填充容器。
    • flex-end: 项目与容器交叉轴的末端对齐。
    .flex-container {
        align-items: stretch;
    }
    
  4. flex-wrap: 控制项目是否在容器中换行。

    • nowrap: 默认值,所有项目不换行。
    • wrap: 项目换行。
    .flex-container {
        flex-wrap: wrap;
    }
    
  5. flex: 定义项目的增长和收缩能力。

    • flex-grow: 项目占用多余空间的能力。
    • flex-shrink: 项目在容器缩小时的收缩能力。
    • flex-basis: 项目的初始大小。
    .flex-item {
        flex: 1 0 100px;
    }
    

2.3 实战案例:创建响应式导航栏

<nav class="navbar">
    <div class="logo">Logo</div>
    <ul class="nav-links">
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Services</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</nav>
.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 1rem;
    background-color: #333;
}

.nav-links {
    display: flex;
    list-style: none;
}

.nav-links li a {
    color: white;
    padding: 1rem;
    text-decoration: none;
}

三、Grid布局

Grid布局是一种强大的二维布局系统,专注于页面的列和行布局。与Flexbox不同,Grid允许开发者在水平和垂直两个方向上同时控制布局。

3.1 Grid的基本概念

  • Grid容器和项目:使用display: grid;定义的元素称为Grid容器,其直接子元素为Grid项目。
  • 网格轨道和单元格:轨道由网格线围成,与单元格共同构成网格。
  • 区域:可以合并多个单元格来创建更大的区域。

3.2 Grid属性详解

  1. grid-template-columns、grid-template-rows: 定义网格的列和行。

    .grid-container {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        grid-template-rows: auto 200px;
    }
    
  2. grid-gap: 网格项目之间的间距。

    • grid-row-gap: 行间距。
    • grid-column-gap: 列间距。
    .grid-container {
        grid-gap: 10px;
    }
    
  3. grid-area: 定义项目在布局中的位置。

    .header {
        grid-area: header;
    }
    
  4. grid-template-areas: 使用命名网格区域的方式定义布局。

    .grid-container {
        grid-template-areas:
        "header header header"
        "sidebar main main"
        "footer footer footer";
    }
    
  5. align-items、justify-items: 控制项目在单元格内的对齐方式。

    .grid-container {
        align-items: center;
        justify-items: center;
    }
    

3.3 实战案例:创建复杂网站布局

<div class="grid-container">
    <header class="header">Header</header>
    <aside class="sidebar">Sidebar</aside>
    <main class="main">Main content</main>
    <footer class="footer">Footer</footer>
</div>
.grid-container {
    display: grid;
    grid-template-columns: 200px 1fr;
    grid-template-rows: 100px 1fr 50px;
    grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
    grid-gap: 10px;
    height: 100vh;
}

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

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

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

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

四、Flexbox与Grid的选择

尽管Flexbox和Grid各自擅长不同的布局方式,它们并非互斥的。您可以在同一项目中同时使用它们,以实现灵活而高效的布局。

4.1 使用Flexbox的场景

  • 需要单行或单列布局。
  • 需要响应式导航栏或简单的组件排列。
  • 项目之间的空间分布。

4.2 使用Grid的场景

  • 复杂的页面布局。
  • 需要精确控制行列排列和对齐。
  • 网格项目需要跨越多个行或列。

五、总结

通过Flexbox和Grid,现代CSS提供了强大的工具来实现复杂而灵活的网页布局。Flexbox适用于一维排列,而Grid则在二维布局中完美胜任。理解每种布局的核心概念和属性,并结合实际需求选择合适的工具,将使您的网页设计更加高效、美观和维护简便。

标签:flex,Flexbox,布局,笔记,grid,Grid,项目
From: https://blog.csdn.net/wahzx/article/details/144324177

相关文章

  • 学习笔记061——设计模式2
    文章目录结构型模式1、代理模式2、适配器模式2.1、默认适配器模式2.2、对象适配器模式2.3、类适配器模式2.4、适配器模式总结3、桥梁模式4、装饰模式5、门面模式6、组合模式7、享元模式8、结构型模式总结结构型模式前面创建型模式介绍了创建对象的一些设计模式,这节......
  • [LeetCode] 2684. Maximum Number of Moves in a Grid
    Youaregivena0-indexedmxnmatrixgridconsistingofpositiveintegers.Youcanstartatanycellinthefirstcolumnofthematrix,andtraversethegridinthefollowingway:Fromacell(row,col),youcanmovetoanyofthecells:(row-1,col+......
  • Task06&Task07学习笔记
    Task06:循环LoopFor循环循环范围特点:基于提供的范围,重复执行特定次数的操作foriinrange(m,n+1):range(m,n+1)是左闭右开区间,从m到nrange(n)相当于range(0,n)奇偶数列生成foriinrange(0,10,2):print(i)输出:02468反向数列生成foriinreversedrange(0,10,1):pr......
  • 黑马微服务开发与实战学习笔记_导论
    系列博客目录文章目录系列博客目录为什么学微服务?定义为什么学微服务?从下图搜索指数可以看出,微服务热度不减公司中很多微服务的应用。公司岗位要求中很多微服务的身影。定义 微服务是一种软件架构风格,它是以专注于单一职责的很多小型项目为基础,组合出复杂......
  • 文献阅读笔记|将H&E图像转换为虚拟免疫组化图像的病理学工具|Accelerating histopatho
    论文链接:https://doi.org/10.1038/s42256-024-00889-5论文信息:发表于NatureMachineIntelligence。2023年12月4日投稿,2024年7月29日接收,2024年9月9日online目录AbstractIntroduction1、从HE染色病理图像合成多重免疫组化(IHC)染色图像的意义2、虚拟染色【1】含义介绍【2】配对模......
  • 8条笔记,30天涨粉1.8w!用AI做林黛玉怼人视频,涨粉太香了!(附完整教程)
    大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年+,也一名AIGC爱好者,持续分享更多前沿的「AI工具」和「AI副业玩法」,欢迎一起交流~最近「林黛玉怼人」系列的账号太火了!而且内容太太太让人上瘾了!在小红书刷到了林黛玉怼人的视频,愣是被硬控了10多分钟,才「依依不舍......
  • nginx配置笔记
    前言nginx官方文档:https://nginx.org/en/docs/openresty官方文档:https://github.com/openresty/lua-nginx-module一、配置1.配置实例1.1.80端口转443server{listen80default_server;listen[::]:80default_server;rewrite^https://$http......
  • Forkify学习笔记
    MVC模式之Controller与View如何通信?用到发布-订阅者模式订阅者(Subscriber):想要响应事件的代码发布者(Publisher):知道何时触发事件的代码View中监听事件发生,真正的事件处理要在Controller里面。现在的问题是:事件处理函数controlRecipe()在Controller当中,用于渲染菜谱;addHan......
  • DeBian系统部署思源笔记
    引言该过程参考于以下文章:思源笔记docker部署解决docker镜像仓库下载慢安装docker检查docker是否安装检查服务器系统内是否安装了docker:docker--version若未安装docker,则显示如下命令:-bash:docker:commandnotfound安装docker操作切换清华镜像源:sudo......
  • 运筹学笔记——求解线性规划人工变量法
    这学期学校开设了运筹学这门课,虽然之前已经对线性规划有过了解,但是几种求解方法则是新接触,写个笔记留作复习备用前面学习了单纯形法,在单纯形法中,我们考虑的是一个相对理想的情形,即约束条件的系数矩阵A中已包含应该m阶(m为约束条件个数)的单位矩阵。在这种情况下,取该单位矩阵......