我想要实现的是相对于父容器宽度的自适应内部内容布局。不太确定是否可以选择使用 CSS 媒体查询,因为它们指的是屏幕宽度而不是特定的容器宽度。我希望相同的代码在 2、3 或 4 列中显示一组缩略图,具体取决于包裹在哪个容器中。
我正在寻找一种“自动化”的方式来做这件事,而不是必须手动玩 css。换句话说,如果有意义的话,一个“响应式布局”将使用“max-parent-container-width”而不是 max-“device-width”。
请问这个有解决办法吗?
我想要实现的是相对于父容器宽度的自适应内部内容布局。不太确定是否可以选择使用 CSS 媒体查询,因为它们指的是屏幕宽度而不是特定的容器宽度。我希望相同的代码在 2、3 或 4 列中显示一组缩略图,具体取决于包裹在哪个容器中。
我正在寻找一种“自动化”的方式来做这件事,而不是必须手动玩 css。换句话说,如果有意义的话,一个“响应式布局”将使用“max-parent-container-width”而不是 max-“device-width”。
请问这个有解决办法吗?
这是(IMO)一个更好的解决方案,它提供与媒体查询的 API 表面 1:1 的对等,但仅限于单个元素:http ://www.backalleycoder.com/2014/04/18/element-queries-from- the-feet-up/(包括脚本和演示)。虽然它使用的语法/方法有点不同,但它是完全动态的,因此当您更改样式或查询规则时无需调用方法,它涵盖了您可以在媒体查询中执行的任何操作。
包含 100 LOC 的小脚本后,您可以使用以下内容设置元素样式:
HTML
<section media="query(small, (max-width: 300px) and (max-height: 300px))">
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
</section>
CSS
section[matched-media~="small"] {
font-size: 50%; /* small text for a wee lil element! */
}
/* Multiple matches example: */
section[matched-media~="small skinny"] {
...
}
将您的query()
声明放在media=""
任何元素的属性中,然后当查询匹配时,它将由脚本添加到matched-media=""
元素的属性中。您可以在页面生命周期的任何时候向新元素添加查询(只需使用setAttribute('media', ...)
),并且不需要您调用任何 JS,所有属性解析和查询匹配都是异步和自动的!查看上面提到的文章中关于解决方案机制的更详细的解释——它包括一个演示,以及带有两个版本的脚本的 repos。
如果可能,一种简单的方法是将类名放在父容器上。但要做到这一点,您需要知道父级是如何在服务器端或 JS 上显示的。我还没有听说过 div 的“like-media-query”解决方案。
有一个称为元素查询 ( http://www.xanthir.com/b4PR0 ) 的概念可以解决此问题。
虽然我没有使用过这个,但在 GitHub https://github.com/wemakeweb/element-queries上有一个实验性的实现
这假设让您编写如下查询:
@media only screen and (element: .widget) and (element-max-height: 30px)