使用javascript或jQuery生成CSS媒体查询

nic*_*har 14 javascript css jquery media-queries

是否可以使用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" />
Run Code Online (Sandbox Code Playgroud)

我可以使用jQuery添加/删除类:

$("foobar").click(function(){
  $("h1,h2,h3").addClass("blue");
  $("div").addClass("important");
  $('#snafu').removeClass('highlight');
});
Run Code Online (Sandbox Code Playgroud)

我也看一下,document.stylesheets看似古老而且特定于浏览器:

  document.styleSheets[0].insertRule("p{font-size: 20px;}", 0)
Run Code Online (Sandbox Code Playgroud)

但我找不到任何以编程方式生成的引用:

  @media screen and (min-width:400px)
Run Code Online (Sandbox Code Playgroud)

直接或以任何形式从javascript.

Exp*_*lls 30

您可以只更新现有<style>元素(或创建一个元素)textContent以包含规则,这将使其在给定的上下文中生效.

document.querySelector('style').textContent +=
    "@media screen and (min-width:400px) { div { color: red; }}"
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/vfLS3/

  • @MuhammadUmer将覆盖样式元素的全部内容而不是附加到它 (4认同)
  • @MuhammadUmer `.append` 不会附加文本内容,而是附加一个元素。如果参数是字符串,jQuery 将尝试选择该元素,并会因“@”而卡住 (2认同)

小智 5

我用这种方式.这允许更新文档中的多个样式

在HTML中:

<style class="background_image_styles">
</style>
Run Code Online (Sandbox Code Playgroud)

在JS中

$(".background_image_styles").text("@media (min-width: 1200px) {.user_background_image{background-image: url('https://placehold.it/1200x300');}}");
Run Code Online (Sandbox Code Playgroud)