• 【第八篇】CSS布局之网格布局


    一个网页根据其各个功能块的分布,通常将其分成多个组成部分。同时为了页面美观,通常将各个功能模块放在页面固定的地方。CSS中存在多种布局方法,例如浮动,弹性和网格布局。每种布局都有其适用的范围。

    网格布局介绍

    网格布局就是将页面分割呈n×m的网格结构,并将页面功能块放置在指定的子网格中。网格布局比较适合进行二维布局。从网格布局的功能上面来看,网格布局分为两个部分,一个部分是进行网格容器的网格划分,另一个部分是进行网格子内容绑定。

    网格的结构介绍如下:

    网格容器

    通过display:grid设定为网格容器,表示这个容器为一个网格容器。通过指定网格宽度和网格行高来划分网格。

    通过grid-template-columns方法来指定列的尺寸,通过grid-template-rows方法来指定行的尺寸。其取值可以是px,em,%等单位,也可以用1fr来表示。

    fr表示一个分数单位,用来表示剩余可用空间的比例。

    在行和列中出现几个属性值就表示将容器划分成几行或者几列。且行列的宽高是根据属性值来划分的。默认宽度方向会自动填充全部的剩余宽度,高度方向会根据子网个的内容来填充。

    有时候为了避免重复的录入相同的数值,会使用repeat函数实现快捷输入尺寸。repeat(次数,重复的内容)

    1. .grid{
    2. display:grid;
    3. grid-template-columns: repeat(4,1fr); //根据行列的尺寸来进行网格的行列划分
    4. grid-template-rows: 1fr 4fr;
    5. grid-gap: 0.5rem; //设定网格之间的间距
    6. }

    子网格

    通过设定设定每个子网格占据的位置,实现网格的布局。

    在学习如何设定子网格占据的位置之前,需要先熟悉一下,CSS中关于网格的一些基本知识。如下图所示,网格由列编号,列间距,行编号和行间距组成。

    列编号从左向右顺序为1~n,从右向左顺序为-1~-n。

    行编号从上向下顺序为1~m,从下向上顺序为-1~-m。

    这样就可以通过列编号和行编号来组合设置子网格占据了哪些网格位置了。

    网格线编号法

    通过grid-column属性设置跨越的列编号,属性值为开始编号/结束编号。

    通过grid-row属性设置跨越的行编号,属性值为开始编号/结束编号。

    同时存在一个特殊的属性值span 表示占据一个网格轨道。

    举例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1">
    6. <title>CSS布局之网格布局title>
    7. <style type="text/css">
    8. .grid{
    9. display: grid;
    10. grid-template-columns: 1fr 1fr 1fr 1fr;
    11. grid-template-rows: repeat(9, 1fr);
    12. grid-column-gap: 1em;
    13. }
    14. .grid *{
    15. background-color: gray;
    16. }
    17. .head{
    18. grid-column: span 4;
    19. grid-row: 1/2;
    20. background-color: gray;
    21. height: 2em;
    22. }
    23. .nav{
    24. grid-column: 1/2;
    25. grid-row: 2/10;
    26. background-color: seagreen;
    27. }
    28. .content{
    29. grid-column: 2/5;
    30. grid-row: 2/10;
    31. background-color: lightblue;
    32. }
    33. style>
    34. head>
    35. <body>
    36. <div class="grid">
    37. <div class="head">这个地方是头部位置div>
    38. <div class="nav">这个地方是导航位置div>
    39. <div class="content">这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存div>
    40. div>
    41. body>
    42. html>

    效果:这样就可以轻松实现一个这样的页头,导航栏和主体的页面布局。

     网格线命名法

    由于使用编号不方便快速定位子网格的位置,所以CSS中还提供了网格线命名的方法。就是在定义网格容器的时候,定义出每个网格先的名称,同时通过start和end来表示网格的起始和结束位置。

    举例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1">
    6. <title>CSS布局之网格布局title>
    7. <style type="text/css">
    8. .grid{
    9. display: grid;
    10. grid-template-columns: [first-start] 1fr [first-end second-start] 3fr [second-end];
    11. grid-template-rows: repeat(9, 1fr);
    12. grid-column-gap: 1em;
    13. }
    14. .grid *{
    15. background-color: gray;
    16. }
    17. .head{
    18. grid-column: span 2;
    19. grid-row: 1/2;
    20. background-color: gray;
    21. height: 2em;
    22. }
    23. .nav{
    24. grid-column: first;
    25. grid-row: 2/10;
    26. background-color: seagreen;
    27. }
    28. .content{
    29. grid-column: second;
    30. grid-row: 2/10;
    31. background-color: lightblue;
    32. }
    33. style>
    34. head>
    35. <body>
    36. <div class="grid">
    37. <div class="head">这个地方是头部位置div>
    38. <div class="nav">这个地方是导航位置div>
    39. <div class="content">这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存div>
    40. div>
    41. body>
    42. html>

    效果:

     网格区域命名法

    在网格容器中直接针对各个网格区域定义名称,在子网格中定义占用的网格区域名称即可。

    举例:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1">
    6. <title>CSS布局之网格布局title>
    7. <style type="text/css">
    8. .grid{
    9. display: grid;
    10. grid-template-areas:
    11. " header header"
    12. " nav content";
    13. grid-template-columns: 1fr 3fr ;
    14. grid-template-rows: 1fr 9fr;
    15. grid-column-gap: 1em;
    16. }
    17. .grid *{
    18. background-color: gray;
    19. }
    20. .head{
    21. grid-area: header;
    22. background-color: gray;
    23. height: 2em;
    24. }
    25. .nav{
    26. grid-area: nav;
    27. background-color: seagreen;
    28. }
    29. .content{
    30. grid-area: content;
    31. background-color: lightblue;
    32. }
    33. style>
    34. head>
    35. <body>
    36. <div class="grid">
    37. <div class="head">这个地方是头部位置div>
    38. <div class="nav">这个地方是导航位置div>
    39. <div class="content">这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存储页面内容这个地方存div>
    40. div>
    41. body>
    42. html>

    效果:

  • 相关阅读:
    修改jquery-validation让你的验证提示更漂亮
    win10 wsl安装步骤
    Python进阶学习----一闭三器
    TypeScript 基本语法
    大神方案|如何重写一个万行代码的类文件
    力扣(LeetCode)2578. 最小和分割(C++)
    Express.js实现注册和登录
    性能测试之Fiddler 如何批量修改请求信息
    Qlik Sense On-demand apps
    初阶数据结构学习记录——셋 单链表(1)
  • 原文地址:https://blog.csdn.net/baidu_38766791/article/details/126067067