如何使图像保留在CSS网格容器的行内? [英] How to make images stay within the rows of a css grid container?

查看:94
本文介绍了如何使图像保留在CSS网格容器的行内?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的代码显示了当我在
Chrome 60和Firefox 55中调整窗口大小时(但不是在iOS Safari 10.3中;这很可能是Safari中出现异常的另一个问题)。

html,body {width:100%;身高:100%;填充:0;保证金:0; border:0; background-color:lightgrey;}。container {box-sizing:border-box;宽度:100%;显示:网格; grid-template-columns:1fr 1fr; grid-template-rows:repeat(3,calc((60vh-12px)/ 3)); / * grid-template-rows:1fr 1fr 1fr; * / / * grid-template-rows:auto auto auto; * / height:60vh;边框:3px纯黄色;填充:3px; / * grid-gap:20px; * / / *< - 也会把事情弄糟* /}。显示:块; object-fit:包含;宽度:100%;身高:100%;保证金:0; border:0; padding:3px;}

<! - 图像是200 x 100 px:彼此相邻的绿色和蓝色正方形。 - > < div class =container> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < div class =tile> < img src =https://i.stack.imgur.com/qbpIG.pngalt =。 /> < / DIV> < / div>

图像(2:1)



保留了

。我希望可以这样做:

  grid-template-rows:1fr 1fr 1fr; 

或:

  grid-template-rows:auto auto auto; 

使图像适合网格的行,但它们都不是。
With:


  grid-template-rows:repeat(3,calc((60vh  -  12px)/ 3) ); 

我得到所需的行为。 我该如何避免自己计算数学呢换句话说,我该怎么做才能让 grid-template-rows:1fr 1fr 1fr; (或类似的东西)有效吗?



现在已经很难计算真实页面中CSS容器元素的高度了。目标是用CSS网格布局解决它;没有JavaScript,也没有背景图像。






更新:我原本排除背景图片黑客有两个原因。


  1. 我认为(由于一些误解)背景图片
    url必须位于CSS文件中,但情况并非如此:我可以使用
    内联样式,并将其放在HTML中。


  2. 它感觉很骇人。在看到了多么复杂和混乱之后,为了使它在Safari上运行,嵌套在柔性容器中的嵌套柔性容器获得了
    ,我只是简单地使用背景图像hack,因为它显着 清洁并且适用于所有测试过的浏览器(Chrome,Firefox,Safari)。


最后,答案有助于解决我的问题。 / code>。但是100%是什么? 100%的容器? 100%的视口?行的100%?如果是这样,该行的高度是多少?



Chrome和Firefox会对您的意图进行有根据的猜测。他们已经实施了旨在超越规范指导的算法,以改善用户体验。他们称这些修改为 干预措施



Safari不会这样做。 Safari严格遵守spec语言,它规定元素上的百分比高度必须在父级上具有定义的高度,否则将被忽略。



这些浏览器差异被解释这里有更详细的介绍:





然后,您必须考虑网格项目默认情况下不能小于其内容。如果您的行设置为 1fr ,但图像比分配的空间高,则行必须展开。您可以使用 min-height:0 / min-width:0 溢出,其值不是可见



这种行为会有更详细的解释这里:

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆