【问题标题】:Is there a pure JavaScript approach to retrieving all breakpoints or media-quires of any site?是否有纯 JavaScript 方法来检索任何站点的媒体查询的所有断点?
【发布时间】:2019-06-25 17:29:49
【问题描述】:

我是 JS 新手,想以编程方式找到应用于当前网页的所有基于屏幕宽度的断点(至少所有媒体查询,包括最小值或最大值)。我是否需要将样式表解析为纯文本并以这种方式查找断点?或者有其他方法吗?

我查看了可能有助于找到这些的手动方法和半自动化工具,但我想以编程方式执行纯 JavaScript 代码来查找当前加载的网页的所有基于屏幕宽度的断点(至少是媒体查询)。

@media (min-width: 1281px) {
  //CSS
}
@media (min-width: 1025px) and (max-width: 1280px) {
   //CSS
}
@media (min-width: 768px) and (max-width: 1024px) {
  //CSS
}
@media (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) {
  //CSS
}
@media (min-width: 481px) and (max-width: 767px) {
  //CSS 
}
@media (min-width: 320px) and (max-width: 480px) {
  //CSS
}
//e.g. credited https://gist.github.com/gokulkrishh/242e68d1ee94ad05f488

我希望输出所有屏幕宽度断点 ['320','480','481','767','768','1024','1025','1280','1281'] . 感谢您的建议。

【问题讨论】:

  • 我猜你需要使用正则表达式解析所有的 CSS 和 JS 文件——但是有这么多的插件和不同的方法可以做到这一点,你真的需要确切地知道如何网站存储他们的媒体查询以便执行此操作。

标签: javascript media-queries


【解决方案1】:

访问the stylesheets through the API provided。遍历它们并从中获取规则。循环遍历那些并过滤掉那些不是媒体规则的。然后你就可以从每一个中读取conditionText

您需要解析条件文本以找到断点。

Array.from(document.styleSheets).forEach(sheet => {
  Array.from(sheet.cssRules).forEach(rule => {
    if (rule.type === CSSRule.MEDIA_RULE) {
      console.log(rule.conditionText);
    }
  });
});
@media (min-width: 1281px) {
  body {
    background: blue;
  }
}

@media (min-width: 1025px) and (max-width: 1280px) {
  body {
    background: red;
  }
}

@media (min-width: 768px) and (max-width: 1024px) {
  body {
    background: green;
  }
}

【讨论】:

  • 太好了,我正确地假设我需要遍历所有样式表,但认为我需要将整个样式表解析为纯文本。再次感谢
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 2014-06-01
  • 2012-01-23
  • 2013-11-04
  • 2015-11-06
  • 1970-01-01
  • 2014-07-22
相关资源
最近更新 更多