chinese-layout是一款利用CSS自定义属性来制作的中文布局CSS库,由于grid布局十分强大,强大到乃至只须要两行CSS代码就可以完成一个基本的布局。不过grid属性较多较为繁芜,并且不支持IE浏览器等特点导致了许多人并不很理解它。
不过近些年来随着IE浏览器的逐步退出市场,兼容性已经不再是特殊须要纠结的一件事情了:
可以看到各大浏览器的支持情形已经较为乐不雅观了,为了让大家快速体验grid布局的强大之处,chinese-layout就此出身!
该库的尺寸十分轻量级,只有不到1KB的大小(653字节),并且利用起来也是十分的方便。
利用办法
假设现在有一个ul元素,我们想要它变为一个九宫格的布局,首先须要在ul元素上写:
ul { / 这个是固定写法,必须先指定display为grid / display: grid; / grid属性须要指定哪种布局 / grid: var(--九宫格); / 加入一点间距,让九个元素相互之间有一定的间隔 / gap: 10px;}
然后在父元素里面添加九个元素:
<ul> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li></ul>
这就完事啦:
当然这里实在是省略了一些父元素上的宽高以及子元素的颜色等细节。
这些细节就交给你们来决定,在此案例中chinese-layout只卖力将父元素分割成九平分。
本文采取了chinese-gradient来作为背景色
安装要记得先引入这个库才能够去正常的利用。如果你的项目是一个工程化的项目,那么:
npm i chinese-layout
记得要在主文件中引入:
import 'chinese-layout'
同时也支持sass、less等,如:
import 'chinese-layout/chinese-layout.scss'
如果你只是想在<link>标签里引入的话,那么:
<link rel="stylesheet" href="https://unpkg.zhimg.com/chinese-layout">
全部布局声明 display: grid;首先一定要记得声明 display: grid;
由于chinese-layout底层依赖的便是grid布局。
居中
grid: var(--居中)
DOM构造:
<parent> <child/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
这种布局须要先在父元素上写这么两行代码:
parent { display: grid; grid: var(--居中);}
然后再在子元素上写上:
child { grid-area: 中;}
但是看起来除了灰蒙蒙一片的背景彷佛啥也没有是吧,那是由于我们没给子元素加上宽高,而且子元素里也没有任何的内容,导致子元素宽高为0不可见,那么现在我们来给子元素一个宽高再来看看:
child { width: 20px; height: 20px; grid-area: 中;}
子元素便会在父元素里水平垂直居中:
双列
grid: var(--双列)
DOM构造:
parent { display: grid; grid: var(--双列);}
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
来看看语法:
parent { display: grid; grid: var(--双列);}
可以看到现在两列牢牢的贴合在一起了,不过有时候这两列我们并不想它们紧贴在一起,这时我们可以利用 gap 属性来掌握列与列之间的间距:
parent { display: grid; grid: var(--双列); gap: 10px;}
运行结果:
可以看到列与列直接间隔变成我们设置的10px了,但 gap 属性只会改变列与列之间的间隔,并不会改变与父元素之间的间隔,以是之前紧贴着父元素的现在还是紧贴着父元素,如果想与父元素有间距的话可以给父元素加padding:
双列布局是不须要指定子元素的 grid-area 属性的,不过你假如非要想指定一下的话也不是不可以:
child1 { grid-area: 左;}child2 { grid-area: 右;}
运行结果:
(可以通过指定grid-area来颠倒DOM位置,没事可以去试试)
三列
grid: var(--三列)
咦?这不是双列吗?说好的三列呢?
实在是这样,三列中的最中间一列被做成了自适应了,如果不给宽度并且也没有任何带宽度的子元素的话宽度就会为0,以是就看不到最中间那列啦!
那咱们给中间的DOM元素一个宽度吧:
<parent> <child1/> <child2/> <child3/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--三列);}child2 { width: 800px;}
运行结果:
也可以不给宽度,直接用内容去撑开:
<parent> <child1/> <child2>child2</child2> <child3/></parent>
运行结果:
也同样可以用gap属性来掌握间距:
parent { display: grid; grid: var(--三列); gap: 10px;}child2 { width: 800px;}
运行结果:
三列布局是不须要指定子元素的 grid-area 属性的,不过你假如非要想指定一下的话也不是不可以:
child1 { grid-area: 左;}child2 { grid-area: 中;}child2 { grid-area: 右;}
运行结果:
(可以通过指定子元素的 grid-area 属性来颠倒DOM位置,没事可以去试试)
吕形
grid: var(--吕形)
可是这看起来也不像吕形啊,吕不是该当上面一个口下面一个口吗?
实在还是那个事理:上面的盒子如果不给高度的话默认为0。
那咱们给个高度再看看:
<parent> <child1/> <child2/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--吕形);}child1 { height: 100px;}child2 { overflow-y: auto;}
运行结果:
还可以通过 gap 属性来掌握间距:
parent { display: grid; grid: var(--吕形); gap: 10px;}child1 { height: 100px;}
运行结果:
也可以通过指定子元素的 grid-area 属性来颠倒DOM位置:
parent { display: grid; grid: var(--吕形); gap: 10px;}child1 { grid-area: 下; overflow-y: auto;}child2 { height: 100px; grid-area: 上;}
运行结果:
高下栏
grid: var(--高下栏)
看过前面几种布局的朋友该当猜到了,是由于上盒子和下盒子没给高度导致现在只能瞥见中间那栏,咱们给个高度再来看看:
<parent> <child1/> <child2/> <child3/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--高下栏);}child1 { height: 80px;}child2 { overflow-y: auto;}child3 { height: 100px;}
运行结果:
还可以通过 gap 属性来掌握间距:
parent { display: grid; grid: var(--高下栏); gap: 10px;}child1 { height: 80px;}child2 { overflow-y: auto;}child3 { height: 100px;}
运行结果:
也可以通过指定子元素的 grid-area 属性来颠倒DOM位置:
parent { display: grid; grid: var(--高下栏); gap: 10px;}child1 { grid-area: 中; overflow-y: auto;}child2 { height: 80px; grid-area: 上;}child3 { height: 100px; grid-area: 下;}
运行结果:
四宫格
grid: var(--四宫格)
DOM构造:
<parent> <child1/> <child2/> <child3/> <child4/><parent/>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--四宫格);}
如果不想各个宫格紧贴在一起,可以用 gap 属性来掌握间距:
parent { display: grid; grid: var(--四宫格); gap: 10px;}
运行结果:
gap 属性是掌握行和列之间间距的,但如果你想要行间距和列间距不一样的话,就要用到下面两个属性了:
row-gap:行与行之间的间距column-gap:列与列之间的间距也可以通过 grid-area 属性来重新分配DOM元素的位置:
child1 { grid-area: 左上; }child2 { grid-area: 右上; }child3 { grid-area: 左下; }child4 { grid-area: 右下; }
运行结果:
六宫格
grid: var(--六宫格)
DOM构造:
<parent> <child1/> <child2/> <child3/> <child4/> <child5/> <child6/><parent/>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--六宫格);}
如果不想各个宫格紧贴在一起,可以用 gap 属性来掌握间距:
parent { display: grid; grid: var(--六宫格); gap: 10px;}
运行结果:
gap 属性是掌握行和列之间间距的,但如果你想要行间距和列间距不一样的话,就要用到下面两个属性了:
row-gap:行与行之间的间距column-gap:列与列之间的间距也可以通过 grid-area 属性来重新分配DOM元素的位置:
child1 { grid-area: 左上; }child2 { grid-area: 右上; }child3 { grid-area: 左下; }child4 { grid-area: 右下; }
运行结果:
九宫格
grid: var(--九宫格)
DOM构造:
<parent> <child1/> <child2/> <child3/> <child4/> <child5/> <child6/> <child7/> <child8/> <child9/><parent/>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--九宫格);}
如果不想各个宫格紧贴在一起,可以用 gap 属性来掌握间距:
parent { display: grid; grid: var(--九宫格); gap: 10px;}
运行结果:
gap 属性是掌握行和列之间间距的,但如果你想要行间距和列间距不一样的话,就要用到下面两个属性了:
row-gap:行与行之间的间距column-gap:列与列之间的间距也可以通过 grid-area 属性来重新分配DOM元素的位置:
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: 右下; }
运行结果:
铺满
grid: var(--铺满)
看起来貌似啥也没有,那是由于顾名思义,铺满便是子元素和父元素的大小一样大嘛,来看看DOM构造:
<parent> <child/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; gird: var(--铺满);}
grid: var(--圣杯)
DOM构造:
<parent> <child1/> <child2/> <child3/> <child4/> <child5/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
圣杯布局的子元素必须指定位置:
parent { display: grid; grid: var(--圣杯);}child1 { grid-area: 上; }child2 { grid-area: 左; }child3 { grid-area: 中; }child4 { grid-area: 右; }child5 { grid-area: 下; }
但是看起来并没有看到圣杯布局的影子,灰蒙蒙的一片,还是那个缘故原由,把高下旁边的宽高掌握权都留给用户,如果子元素里没有任何内容并且没有指定宽高的话就不会显示在屏幕上,我们来给个得当的宽高再看看:
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: 下;}
运行结果:
再给个间距看看效果:
parent { display: grid; grid: var(--圣杯); gap: 10px;}
运行结果:
不给宽高只靠子元素的内容撑起来也可以,而且可以短缺某一个DOM元素,比如我们不想要"右"了:
<parent> <child1/> <child2/> <child3/> <child4/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
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: 下;}
运行结果:
虽然看起来"中"的右侧受 gap 属性的影响导致有一定的间距,但我们可以不加 gap,靠 margin 来掌握间距:
parent > child { margin: 10px;}
运行结果:
纵然不给"中"设置宽高,"中"也会根据父元素的宽高来自动调度自己的宽高大小。
也可以靠 row-gap 和 column-gap 属性来单独掌握横、纵间距:
双飞翼
grid: var(--双飞翼)
DOM构造:
<parent> <child1/> <child2/> <child3/> <child4/> <child5/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
双飞翼布局的子元素必须指定位置:
parent { display: grid; grid: var(--双飞翼);}child1 { grid-area: 上; }child2 { grid-area: 左; }child3 { grid-area: 中; }child4 { grid-area: 右; }child5 { grid-area: 下; }
但是看起来并没有看到双飞翼布局的影子,灰蒙蒙的一片,还是那个缘故原由,把高下旁边的宽高掌握权都留给用户,如果子元素里没有任何内容并且没有指定宽高的话就不会显示在屏幕上,我们来给个得当的宽高再看看:
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: 下;}
运行结果:
再给个间距看看效果:
parent { display: grid; grid: var(--双飞翼); gap: 10px;}
运行结果:
不给宽高只靠子元素的内容撑起来也可以,而且可以短缺某一个DOM元素,比如我们不想要"右"了:
<parent> <child1/> <child2/> <child3/> <child4/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
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: 下;}
运行结果:
虽然看起来"中"的右侧受 gap 属性的影响导致有一定的间距,但我们可以不加 gap ,靠 margin 来掌握间距:
parent > child { margin: 10px;}
运行结果:
纵然不给"中"设置宽高,"中"也会根据父元素的宽高来自动调度自己的宽高大小。
也可以靠 row-gap 和 column-gap 属性来单独掌握横、纵间距:
相应式
grid: var(--相应式)
相应式布局会根据父元素的大小以及子元素的数量来自行决定如何排版
DOM构造:
<parent> <child1/> <child2/> ...... <child-N/></parent>
DOM构造只是示意,真实布局时要把parent和child换成你想要的元素,如:<ul> <li></li> </ul>
parent { display: grid; grid: var(--相应式);}
不过每列的最小宽度默认是100px,如果想改变这一大小的话须要在 :root 选择器上定义一个 --宽 变量,比如想要宽变成30px:
:root { --宽: 30px;}
如果每个子元素之间的间隔太近了的话别忘却用 gap 属性来掌握间距哦:
parent { display: grid; grid: var(--相应式); gap: 10px;}
总结
整体来说这款插件还是不错的,利用大略方便,中文命名虽然符合中国人的习气,但命名太多比较依赖文档。
还在为布局头疼的朋友可以快速入手哦!