【问题标题】:Manipulating grid column layouts with media queries and breakpoints使用媒体查询和断点操作网格列布局
【发布时间】:2013-11-24 08:16:30
【问题描述】:

我正在尝试通过重新设计我的在线作品集,使用 SimpleGrid 框架(这个:thisisdallas.github.io/Simple-Grid/‎)结合 HTML5 样板的元素来熟悉响应式、适合移动设备的布局帮助我开始。

这是我目前得到的:http://pftest.comyr.com/grid/

我遇到的一个问题是弄清楚如何使用 CSS 媒体查询让网格列(特别是包含六边形的 3 个 div 列)在不同的屏幕大小“断点”处折叠,以便它们不会t 只是在较小的屏幕尺寸上相互重叠。

经过大量的反复试验后,我最终发现我可以通过将带有width: 50%float: left 的类/ID 应用于媒体查询,将其折叠为平板电脑屏幕大小的设备的两列of: @media only screen and (max-width: 908px) { } 并且(希望)现在它以大致相同的大小整齐地折叠成两列(至少从我的简短测试来看) p>

我现在遇到的问题是弄清楚如何让它折叠成单个列以用于较小的智能手机屏幕尺寸(@media(最大宽度:22em),@media(最大宽度: 320 像素)等。

我已经尝试了各种不同的属性,使用我用于两列断点的相同 #workgrid ID - 但无论出于何种原因似乎都无法让它工作,不幸的是网格中几乎没有文档可能对我有帮助的框架。

有问题的 CSS 是:

@media (max-width: 22em) {
#workgrid {

    width: 100%;
    float: left;
    margin-left: 0px;
    margin-right: 0px;
    margin-top: 10px;
    margin-bottom: 10px;
    padding-left: 5px;
    padding-right: 5px;
}
}

适用于每个 DIV "col-1-3" 类。

正如您现在看到的那样,它折叠成两列,然后在任何小于此的屏幕尺寸处开始重叠。我敢肯定这是我错过/没有看到的相对简单的东西,只需要朝着正确的方向努力...... :)

【问题讨论】:

  • 在多个 HTML 标记中使用相同的 id (#workgrid) 是 bad practice
  • 啊,对了,我应该知道.... 那么我能否获得一些关于将特定样式应用于列的最佳方式的提示?以及如何解决单列问题?

标签: html css grid media-queries breakpoints


【解决方案1】:

主要问题是您在网格的响应元素内使用无响应单元,并且您没有将 max-heightmax-width 用于图像等元素。

例如,您有一个名为.shape 的元素类,其宽度为300px,该类是#workgrid 的子类,其宽度为50%。例如,在具有 320 像素宽度的小型浏览器视口中,您的 #workgrid 像素宽度将是 160 像素,而 .shape 宽度将相同,为 300 像素,这会导致内容超出空间并折叠其他元素空间。

这里有两个链接可以帮助您更好地理解流体元素:

要修复您的网格,您应该在某些类中使用max-widthmax-height 而不是widthheight,并更改一些css 属性,例如background-size。解决它的另一种方法是使用响应式单位而不是尺寸固定的单位。响应式网络需要响应式措施。

修复需要时间并且可能会令人恼火,因此如果您想要替代解决方案,您可以通过更改 main.csssimplegrid.css 来解决您的问题:

@media (max-width: 22em) {

到这里:

@media (max-width: 41em) { // If it doesn't work, test a larger number like 44em or something like that

当浏览器视口小于 656px 时,您的网格开始折叠(对于当前的 font-size 为 16px,656px = 41em),当浏览器的视口宽度为 22em 或更小时,此网格将变为单列网格,因此更改为 22em到 41em 我们使单列出现在网格折叠之前,从而使网格正常工作。

【讨论】:

  • 好吧,我尝试将 max-width 和 max-height 添加到这些类中,但现在它更坏了,仍然没有折叠成一列,我比以往任何时候都更加困惑。
  • 大声笑... 工作(将其更改为最大宽度:41em)。有没有机会我能得到一个简短的解释,为什么它会起作用,以便我能更好地理解发生了什么?谢谢 - 最快的解决方案并不总是我理解的最好的解决方案,但我不得不承认我已经推迟了这个项目足够长的时间,并且希望尽快完成它,所以这是一个很大的帮助。 :) 我也需要花一些时间来查看那些推荐的文章,因为我当然仍在努力理解 max-width 和 min-width 属性是如何工作的......
  • 另外,我将#workgrid 改回 [class*='col-'] {},我最初使用它是为了获得正确的语义。出于某种原因,我认为我希望它仅应用于那些特定的 1-3 行网格列,而不是布局中的所有 1-3 行网格列......但这显然没有任何意义,因为我想想看。 :D
  • er,从头开始,我的意思是我将它改回 .col-1-3 以仅针对那些列,因为 [class*='col-'] {} 会影响布局中的每一列- 我不一定想要……对吧?呃,我又糊涂了……
  • 使用.workgrid 代替[class*='col-'].col-1-3,在CSS 中更具体,specificity in selectors means performance
猜你喜欢
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2013-11-04
  • 2012-04-06
  • 2017-12-29
相关资源
最近更新 更多