我想使用媒体查询根据他们所在的div元素的大小来调整元素的大小。我不能使用屏幕大小,因为div只是像网页中的小部件一样使用,它的大小可以变化。
当前回答
我刚刚创建了一个javascript shim来实现这个目标。如果您愿意,可以查看一下,这是一个概念验证,但请注意:这是一个早期版本,仍然需要一些工作。
https://github.com/marcj/css-element-queries
其他回答
对于我来说,我通过设置div的最大宽度来做到这一点,因此对于小部件不会受到影响,而大部件由于max-width样式而调整大小。
// assuming your widget class is "widget"
.widget {
max-width: 100%;
height: auto;
}
我刚刚创建了一个javascript shim来实现这个目标。如果您愿意,可以查看一下,这是一个概念验证,但请注意:这是一个早期版本,仍然需要一些工作。
https://github.com/marcj/css-element-queries
这个问题很模糊。正如BoltClock所说,媒体查询只知道设备的尺寸。但是,您可以将媒体查询与下降选择器结合使用来执行调整。
.wide_container { width: 50em }
.narrow_container { width: 20em }
.my_element { border: 1px solid }
@media (max-width: 30em) {
.wide_container .my_element {
color: blue;
}
.narrow_container .my_element {
color: red;
}
}
@media (max-width: 50em) {
.wide_container .my_element {
color: orange;
}
.narrow_container .my_element {
color: green;
}
}
唯一的其他解决方案需要JS。
这是目前不可能与CSS单独写在接受的答案@BoltClock,但您可以通过使用JavaScript的工作。
我创建了一个容器查询(又名元素查询)填充来解决这类问题。它的工作方式与其他脚本略有不同,因此您不必编辑元素的HTML代码。你所要做的就是包括脚本,并在你的CSS中使用它,就像这样:
.element:container(width > 99px) {
/* If its container is at least 100px wide */
}
https://github.com/ausi/cq-prolyfill
是的,CSS容器查询就是你要找的。CSS遏制模块是详细说明此特性的规范。
你可以在这里阅读更多关于这十年工作的内容,包括提案、概念验证、讨论和更广泛的web开发人员社区的其他贡献!有关这样一个功能如何工作和使用的更多细节,请查看Miriam Suzanne的详细解释。
Currently only Chromium 105+ supports Container queries out of the box, though Safari 16 will include support as well. Hopefully it won't be much longer before we see a robust cross-browser implementation of such a system. It's been a grueling wait, but I'm glad that it's no longer something we simply have to accept as an insurmountable limitation of CSS due to cyclic dependencies or infinite loops or what have you (these are still a potential issue in some aspects of the proposed design, but I have faith that the CSSWG will find a way).
媒体查询并不是基于页面中的元素设计的。它们被设计为基于设备或媒体类型工作(因此它们被称为媒体查询)。在基于屏幕的媒体中,宽度、高度和其他基于尺寸的媒体功能都是指视口或设备屏幕的尺寸。它们不能用于指代页面上的某个元素。
如果您需要根据页面上某个div元素的大小应用样式,则必须使用JavaScript来观察该div元素大小的变化,而不是使用媒体查询。
或者,在最初发布这个答案之后引入了更现代的布局技术(如flexbox)和标准(如自定义属性),您可能根本不需要媒体或元素查询。Djave提供了一个例子。