是否可以使用Javascript或jQuery动态创建完整的媒体查询规则?
我使用了大量的媒体查询来定位使用内联CSS,导入和链接文件的通用视口和特定设备/屏幕:
@media screen and (min-width:400px) { ... }
@import url(foo.css) (min-width:400px);
<link rel="stylesheet" type="text/css" media="screen and (min-width: 400px)" href="foo.css" />
我可以使用jQuery添加/删除类:
$("foobar").click(function(){
$("h1,h2,h3").addClass("blue");
$("div").addClass("important");
$('#snafu').removeClass('highlight');
});
我也看document.stylesheets
和看似古老且特定于浏览器的内容:
document.styleSheets[0].insertRule("p{font-size: 20px;}", 0)
但我找不到任何以编程方式生成的参考:
@media screen and (min-width:400px)
直接或以任何形式从javascript。
答案 0 :(得分:30)
您只需更新现有的<style>
元素(或创建一个)textContent
即可包含该规则,这将使其在给定的上下文中生效。
document.querySelector('style').textContent +=
"@media screen and (min-width:400px) { div { color: red; }}"
答案 1 :(得分:5)
我用这种方式。这允许更新文档中的多个样式
HTML中的:
<style class="background_image_styles">
</style>
JS中的
$(".background_image_styles").text("@media (min-width: 1200px) {.user_background_image{background-image: url('https://placehold.it/1200x300');}}");
答案 2 :(得分:0)
对于一般用途,可以将样式表附加到document.head
。然后,您可以在其中放置任何mod,包括媒体查询。由于它是document.head
中的最终样式表,因此它会覆盖所有以前的CSS规则。
香草JavaScript:
let style = document.getElementById('custom-styles');
if (!style) {
style = document.createElement('style');
style.id = "custom-styles";
document.head.appendChild(style);
}
style.innerHTML =
"@media screen and (min-width:400px) {...}";