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

Posted

技术标签:

【中文标题】使用 javascript 或 jQuery 生成 CSS 媒体查询【英文标题】:Generating CSS media queries with javascript or jQuery 【发布时间】:2013-04-09 16:15:30 【问题描述】:

是否可以使用 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("pfont-size: 20px;", 0)

但我找不到任何关于以编程方式生成的参考:

  @media screen and (min-width:400px)

直接来自javascript或以任何形式。

【问题讨论】:

仅更新现有的style 元素的内容似乎可以正常工作:jsfiddle.net/vfLS3 你的意思是添加css媒体查询规则吗? @ExplosionPills 这是完美的,值得“回答” 【参考方案1】:

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

document.querySelector('style').textContent +=
    "@media screen and (min-width:400px)  div  color: red; "

http://jsfiddle.net/vfLS3/

【讨论】:

$('style').text("@media (min-width:400px) div color:red; ") @MuhammadUmer 将覆盖样式元素的全部内容而不是附加到它 @MuhammadUmer .append 不附加文本内容,而是附加一个元素。如果参数是一个字符串,jQuery 将尝试选择元素并在@ 上阻塞 但它也添加了文本 但更安全的方法是这样$('p')[0].innerhtml='css'; 【参考方案2】:

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

在 HTML 中:

<style class="background_image_styles">
</style>

在 JS 中

$(".background_image_styles").text("@media (min-width: 1200px) .user_background_imagebackground-image: url('https://placehold.it/1200x300');");

【讨论】:

【参考方案3】:

对于一般用途,您可以将样式表附加到document.head。然后你可以把任何你想要的模组放在那里——包括媒体查询。由于它是 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) ...";

【讨论】:

以上是关于使用 javascript 或 jQuery 生成 CSS 媒体查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 或 JQuery 在 ASP.net 中获取生成控件的 ID

使用 javascript 或 jquery 关闭当前浏览器选项卡 [重复]

如何使用 Javascript 或 Jquery 将 JSON 对象包装在数组中?

在 javascript 或 JQuery 中查找控件

如何使用javascript验证动态生成的输入框值

javascript-jquery-更改jquery对象