CSS面试题】实现一个在页面中垂直居中的正方形中有四个上下左右间距相等的小正方形

1 篇文章 0 订阅
1 篇文章 0 订阅

面试题目:

编写css,实现一个前端样式:在一个大正方形内有四个相等的小正方形。要求大正方形上下左右居中, 每一个小正方形上下左右距离相等。

实现效果图

使用grid布局分割,然后划出来四块之后再使其中的四个div垂直居中。我以为这样已经实现了需求,但是后来发现是上下左右距离相等,这样的四个红色的方块彼此之间的距离是到边框距离的二倍
在这里插入图片描述

代码

<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>css面试题</title>
</head>
<style>
  .fdiv {
    display: grid;
    grid-template-columns: 1fr 1fr;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
  }

  div.fdiv>div {
    display: flex;
    justify-content: center;
    align-items: center;
  }

  div.fdiv>div>div {
    width: 100px;
    height: 100px;
    background-color: red;
  }

</style>

<body>
  <div class="fdiv2" style="width: 600px;height: 600px;border: 1px solid #000;">
    <div>
      <div>1</div>
    </div>
    <div>
      <div>2</div>
    </div>
    <div>
      <div>3</div>
    </div>
    <div>
      <div>4</div>
    </div>
  </div>
</body>

</html>

新的实现方案

考虑了之后 ,我发现答案应该是个5*5的方格,实现效果图是这样的。
使用grid布局把这个拆成五等分,每个间距都是1等分。实现了需求在这里插入图片描述
代码如下:

<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>css面试题</title>
</head>
<style>
  .fdiv {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
  }

  div.fdiv>div {
    display: flex;
    justify-content: center;
    align-items: center;
  }

  div.show {
    background-color: red;
  }
</style>

<body>
  <div class="fdiv" style="width: 600px;height: 600px;border: 1px solid #000;">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>

    <div>1</div>
    <div class="show">2</div>
    <div>3</div>
    <div class="show">4</div>
    <div>5</div>

    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>

    <div>1</div>
    <div class="show">2</div>
    <div>3</div>
    <div class="show">4</div>
    <div>5</div>

    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>

  </div>
</body>

</html>

总结

最近使用了grid和flex布局,对css实现复杂布局真的感叹良多,下意识觉得这是在考这两种布局方式。
结果万万没想到居然只是简单的表格布局。有点略不甘心,写了一大堆div,代码不够美观。而且感觉使用grid布局这样实现,就像拿个打炮打了蚊子,但是感觉蚊子又不是那么简单。

结尾

仔细阅读了一遍文档之后,不想写那么多div想让代码美观。有了最后一个满意点的实现代码;

最终版效果图

和之前一样实现的效果没有问题,代码使用了grid-template-areas属性,之前用过很多次这个属性来实现复杂的css布局框架,到了简单的地方就忘了用。
在这里插入图片描述

最终代码

<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  .fdiv {
    display: grid;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
    grid-template-areas:
    '. . . . .'
    '. a . b .'
    '. . . . .'
    '. c . d .'
    '. . . . .';
  }

  div.fdiv>div {
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: red;
  }
</style>

<body>
  <div class="fdiv" style="width: 600px;height: 600px;border: 1px solid #000;">
    <div style="grid-area:a;"></div>
    <div style="grid-area:b;"></div>
    <div style="grid-area:c;"></div>
    <div style="grid-area:d;"></div>
  </div>
</body>

</html>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值