基本概念

  • 网格容器: 由若干个矩形网格单元构成
  • 网格项目: 网格容器的子元素,必须放在网络单元中
  • 网格单元: 有”单元格”和”网格区域”二种表现形式
  • 网格轨道: 由多个网格单元组成,根据排列方向有”行轨”和”列轨”之分
  • 轨道间距: 容器中轨道之间的间距,有”行轨间距”,”列轨间距”

网格单元

  1. .container {
  2. border: 1px solid #000;
  3. padding: 0.5em;
  4. /* grid子元素默认为块元素 flex中子元素默认为行内元素 */
  5. display: grid;
  6. /* 列宽 */
  7. grid-template-columns: 5em 5em;
  8. /* 行高 */
  9. grid-template-rows: 8em;
  10. /* 轨道间距: 水平 垂直 */
  11. gap: 0.5em 1em;
  12. /* 两个值一样可简写成一个 */
  13. }
  14. .container>.item {
  15. border: 1px solid #000;
  16. background-color: rgb(218, 133, 133);
  17. padding: 0.5em;
  18. }

设置单元格尺寸的新单位:fr

  1. .container {
  2. border: 1px solid #000;
  3. padding: 0.5em;
  4. /* grid子元素默认为块元素 flex中子元素默认为行内元素 */
  5. display: grid;
  6. /* 列宽 */
  7. grid-template-columns: 5em 5em 5em;
  8. /* 1. fr 与 auto 之间的区别 */
  9. /* 新需求: 中间一列的宽度是二边的二倍 */
  10. /* 此时 auto 完全失灵 */
  11. grid-template-columns: 1fr 2fr 1fr;
  12. /* 2. fr 与 % 的区别 */
  13. /* 新需求: 中间一列是左右的三倍 */
  14. /* grid-template-columns: 1fr 3fr 1fr; */
  15. /* grid-template-columns: 20% 60% 20%; */
  16. /* % 与 fr 可以共存,计算方式,总宽度减去百分比的宽度,将剩下的全部分给fr */
  17. grid-template-columns: 20% 1fr 20%;
  18. /* auto, fr, % 都是相对单位,都可以触发自动计算机制,尽可能不要同时出现 */
  19. /* 3. fr 与其它单位混合, 如 em, px */
  20. /* px是固定的,em是固定,计算时要减去这些固定值,将剩下的空间在fr之间分配 */
  21. /* 总宽度 - 8em - 200px,将剩下的空间在第2列与第3列之间分配 */
  22. grid-template-columns: 8em 1fr 2fr 200px;
  23. /* 4. fr 尽可能不要与 auto 同时使用 */
  24. /* auto 与 px , em ,会自动计算 */
  25. grid-template-columns: 30% auto 10em;
  26. /* 与 auto 相邻的不是em,rem,%,而是fr */
  27. grid-template-columns: 1fr auto 1fr;
  28. /* 轨道间距 水平 垂直 */
  29. gap: 0.5em 1em;
  30. /* 两个值一样可简写成一个 */
  31. }

设置网格单元尺寸的常用函数: repeat(),minmax()

  • repeat()
  1. /* 1. reapeat() */
  2. grid-template-columns: repeat(3, 10em);
  3. /* 第二个参数可以是多个值 */
  4. grid-template-columns: repeat(3, 10em 2em);
  5. grid-template-columns: repeat(3, 1fr);
  6. grid-template-columns: repeat(3, 1fr 2fr);
  7. /* 展开 */
  8. grid-template-columns: 1fr 2fr 1fr 2fr 1fr 2fr;
  9. /* 混合使用 */
  10. grid-template-columns: repeat(2, 1fr) 2fr;
  11. /* 展开 */
  12. grid-template-columns: 1fr 1fr 2fr;
  • minmax()

    1. /* 2. minmax() */
    2. /* 中间列,最小宽度是20em,最大宽高是左右的2倍 */
    3. grid-template-columns: 1fr minmax(20em, 2fr) 1fr;
    4. grid-template-columns: 20em minmax(20em, 1fr);
    5. /* grid-template-columns: 20em minmax(20em, auto); */

    网格单元的排列方式与隐式轨道

  1. 排列方式 : grid-auto-flow
  2. 隐式轨道的行高: grid-auto-rows
  3. 隐式轨道的列宽: grid-auto-columns

    1. /* 原来声明的网格单元叫: 显式轨道 */
    2. /* 多出来的新项目显示的轨道称为: 隐式轨道 */
    3. /* 此时,默认项目在容器中按: 先行后列的顺序排列,“行优先” */
    4. grid-auto-flow: row;
    5. /* 自动生成的隐式轨道的高度是自动的 */
    6. /* 行优先时要设置隐式轨道的行高 */
    7. grid-auto-rows: 5em;
    8. /* 列优先 */
    9. /* grid-auto-flow: column; */
    10. /* 列优时要设置的隐式轨道的列宽 */
    11. /* grid-auto-columns: 1fr; */

    自定义项目在容器中显示的位置

    1. /* 编号从左上角开始(1,1),并递增 */
    2. /* grid-area: 设置任何一个项目所在的网格单元的区域 */
    3. /* grid-area: 行起始编号 / 列起始编号 / 行结束编号 / 列结束编号 */
    4. /* 以第5个项目来举例 */
    5. .container>.item:nth-of-type(5) {
    6. background-color: lightyellow;
    7. grid-area: 2 / 2 / 3 / 3;
    8. /* 将它放入到第一个网格单元中 */
    9. grid-area: 1 / 1 / 2 / 2;
    10. /* 默认项目是跨越一行一列 */
    11. grid-area: 1 / 1;
    12. /* 但是,如果要跨越1行以上或1列以上,就不能省 */
    13. /* 例如要跨2行3列 */
    14. grid-area: 1 / 1 / 3 / 4;
    15. /* 通常只关心跨几行或几列,并不关心结束的编号 */
    16. grid-area: 1 / 1 / span 2 / span 3;
    17. }
    18. /* 选中第一个项目 */
    19. .container>.item:first-of-type {
    20. background-color: lightgreen;
    21. grid-area: 3 / 1 / span 1 / span 3;
    22. /* 因为 3 / 1 是当前位置,所以可省 */
    23. grid-area: span 1 / span 3;
    24. /* 之前说过,默认是跨一行一列 */
    25. /* grid-area: span 3; */
    26. grid-area: auto / span 3;
    27. }

总结:
grid-area: 参数数量不同,意义不同

  1. 值中只有span
    1.1 单值: 跨的行数
    1.2 双值: 跨的行与列数,如果只想设置列数,就必须设置行数(auto)

  2. 值中有span和编号
    2.1 双值: 没有span,默认跨1行1列, grid-area: 2 / 3 ;
    2.2 三值: 省了列结束编号或跨的数量,此时前面的值可使用auto
    2.3 四值: 最完整的语法

总结

序号代码描述
1grid-template-columns设置轨道的列宽
2grid-template-rows设置轨道的列高
3gap设置轨道间距
4fr设置单元格尺寸单位
5repeat(),minmax()设置网格单元尺寸的常用函数
6grid-auto-flow网格单元排列方式
7grid-auto-rows、grid-auto-columns设置隐式轨道的行高、列宽
8grid-area自定义项目在容器的显示位置

更多相关文章

  1. android开发之GridLayout详解
  2. Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布
  3. Android(安卓)studio 百度地图开发(9)只显示网格不显示地图或者只
  4. Android(安卓)RecyclerView网格布局示例解析
  5. android绘图网格线java写法
  6. 在SOUI中使用网格布局
  7. 自定义布局RelativeLayout 画网格线
  8. Android(安卓)学习笔记之界面布局
  9. 小白用网格布局实现简单的计算器 ——Android

随机推荐

  1. PHP 常用命令行
  2. PHP实时生成并下载超大数据量的EXCEL文件
  3. PHP中opendir的用法
  4. php://output和php://stdout的区别
  5. php中获取当前时间的函数
  6. php注释的作用
  7. php编译安装扩展redis及swoole
  8. php的闭包是干嘛的
  9. php中use的用法是什么
  10. php的注释方法