当我到达某个媒体查询时,如何将 4x3 网格转换为 3x4 网格?

Posted

技术标签:

【中文标题】当我到达某个媒体查询时,如何将 4x3 网格转换为 3x4 网格?【英文标题】:How do I convert a 4x3 grid to a 3x4 gird when I reach a certain media query? 【发布时间】:2019-12-12 11:32:26 【问题描述】:

我正在尝试制作一个响应式网格。网格从 4x3 开始,当我达到 720 像素时,我希望它是 3x4 网格。我正在使用 bootstrap 3(这个项目不能使用 bootstrap 4)。现在我可以使用 javascript 来做到这一点,但我想用纯 html 和 css 来做到这一点。

从...出发

A B C D E F G H I J K L

到... @media only screen and (min-width: 720px)

A B C D E F G H I J K L

我意识到您需要在其间添加行,这就是我使用 javascript 动态添加它的原因。当它静态存在时,我不知道该怎么做。

function gridDivideBy(divideNum) 

  $('.myClass').contents().unwrap();
  var $square = $(".square");

  for (let i = 0; i < $square.length; i += divideNum) 
    // Create dynamic div
    let $div = $("<div/>", 
      class: 'myClass row'
    );
    // Wrap all the boxes inside a row and div with myClass
    $square.slice(i, i + divideNum).wrapAll($div);
  


function myFunc(x) 
  if (x.matches) 
    gridDivideBy(4);
   else 
    gridDivideBy(3);
  



var x = window.matchMedia("(min-width: 720px)")
myFunc(x);
x.addListener(myFunc);
.square 
  flex: 1;
  padding: 5px;
  margin: 5px;
  border: 2px solid #eee;
  flex: 1;


.myClass 
  display: flex;
  padding: 5px;
  margin: 4px;
  border: 1px solid green;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container" id="square-wrapper">
  <div class="col-md-3 square">A</div>
  <div class="col-md-3 square">B</div>
  <div class="col-md-3 square">C</div>
  <div class="col-md-3 square">D</div>
  <div class="col-md-3 square">E</div>
  <div class="col-md-3 square">F</div>
  <div class="col-md-3 square">G</div>
  <div class="col-md-3 square">H</div>
  <div class="col-md-3 square">I</div>
  <div class="col-md-3 square">J</div>
  <div class="col-md-3 square">K</div>
  <div class="col-md-3 square">L</div>
</div>

【问题讨论】:

您是否尝试将col-sm-4col-md-3 一起添加? 这给了我 3x4、2x6 和 1x12,但不是我想要开始的 4x3,但是谢谢,我只是不擅长网格。 您可以在容器上使用 display:flex,然后在 .square 上使用 25% 的宽度,然后对 【参考方案1】:

如果您熟悉媒体查询,那么您应该能够调整您的网格,使用 - 我想 - grid-template-rows 和 grid-template-columns。

@media screen and (max-width:720px) 
    .grid-container 
                grid-template-columns: 1fr 1fr 1fr;
                grid-template-rows: 1fr 1fr 1fr 1fr;
    

如果有帮助,请告诉我。谢谢你,祝你好运。

【讨论】:

【参考方案2】:

尝试使用其他选项为什么?

因为 Bootstrap 3 使用大小为 768px 的第一个断点

超小型设备电话(

但是,如果您真的想使用引导程序,这是您的解决方案(我认为...)

$(window).on("load, resize", function () 
    var viewportWidth = $(window).width();
    if (viewportWidth > 720) 
            $(".col-xs-3").removeClass("col-xs-3").addClass("col-xs-4");
    
        else
            $(".col-xs-4").removeClass("col-xs-4").addClass("col-xs-3");
        
);

【讨论】:

以上是关于当我到达某个媒体查询时,如何将 4x3 网格转换为 3x4 网格?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局故事板实现 30 个按钮网格?

当我将屏幕调整为小于 600 像素时,媒体查询不起作用

如何使用 Flexbox 将 4 个图像划分为 2x2 网格?

如何将原始 SQL 转换为 Yii2,如查找查询

Python:如何将 HTTP POST 转换为 JSON 格式

使用反应时如何将表格行转换为列