# chinese-layouts

> 中文版的 grid 布局

Latest version **0.0.3** (published 2022-12-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install chinese-layouts
pnpm add chinese-layouts
yarn add chinese-layouts
bun add chinese-layouts
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2022-12-31 |
| First published | 2020-06-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 28.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | fancy-components |
| Keywords | 中文, grid, layouts, 布局 |

## Links

- npm: https://www.npmjs.com/package/chinese-layouts
- npm.io page: https://npm.io/package/chinese-layouts

## Alternatives

- [@lexical/table](https://npm.io/package/@lexical/table.md) — 3.0M weekly downloads
- [mantine-datatable](https://npm.io/package/mantine-datatable.md) — 98.2K weekly downloads
- [react-native-collapsible-tab-view](https://npm.io/package/react-native-collapsible-tab-view.md) — 70.6K weekly downloads
- [@handsontable/vue3](https://npm.io/package/@handsontable/vue3.md) — 16.1K weekly downloads
- [vuewordcloud](https://npm.io/package/vuewordcloud.md) — 7.2K weekly downloads

## Recent versions

- 0.0.3 (latest) — 2022-12-31
- 0.0.2 — 2022-12-31
- 0.0.1 — 2022-12-31
- 0.0.0 — 2020-06-13

## README

# 简介

`Chinese Layouts` 是一款利用 `CSS` 自定义属性来制作的中文布局 `CSS` 库，由于 `Grid` 布局十分强大，强大到甚至只需要两行 `CSS` 代码就可以完成一个基本的布局。但 `Grid` 属性较多较为复杂，并且不支持 `IE` 浏览器等特点导致了许多人并不很了解它。

不过近些年来随着 `IE` 浏览器的逐步退出市场，兼容性已经不再是特别需要纠结的一件事情了：

<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592559873047-1cdd5733-2927-42ab-9a86-509da38cd042.png" data-align="center">

可以看到各大浏览器的支持情况已经较为乐观了，为了让大家快速体验 `Grid` 布局的强大之处，`Chinese Layouts` 就此诞生！

该库的尺寸十分轻量级，只有不到 `1KB` 的大小(`653`字节 并且还是未`gzip`压缩的情况)，使用起来也是十分的方便。

## 使用方式

假设现在有一个`ul`元素，我们想要它变为一个九宫格的布局，首先需要在`ul`元素上写：

```css
ul {
  /* 这个是固定写法，必须先指定display为grid */
  display: grid;

  /* grid属性需要指定哪种布局 */
  grid: var(--九宫格);

  /* 加入一点间距，让九个元素相互之间有一定的距离 */
  gap: 10px;
}
```

然后在父元素里面添加九个元素：

```html
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>
```

这就完事啦：

<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592560465746-f9650210-1f61-4395-a258-759b8101f3a5.png" data-align="center">

当然这里其实是省略了一些父元素上的宽高以及子元素的颜色等细节。
这些细节就交给你们来决定，在此案例中 `Chinese Layouts` 只负责将父元素分割成九等分。

> 本文采用了[chinese-gradients](https://www.npmjs.com/package/chinese-gradients)来作为背景色

# 安装

要记得先引入这个库才能够去正常的使用。如果你的项目是一个工程化的项目，那么：

> npm i chinese-layouts

记得要在主文件中引入：

> import 'chinese-layouts'

同时也支持`sass`、`less`等，如:

> import 'chinese-layouts/chinese-layouts.scss'

如果你只是想在`<link>`标签里引入的话，那么：

> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chinese-layouts">

# 全部布局

## 声明 `display: grid;`

首先一定要记得声明 `display: grid;`
因为 `Chinese Layouts` 底层依赖的就是 `Grid` 布局。

## 居中

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593322440460-a530494b-78d5-4177-b90c-da1b8e1aad85.png" data-align="center"></center>

<center><b>grid: var(--居中);</b></center>
`DOM` 结构:

```html
<parent>
  <child />
</parent>
```

> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`

这种布局需要先在父元素上写这么两行代码:

```css
parent {
  display: grid;
  grid: var(--居中);
}
```
然后再在子元素上写上:
```css
child {
  grid-area: 中;
} 
```
但是看起来除了灰蒙蒙一片的背景好像啥也没有是吧，那是因为我们没给子元素加上宽高，而且子元素里也没有任何的内容，导致子元素宽高为`0`不可见，那么现在我们来给子元素一个宽高再来看看：
```css
child {
  width: 20px;
  height: 20px;
  grid-area: 中;
} 
```
子元素便会在父元素里水平垂直居中:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592655753277-5d75c3bd-4044-4ee8-b36f-c0a4e2511223.png" data-align="center"></center>

## 双列
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592658361025-cc9732b1-b052-44de-bedb-a9a7b5074f65.png" data-align="center"></center>
<center><b>grid: var(--双列);</b></center>

`DOM` 结构:
```html
<parent>
  <child1 />
  <child2 />
</parent>
```
> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`

来看看语法:
```css
parent {
  display: grid;
  grid: var(--双列);
}
```
可以看到现在两列紧紧的贴合在一起了，不过有时候这两列我们并不想它们紧贴在一起，这时我们可以使用 `gap` 属性来控制列与列之间的间距：

```css
parent {
  display: grid;
  grid: var(--双列);
  gap: 10px;
}
```
运行结果:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592657205377-3e273caa-8794-4bd8-95f8-6cf832858604.png" data-align="center"></center>

可以看到列与列直接距离变成我们设置的`10px`了，但 `gap` 属性只会改变列与列之间的距离，并不会改变与父元素之间的距离，所以之前紧贴着父元素的现在还是紧贴着父元素，如果想与父元素有间距的话可以给父元素加 `padding`:

<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592658064043-f8b4185d-ab24-468c-9385-9ae008cf3a71.png" data-align="center"></center>

双列布局是不需要指定子元素的 `grid-area` 属性的，不过你要是非要想指定一下的话也不是不可以:
```css
child1 {
  grid-area: 左;
}

child2 {
  grid-area: 右;
}
```
运行结果:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592658910496-2d0041e0-25fb-4226-94fa-1e194847e470.png" data-align="center"></center>

(可以通过指定 `grid-area` 来颠倒 `DOM` 位置，没事可以去试试)

## 三列
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592735572036-03ac3cce-db40-483c-ab67-9bfdfacfea48.png" data-align="center"></center>
<center><b>grid: var(--三列);</b></center>

咦？这不是双列吗？说好的三列呢？
其实是这样，三列中的最中间一列被做成了自适应了，如果不给宽度并且也没有任何带宽度的子元素的话宽度就会为`0`，所以就看不到最中间那列啦！

那咱们给中间的 `DOM` 元素一个宽度吧:
```html
<parent>
  <child1 />
  <child2 />
  <child3 />
</parent>
```
> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
    display: grid;
  grid: var(--三列);
}
child2 {
    width: 800px;
}
```
运行结果:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592736292283-9902887b-7cac-4600-9a37-e4f458fd2d75.png" data-align="center"></center>

也可以不给宽度，直接用内容去撑开:
```html
<parent>
  <child1 />
  <child2>child2</child2>
  <child3 />
</parent>
```
运行结果:
<center>
<img width="500" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592736903937-530183a0-d5f4-4b86-81c5-d312b6dd97fe.png" data-align="center"></center>

也同样可以用 `gap` 属性来控制间距:
```css
parent {
  display: grid;
  grid: var(--三列);
  gap: 10px;
}
child2 {
    width: 800px;
}
```
运行结果:
<center>
<img width="500" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1592737466156-84fbd5b3-d554-42f6-8012-87e4425ad563.png" data-align="center"></center>

三列布局是不需要指定子元素的 `grid-area` 属性的，不过你要是非要想指定一下的话也不是不可以:
```css
child1 {
  grid-area: 左;
}

child2 {
  grid-area: 中;
}

child2 {
  grid-area: 右;
}
```
运行结果：
<center>
<img width="500" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593060563706-c9e5cd52-ca71-4960-89e7-799bf940b25f.png" data-align="center"></center>

(可以通过指定子元素的 `grid-area` 属性来颠倒 `DOM` 位置，没事可以去试试)

## 吕形
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593077823902-96db8702-7bbf-4b50-bb40-176cffc7d41b.png" data-align="center"></center>

<center><b>grid: var(--吕形);</b></center>

可是这看起来也不像吕形啊，吕不是应该上面一个口下面一个口吗？
其实还是那个原理：上面的盒子如果不给高度的话默认为 `0`。

那咱们给个高度再看看:
```html
<parent>
  <child1 />
  <child2 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--吕形);
}
child1 {
  height: 100px;
}
child2 {
  overflow-y: auto;
}
```
运行结果：
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593078601562-1fb9be4c-8c4b-4259-ba22-f549c507ae54.png" data-align="center"></center>

还可以通过 `gap` 属性来控制间距:
```css
parent {
  display: grid;
  grid: var(--吕形);
  gap: 10px;
}
child1 {
    height: 100px;
}
```
运行结果：
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593079933229-227c75c4-ca8f-4142-b0a4-43193b1ac2b5.png" data-align="center"></center>

也可以通过指定子元素的 `grid-area` 属性来颠倒 `DOM` 位置:

```css
parent {
  display: grid;
  grid: var(--吕形);
  gap: 10px;
}
child1 {
  grid-area: 下;
  overflow-y: auto;
}
child2 {
  height: 100px;
  grid-area: 上;
}
```
运行结果:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593081445734-24bcb648-4e58-4a60-8149-f592d98b686a.png" data-align="center"></center>

## 上下栏
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593087261675-ce18d56b-365c-4b20-917f-6c73e8e3af70.png" data-align="center"></center>

<center><b>grid: var(--上下栏);</b></center>

看过前面几种布局的朋友应该猜到了，是因为上盒子和下盒子没给高度导致现在只能看见中间那栏，咱们给个高度再来看看:
```html
<parent>
  <child1 />
  <child2 />
  <child3 />
</parent>
```
> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--上下栏);
}
child1 {
  height: 80px;
}
child2 {
  overflow-y: auto;
}
child3 {
  height: 100px;
}
```
运行结果：
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593087997964-adc7dc10-c27c-4a07-b6ab-998ee54c61ee.png" data-align="center"></center>

还可以通过 `gap` 属性来控制间距:

```css
parent {
  display: grid;
  grid: var(--上下栏);
  gap: 10px;
}
child1 {
  height: 80px;
}
child2 {
  overflow-y: auto;
}
child3 {
  height: 100px;
}
```
运行结果：
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593088132032-61ff1105-2958-435d-8a7f-2e387ce6d5d1.png" data-align="center"></center>

也可以通过指定子元素的 `grid-area` 属性来颠倒 `DOM` 位置:

```css
parent {
  display: grid;
  grid: var(--上下栏);
  gap: 10px;
}
child1 {
  grid-area: 中;
  overflow-y: auto;
}
child2 {
  height: 80px;
  grid-area: 上;
}
child3 {
  height: 100px;
  grid-area: 下;
}
```
运行结果:
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593230365225-5637471f-0e1a-4b8c-926b-9c295cc86483.png" data-align="center"></center>

## 四宫格
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593232077264-d4c37a90-304e-4601-8af0-23c65e398d94.png" data-align="center"></center>
<center><b>grid: var(--四宫格);</b></center>

`DOM` 结构：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
</parent>
```

> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`

```css
parent {
  display: grid;
  grid: var(--四宫格);
}
```

如果不想各个宫格紧贴在一起，可以用 `gap` 属性来控制间距：

```css
parent {
  display: grid;
  grid: var(--四宫格);
  gap: 10px;
}
```

运行结果：
<center>
<img width="300" src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593232559120-603953fd-3782-4401-a653-95de90de428c.png" data-align="center"></center>
<center><b>grid: var(--四宫格);</b></center>

`gap` 属性是控制行和列之间间距的，但如果你想要行间距和列间距不一样的话，就要用到下面两个属性了：
● `row-gap`：行与行之间的间距
● `column-gap`：列与列之间的间距

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593333927727-625602cc-df46-4ee5-baf1-730e056972d1.png" data-align="center"></center>
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593334014413-67e62943-e237-411c-be11-4d9f9478ed88.png" data-align="center"></center>

也可以通过 `grid-area` 属性来重新分配 `DOM` 元素的位置：

```html
child1 { grid-area: 左上; }
child2 { grid-area: 右上; }
child3 { grid-area: 左下; }
child4 { grid-area: 右下; }
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593324449382-5c04b261-989f-41d6-8305-f7f117f7b891.png" data-align="center"></center>

## 六宫格
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593324832033-12332a45-2bb5-4c85-b635-3f270c469168.png" data-align="center"></center>
<center><b>grid: var(--六宫格);</b></center>

`DOM` 结构：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
  <child5 />
  <child6 />
</parent>
```
> `DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`

```css
parent {
  display: grid;
  grid: var(--六宫格);
}
```

如果不想各个宫格紧贴在一起，可以用 `gap` 属性来控制间距：

```css
parent {
  display: grid;
  grid: var(--六宫格);
  gap: 10px;
}
```

运行结果：

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593324908178-b3ec0051-afd3-454e-8101-d2110f63a7f9.png" data-align="center"></center>
<center><b>grid: var(--六宫格);</b></center>

`gap` 属性是控制行和列之间间距的，但如果你想要行间距和列间距不一样的话，就要用到下面两个属性了：
● `row-gap`：行与行之间的间距
● `column-gap`：列与列之间的间距

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593334296948-40cd114e-75fc-4583-a91e-0f222a8e390b.png" data-align="center"></center>

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593334474797-8612fe1d-f1f1-47d1-95a6-c77d9ffa5cc4.png" data-align="center"></center>

也可以通过 `grid-area` 属性来重新分配 `DOM` 元素的位置：

```css
child1 { grid-area: 左上; }
child2 { grid-area: 右上; }
child3 { grid-area: 左下; }
child4 { grid-area: 右下; }
```
运行结果：

<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593325612620-1a131ff0-1d0c-4c38-a4a2-308b2e06c3be.png" data-align="center"></center>

## 九宫格
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593326064853-8d62bc0f-36c9-47fd-933b-048e9941f04f.png" data-align="center"></center>
<center><b>grid: var(--九宫格);</b></center>

`DOM` 结构：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
  <child5 />
  <child6 />
  <child7 />
  <child8 />
  <child9 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--九宫格);
}
```
如果不想各个宫格紧贴在一起，可以用 `gap` 属性来控制间距：
```css
parent {
  display: grid;
  grid: var(--九宫格);
  gap: 10px;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593326235123-6bd4627e-00de-4ac5-ab21-0bcad33d1660.png" data-align="center"></center>

`gap` 属性是控制行和列之间间距的，但如果你想要行间距和列间距不一样的话，就要用到下面两个属性了：
● `row-gap`：行与行之间的间距
● `column-gap`：列与列之间的间距
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593334713288-743c48df-25b2-4d59-b7ec-14a95e1813a2.png" data-align="center"></center>
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593334814982-898c6f6a-bb04-49b5-b0c9-cc65d7059f51.png" data-align="center"></center>

也可以通过 `grid-area` 属性来重新分配 `DOM` 元素的位置：
```css
child1 { grid-area: 左上; }
child2 { grid-area: 中上; }
child3 { grid-area: 右上; }
child4 { grid-area: 左中; }
child5 { grid-area: 中中; }
child6 { grid-area: 右中; }
child7 { grid-area: 左下; }
child8 { grid-area: 中下; }
child9 { grid-area: 右下; }
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593326767192-8afa9433-de2b-4ac2-80a2-e273c4b82db6.png" data-align="center"></center>

## 铺满
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593327685950-dfc5e21b-ab15-4459-9524-01e1ea9d5834.png" data-align="center"></center>
<center><b>grid: var(--铺满);</b></center>

看起来貌似啥也没有，那是因为顾名思义，铺满就是子元素和父元素的大小一样大嘛，来看看 `DOM` 结构：
```html
<parent>
  <child />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  gird: var(--铺满);
}
```

## 圣杯
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593327685950-dfc5e21b-ab15-4459-9524-01e1ea9d5834.png" data-align="center"></center>
<center><b>grid: var(--圣杯);</b></center>

`DOM` 结构：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
  <child5 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
圣杯布局的子元素必须指定位置：
```css
parent {
  display: grid;
  grid: var(--圣杯);
}
child1 { grid-area: 上; }
child2 { grid-area: 左; }
child3 { grid-area: 中; }
child4 { grid-area: 右; }
child5 { grid-area: 下; }
```
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593327685950-dfc5e21b-ab15-4459-9524-01e1ea9d5834.png" data-align="center"></center>

但是看起来并没有看到圣杯布局的影子，灰蒙蒙的一片，还是那个原因，把上下左右的宽高控制权都留给用户，如果子元素里没有任何内容并且没有指定宽高的话就不会显示在屏幕上，我们来给个合适的宽高再看看：

```css
parent {
  display: grid;
  grid: var(--圣杯);
}
child1 {
  height: 80px;
  grid-area: 上;
}
child2 {
  width: 100px;
  grid-area: 左;
}
child3 { grid-area: 中; }
child4 {
  width: 100px;
  grid-area: 右;
}
child5 {
  height: 80px;
  grid-area: 下;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330343171-760517f8-d27d-42b1-aa95-49261d49bda0.png" data-align="center"></center>

再给个间距看看效果：
```css
parent {
  display: grid;
  grid: var(--圣杯);
  gap: 10px;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330429441-3ed24ceb-91f3-4f56-b3ed-462592b4d516.png" data-align="center"></center>

不给宽高只靠子元素的内容撑起来也可以，而且可以缺少某一个 `DOM` 元素，比如我们不想要"右"了：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--圣杯);
  gap: 10px;
}
child1 {
  height: 80px;
  grid-area: 上;
}
child2 {
  width: 100px;
  grid-area: 左;
}
child3 { grid-area: 中; }
child4 {
  height: 80px;
  grid-area: 下;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330868809-6476fc3a-330b-49e5-ba5c-5f42d4ac20d9.png" data-align="center"></center>

虽然看起来"中"的右侧受 `gap` 属性的影响导致有一定的间距，但我们可以不加 `gap`，而是靠 `margin` 来控制间距：

```css
parent > child {
  margin: 10px;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593331071922-aa5f5aee-b251-4e52-8f13-1359b16b8e92.png" data-align="center"></center>

即使不给"中"设置宽高，"中"也会根据父元素的宽高来自动调整自己的宽高大小。
也可以靠 `row-gap` 和 `column-gap` 属性来单独控制横、纵间距：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593332952201-6e343d28-a869-4b36-9aef-1d0124c05c94.png" data-align="center"></center>

## 双飞翼
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593329473618-a58fca6b-cb4b-45c3-a0de-4f3e709bc151.png" data-align="center"></center>

<center><b>grid: var(--双飞翼);</b></center>

`DOM` 结构：
```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
  <child5 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
双飞翼布局的子元素必须指定位置：
```css
parent {
  display: grid;
  grid: var(--双飞翼);
}
child1 { grid-area: 上; }
child2 { grid-area: 左; }
child3 { grid-area: 中; }
child4 { grid-area: 右; }
child5 { grid-area: 下; }
```
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593327685950-dfc5e21b-ab15-4459-9524-01e1ea9d5834.png" data-align="center"></center>

但是看起来并没有看到双飞翼布局的影子，灰蒙蒙的一片，还是那个原因，把上下左右的宽高控制权都留给用户，如果子元素里没有任何内容并且没有指定宽高的话就不会显示在屏幕上，我们来给个合适的宽高再看看：

```css
parent {
  display: grid;
  grid: var(--双飞翼);
}
child1 {
  height: 80px;
  grid-area: 上;
}
child2 {
  width: 100px;
  grid-area: 左;
}
child3 { grid-area: 中; }
child4 {
  width: 100px;
  grid-area: 右;
}
child5 {
  height: 80px;
  grid-area: 下;
}
```

运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330343171-760517f8-d27d-42b1-aa95-49261d49bda0.png" data-align="center"></center>
再给个间距看看效果：

```css
parent {
  display: grid;
  grid: var(--双飞翼);
  gap: 10px;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330429441-3ed24ceb-91f3-4f56-b3ed-462592b4d516.png" data-align="center"></center>

不给宽高只靠子元素的内容撑起来也可以，而且可以缺少某一个 `DOM` 元素，比如我们不想要"右"了：

```html
<parent>
  <child1 />
  <child2 />
  <child3 />
  <child4 />
</parent>
```
`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--双飞翼);
  gap: 10px;
}
child1 {
  height: 80px;
  grid-area: 上;
}
child2 {
  width: 100px;
  grid-area: 左;
}
child3 { grid-area: 中; }
child4 {
  height: 80px;
  grid-area: 下;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593330868809-6476fc3a-330b-49e5-ba5c-5f42d4ac20d9.png" data-align="center"></center>

虽然看起来"中"的右侧受 `gap` 属性的影响导致有一定的间距，但我们可以不加 `gap` ，而是靠 `margin` 来控制间距：

```css
parent > child {
  margin: 10px;
}
```
运行结果：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593331071922-aa5f5aee-b251-4e52-8f13-1359b16b8e92.png" data-align="center"></center>

即使不给"中"设置宽高，"中"也会根据父元素的宽高来自动调整自己的宽高大小。
也可以靠 `row-gap` 和 `column-gap` 属性来单独控制横、纵间距：
<center>
<img src="https://cdn.nlark.com/yuque/0/2020/png/1556662/1593332952201-6e343d28-a869-4b36-9aef-1d0124c05c94.png" data-align="center"></center>

## 响应式
<center>
<img src="https://img.mukewang.com/wiki/5f0fdc360a8fa8fa06330339.gif" data-align="center"></center>
<center><b>grid: var(--响应式);</b></center>
响应式布局会根据父元素的大小以及子元素的数量来自行决定如何排版

DOM 结构:

```html
<parent>
  <child1 />
  <child2 />
  ......
  <child-N />
</parent>
```

`DOM` 结构只是示意，真实布局时要把 `parent` 和 `child` 换成你想要的元素，如：`<ul> <li></li> </ul>`
```css
parent {
  display: grid;
  grid: var(--响应式);
}
```
不过每列的最小宽度默认是`100px`，如果想改变这一大小的话需要在 `:root` 选择器上定义一个 `--宽` 变量，比如想要宽变成`30px`：
```css
:root {
  --宽: 30px;
}
```
如果每个子元素之间的距离太近了的话别忘记用 `gap` 属性来控制间距哦：
```css
parent {
  display: grid;
  grid: var(--响应式);
  gap: 10px;
}
```

---
_Source: https://npm.io/package/chinese-layouts · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
