Css之Grid到底有多厉害

112 阅读2分钟

本文已参与「 新人创作礼 」活动,一起开启掘金创作之路

关于如何进行图片优化 - 适合的才是最好的

其实做了工作很多年的前端,有人问我Grid用的如何,我只能说我知道这个东西,也没有把他放在心上,在没有Css出来的时候,例如Flex、Grid。

差不多所有的布局我都是能够手写搞定的,当然随着前端不断的发展,我对Css的专研也是慢慢失去了热情,觉得一切靠曾经的拿点功底页面布局基本可以的躺平过去。

对于对Grid的了解也来源于外面说Grid的兼容性的诸多问题。也是我一直没有考虑的原因,直到这几年,Chrome的市场占有率持续高升,已经独领半壁江山了,IE的份额貌似已经低至10%以下。

但是最近刚换工作,项目里面大部分都是Flex & Grid的相关东西。包括其他都是我不曾熟悉的技术栈体系。

前几天我已经花了半天时间把Css部分的 styled-components 、flex,好好的研究了一番,基本项目够用了。

我今天也是确实无聊了,为了写文章,就看看了Grid。

在一个公司待久了,很容易在一个公司躺平,结果就是一直吃老本,所以如果想技术有持续的提升,你就要对技术保持足够的好奇心,当你在一个公司长时间无法提升的时候,可以考虑动一动地方。

不闲扯了,来讲讲Grid的牛逼之处应用了。

例如实现这个红心十布局你会如何布局呢?

如果用div的传统样式,也是不难,大家可以哪来比较下。

<!-- 红十字会实现 -->
<div class="wrapper1">
  <div><div></div></div>
  <div></div>
  <div><div></div></div>
</div>

css 貌似写的比较多

.wrapper1 {
  width:120px;
  height:120px;
  background:white;
  div {
    height:40px;
    background:black;
  }
  div:nth-child(1) , div:nth-child(3)  {
    text-align: center;
    width:100%;
    div {
      display: inline-block;
      width:40px;
      height:40px;
      background:red;
    }
  }
  div:nth-child(2) {
    background:red;
  } 
}

等等我们看看Flex、Grid的在说。

Flex 布局,这个还是不错,貌似很简单把。

<div class="wrapper2">
  <div></div>
  <div></div>
  <div></div>
</div>

下面的是css

.wrapper2 {
  display: flex;
  width:120px;
  height:120px;
  flex-direction: column;
  div:nth-child(1) , div:nth-child(3) {
    flex: 1;
    width:40px;
    background:red;
    margin:auto;
  }
  div:nth-child(2) {
    flex: 1;
    background: red;
  }
}

下面最牛逼的地方是,通过Grid的方式。

<div class="wrapperggg">
  <div></div>
  <div></div>
  <div></div>
</div>

精妙之处在css

.wrapperggg {
  display: grid;
  grid-template-columns: repeat(3,40px);
  grid-template-rows: repeat(3,40px);
  grid-template-areas: 'a b c' 'd d d' 'g h i';
  div {
    background: red;
  }
  div:nth-child(1) {
    grid-area: d;
    
  }
  div:nth-child(2) {
    grid-area: b;
  }
  div:nth-child(3) {
    grid-area: h;
  }
}

PS: 差不多这些了, 有点累了,一天说一个小Demo,也是非常有趣的。

大家也可以去掘金的看看我录进去的代码Demo

code.juejin.cn/pen/7092428…