在线生成工具 :https://cssgrid-generator.netlify.app/

文章

基本概念

采用网格布局的区域,称为”容器”(container)。容器内部采用网格定位的子元素,称为”项目”(item)。

行和列的交叉区域,称为”单元格”(cell)。


行列属性

grid-template-columns 属性,grid-template-rows 属性

display: grid指定一个容器采用网格布局。

  1. div{
  2. display:grid;
  3. }

行内元素: inline-grid

grid-template-columns 定义每一列的列宽
grid-template-rows 定义每一行的行高

  1. .container {
  2. display: grid;
  3. grid-template-columns: 100px 100px 100px;
  4. grid-template-rows: 100px 100px 100px;
  5. }

Grid布局 - 图1

(1)repeat() 参数1:重复的次数,参数2:所要重复的值

  1. .container {
  2. display: grid;
  3. grid-template-columns: repeat(3, 33.33%);
  4. grid-template-rows: repeat(3, 33.33%);
  5. }

(2)auto-fill 关键字
如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。

  1. .container {
  2. display: grid;
  3. grid-template-columns: repeat(auto-fill, 100px);
  4. }

演示网站 点击

(3)fr 关键字

意为片段的意思,方便表示比例关系.如果两列的宽度分别为1fr2fr,就表示后者是前者的两倍。

  1. .container {
  2. display: grid;
  3. grid-template-columns: 1fr 1fr;
  4. }

Grid布局 - 图2

fr可以与绝对长度的单位结合使用,这时会非常方便。

  1. .container {
  2. display: grid;
  3. grid-template-columns: 150px 1fr 2fr;
  4. }

Grid布局 - 图3

(7)布局实例

两栏布局

  1. .wrapper {
  2. display: grid;
  3. grid-template-columns: 70% 30%;
  4. }

间距属性

grid-row-gap 属性,grid-column-gap 属性,grid-gap 属性

grid-row-gap 行间距
grid-column-gap 列间距
grid-gap : ; 简写

  1. .container {
  2. grid-row-gap: 20px;
  3. grid-column-gap: 20px;
  4. }


项目属性

项目的位置是可以指定的,具体方法就是指定项目的四个边框,分别定位在哪根网格线。

全部属性

  1. grid-column-start属性:左边框所在的垂直网格线
  2. grid-column-end属性:右边框所在的垂直网格线
  3. grid-row-start属性:上边框所在的水平网格线
  4. grid-row-end属性:下边框所在的水平网格线

该代码指定,1号项目的左边框是第二根垂直网格线,右边框是第四根垂直网格线
说明:网格布局为3行 x 3列,因此有4根垂直网格线和4根水平网格线

  1. .item-1 {
  2. grid-column-start: 2;
  3. grid-column-end: 4;
  4. }
  1. <div id="container">
  2. <div class="item item-1">1</div>
  3. <div class="item item-2">2</div>
  4. <div class="item item-3">3</div>
  5. <div class="item item-4">4</div>
  6. <div class="item item-5">5</div>
  7. <div class="item item-6">6</div>
  8. <div class="item item-7">7</div>
  9. <div class="item item-8">8</div>
  10. <div class="item item-9">9</div>
  11. </div>
  12. <style>
  13. #container {
  14. display: grid;
  15. grid-template-columns: 100px 100px 100px;
  16. grid-template-rows: 100px 100px 100px;
  17. }
  18. .item {
  19. font-size: 4em;
  20. text-align: center;
  21. border: 1px solid #e5e4e9;
  22. }
  23. .item-1 {
  24. grid-column-start: 2;
  25. grid-column-end: 4;
  26. }
  27. </style>

Grid布局 - 图4

grid-column 属性 grid-row属性

grid-column属性是grid-column-start和grid-column-end的合并简写形式,grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。

  1. .item {
  2. grid-column: <start-line> / <end-line>;
  3. grid-row: <start-line> / <end-line>;
  4. }


  1. .item-1 {
  2. grid-column: 1 / 3;
  3. grid-row: 1 / 2;
  4. }
  5. /* 等同于 */
  6. .item-1 {
  7. grid-column-start: 1;
  8. grid-column-end: 3;
  9. grid-row-start: 1;
  10. grid-row-end: 2;
  11. }


grid-area属性

grid-area 属性指定项目放在哪一个区域

  1. .item-1 {
  2. grid-area: e;
  3. }

下面代码中,1号位项目位于 e 区域。

  1. #container {
  2. display: grid;
  3. grid-template-columns: 100px 100px 100px;
  4. grid-template-rows: 100px 100px 100px;
  5. grid-template-areas: 'a b c'
  6. 'd e f'
  7. 'g h i';
  8. }
  9. .item {
  10. font-size: 4em;
  11. text-align: center;
  12. border: 1px solid #e5e4e9;
  13. }
  14. .item-1 {
  15. grid-area: e;
  16. }
  17. <div id="container">
  18. <div class="item item-1">1</div>
  19. <div class="item item-2">2</div>
  20. <div class="item item-3">3</div>
  21. <div class="item item-4">4</div>
  22. <div class="item item-5">5</div>
  23. <div class="item item-6">6</div>
  24. <div class="item item-7">7</div>
  25. <div class="item item-8">8</div>
  26. <div class="item item-9">9</div>
  27. </div>

grid-area 属性还可以用作 grid-row-start 、grid-column-start、grid-row-end、grid-column-end的合并简写形式,直接指定项目的位置

  1. .item {
  2. grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
  3. }
  4. .item-1 {
  5. grid-area: 1 / 1 / 3 / 3;
  6. }


justify-self 属性,align-self 属性,place-self 属性

justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目。
align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目。
place-self属性是align-self属性和justify-self属性的合并简写形式。

  1. .item {
  2. justify-self: start | end | center | stretch;
  3. align-self: start | end | center | stretch;
  4. }
  5. place-self: <align-self> <justify-self>; //如果省略第二个值则会认为两个值相等

未结束