【问题标题】:Display:none items still retaining space on the page显示:没有项目仍在页面上保留空间
【发布时间】:2016-04-30 15:26:48
【问题描述】:

我在 100% 宽度 carousel 中有六个项目。当屏幕处于纵向时,我只想显示 3 个项目,所以我使用媒体查询删除了 3 个(这里是带有完整 script 的 jfiddle):

 @media all and (orientation:portrait) {

    .wrapper4 .carousel1{
        display: none;
    }

    .wrapper4 .carousel3{
        display: none;
    }

    .wrapper4 .carousel6{
        display: none;
    }
}

这 3 个项目消失了,但它们占据的空间仍然保留。而当我试图让剩余的物品填满之前占用的空间时,它不起作用。

.wrapper4 .carousel {
    flex: 1; min-width: 33.3333%;
} 

即。以上无助于分散剩余的项目。旋转木马中剩余的 3 个项目保持其大小,并且当屏幕收缩以模仿纵向模式时,之前的项目占据了空白空间。我怎样才能获得要释放的空间和剩余的项目来填满这个空间?

【问题讨论】:

  • 没有看到你的轮播脚本这很难回答,但是,你有没有告诉你的轮播在隐藏其他人时只显示 3?如果你隐藏那不好,因为它可能认为它们还在那里
  • 是的 - 代码在问题中链接的小提琴中:jsfiddle.net/0oug0t3r
  • 上面的 @Darren 是我在媒体查询中传递的内容,因此,其余三个未提及的内容出现了 - 问题是 display: none items 占用的空间保留,我正在寻找一种方法让它看起来像这 3 个项目不存在;其余 3 项应填满宽度。
  • 我已经对您的小提琴进行了调整,因此媒体查询适用于宽度而不是方向 - 我认为这更有意义。额外的列正确显示和隐藏,并且布局按预期更新。我只能认为在您正在测试方向更改的任何设备上都不会触发重新布局,考虑到它正在更新可见性,这很奇怪。 jsfiddle.net/3eLj47te/4
  • @Matthew,我试过了,但问题仍然存在 - 未显示项目的空间仍然保留。 img { display: none; width: 100% !important; } 也会干扰图像的比例。顺便说一句,我在笔记本电脑的 Chrome 浏览器上查看这个。

标签: html css media-queries flexbox


【解决方案1】:

在三星 Note 中的 Chrome 上进行测试,效果符合预期:


所有轮播项目在纵向模式下消失:

@media all and ( orientation: portrait ) {

    .carousel1 { display: none; }
    .carousel2 { display: none; }
    .carousel3 { display: none; }
    .carousel4 { display: none; }
    .carousel5 { display: none; }
    .carousel6 { display: none; }

}

https://jsfiddle.net/0oug0t3r/11/(也可以通过调整窗口大小在桌面上测试)


所有轮播项目在横向模式下消失:

@media all and ( orientation: landscape ) {

    .carousel1 { display: none; }
    .carousel2 { display: none; }
    .carousel3 { display: none; }
    .carousel4 { display: none; }
    .carousel5 { display: none; }
    .carousel6 { display: none; }

}

https://jsfiddle.net/0oug0t3r/12/


删除问题中描述的三个轮播项目:

@media all and ( orientation: portrait ) {

    .carousel1 { display: none; }
    .carousel3 { display: none; }
    .carousel6 { display: none; }

}

https://jsfiddle.net/0oug0t3r/13/


所做的唯一调整是将img 元素中的alt 标签与相应的轮播ID 编号匹配,并且我简化了选择器。

【讨论】:

  • 感谢@Michael - 我在媒体查询上尝试了这个和其他 tweeks,由于某种原因,它仍然保留了显示占用的空间:无项目。最后,我在 html 中创建了另一个与 wrapper4 相同的包装器,但只有 3 个项目。我将其隐藏在横向中,并将其显示在纵向包装器 4 的位置。完全不确定为什么它不能正常工作。可能与使用的 flexbox 有关(就像我使用这段代码一样)。
  • 这很有趣。在这方面一切正常。我可以使用纵向、横向和宽度表达式删除单个轮播项目(包括它们占用的空间)。适用于移动设备和桌面设备。
  • 我认为它确实与 flexbox 冲突有关(flex-item 应该如何处理 display:none) - 我将分享它在修复前使用相同包装器的外观快照(似乎无法在此处添加)它基本上看起来像一个漂亮的图像带,其间有间隙,仅显示背景颜色。
  • 我从来没有遇到过display: none 和 flex 属性的问题。也许这是新事物。如果是错误,请考虑在此处查看/发布:github.com/philipwalton/flexbugs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2019-12-13
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多