如何使CSS二维网格响应?

时间:2019-12-15 08:20:47

标签: html css grid

我有带有网格的二维CSS。我无法获得回应。 当屏幕满满时,我得到以下信息。

enter image description here

我压缩了第2列和第3列,但没有如下响应。

enter image description here

我想要以下结果。

enter image description here

请参见下面的代码:

.frame {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
  grid-template-rows: repeat(2, 1fr);
  grid-gap: 40px;
  border: 1px solid red;
}

.blog1,
.blog2,
.blog3,
.blog4 {
  height: 200px;
  border: 1px solid green;
}

.blog3 {
  grid-column: 3;
  grid-row: 1/3;
  height: 100%;
}

.blog4 {
  height: 200px;
  border: 1px solid green;
  grid-column: 1/3;
  grid-row: 2;
}
<div class="frame">
  <div class="blog1">one</div>
  <div class="blog2">two</div>
  <div class="blog3">three</div>
  <div class="blog4">four</div>
</div>

3 个答案:

答案 0 :(得分:0)

如果了解,请申请媒体查询

@media only screen and (max-width: 600px) {
  .blog1, .blog2, .blog3, .blog4 {
      height: 200px;
      border: 1px solid green;
      width:100% !important;
   }
}
  

编辑

替代解决方案可以

<style>

    .frame {
        width: 95%;
        display: table;
        border: 1px solid red;
        margin-left: 2.5%;
        height: 400px;
        padding-bottom: 2px;
    }

    .left, .right{
        float: left;
        display: block;
    }

    .left{ width: 65%; background-color: #0c199c}

    .right{width: 35%; background-color: #3affed}

    .blog1, .blog2, .blog3, .blog4{
        float: left;
        width: 50%;
        height: 200px;
        background-color: #f2f2f2;
    }

    .blog2:nth-child(even){
        background-color: #f8f8f8;
    }

    .blog3{
        background-color: #f5f5f5;
    }

    .blog3, .blog4{
        width: 100%;
    }

    @media only screen and (max-width: 600px) {

        .left, .right{
            width: 100%;
        }

        .blog1, .blog2, .blog3, .blog4 {
            width:100% !important;
            margin-bottom: 5px;
        }
    }
</style>
<div class="frame">
    <div class="left">
        <div class="blog1">one</div>
        <div class="blog2">two</div>
        <div class="blog3">three</div>
    </div>
    <div class="right">
        <div class="blog4">four</div>
    </div>
</div>

答案 1 :(得分:0)

您还需要重置行和列的放置,auto-fit不会这样做。

@media screen and (max-width : 1300px) {/* set your break point value here */
  .blog3,.blog4 {
    grid-column: auto;
    grid-row:auto ;
  }
}

可能的演示:

.frame {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
  grid-gap: 40px;
  border: 1px solid red;
}

.blog1,
.blog2,
.blog3,
.blog4 {
  height: 200px;
  border: 1px solid green;
}

.blog3 {
  min-height: 200px;/* added for the visual, not necessary */
  grid-column: 3;
  grid-row: 1/3;
  height: 100%;
}

.blog4 {
  height: 200px;
  border: 1px solid green;
  grid-column: 1/3;
  grid-row: 2;
}

@media screen and (max-width: 1300px) {
  .blog3,
  .blog4 {
    grid-column: auto;
    grid-row: auto;
  }
}
<div class="frame">
  <div class="blog1">one</div>
  <div class="blog2">two</div>
  <div class="blog3">three</div>
  <div class="blog4">four</div>
</div>

else,要遍历3列到单个列,然后

@media screen and (max-width : 1300px) {/* set your break point value here */
  .frame {
    display:block;
  }
}

会将整个网格重置为常规流量显示;

.frame {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
  grid-gap: 40px;
  border: 1px solid red;
}

.blog1,
.blog2,
.blog3,
.blog4 {
  height: 200px;
  border: 1px solid green;
}

.blog3 {
  min-height: 200px;
  /* added for the visual, not necessary */
  grid-column: 3;
  grid-row: 1/3;
  height: 100%;
}

.blog4 {
  height: 200px;
  border: 1px solid green;
  grid-column: 1/3;
  grid-row: 2;
}

@media screen and (max-width: 1300px) {
  .frame {
    display: block;
  }
  .frame>div:not(:first-child) {
    margin-top: 40px;
    /* grid-gap was also reset */
  }
}
<div class="frame">
  <div class="blog1">one</div>
  <div class="blog2">two</div>
  <div class="blog3">three</div>
  <div class="blog4">four</div>
</div>

提醒:

答案 2 :(得分:0)

这可以做到,尽管您可以将宽度更改为任意宽度或将媒体更改为所需的屏幕!

.frame {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
  grid-template-rows: repeat(2, 1fr);
  grid-gap: 40px;
  border: 1px solid red;
}

.blog1,
.blog2,
.blog3,
.blog4 {
  height: 200px;
  border: 1px solid green;
}

.blog3 {
  grid-column: 3;
  grid-row: 1/3;
  height: 100%;
}

.blog4 {
  height: 200px;
  border: 1px solid green;
  grid-column: 1/3;
  grid-row: 2;
}

@media screen and (max-width: 2000px) {
  .frame {
   grid-template-columns: auto;
   grid-template-rows: none;
   }
   .blog1, .blog2, .blog3, .blog4 {
   width: 100%;
   height: 200px;
   grid-column: auto;
   grid-row: auto;
   }
   }
  <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <link rel="stylesheet" href="">
  <title>Document</title>
</head>
<body>
  <div class="frame">
    <div class="blog1">one</div>
    <div class="blog2">two</div>
    <div class="blog3">three</div>
    <div class="blog4">four</div>
  </div>
</body>
</html>