【问题标题】:Check @media rule with javascript by detecting css rule通过检测 css 规则使用 javascript 检查@media 规则
【发布时间】:2014-04-23 06:33:37
【问题描述】:

我知道 matchMedia.js,但我想我可以像这样简单地检测当前的@media 规则。但是,它在 firefox 中不起作用——(这通常意味着它一开始就不正确……)现在看看,内容不应该在 :after 伪元素上吗?有什么建议吗?我有一个CodePen HERE:

CSS

#test {
  content:  "small"
}

@media only screen and (min-width: $bp1) {
  #test {
    content: "medium"
  }
}

jQuery

​​>
var sizeCheck = function() {
  
  if ( $("#test").css('content') === 'small') {
    
    $('.proof').text('jQuery knows this page is SMALL from reading the CSS @media rules.');

  } else if ( $("#test").css('content') === 'medium') {
    
    $('.proof').text('jQuery knows this page is MEDIUM from reading the CSS @media rules.');

  }
    
};

// run the function on document ready
$(document).ready(sizeCheck);

// AND run the function on window resize event
$(window).resize(sizeCheck);

【问题讨论】:

标签: javascript jquery css media-queries


【解决方案1】:

你有一个相当有趣的测试!

回答您的问题:是的,content 只能与 :after:before 伪类一起使用。

适用于 ::before 和 ::after 伪元素

来源:content - CSS | MDN

编辑 #1

我为你找到了一些东西;看起来有可能得到:aftercontent'毕竟':)

var content = window.getComputedStyle(
    document.querySelector('#test'), ':after'
).getPropertyValue('content');

来源:Get Pseudo-Element Properties with JavaScript

我不习惯 CodePen,所以创建了一个jsfiddle

编辑#2

看起来 FireFox 在实际值上添加了一个双重代码,所以在控制台中它看起来像这样:""string""

解决这个问题的方法可能是像这样对两者进行测试:

if (content == '"small"' || content == 'small') {
    // ...
}

我更新了the fiddle here

【讨论】:

  • 好吧,这增加了:after,但 jQuery 并没有真正看到它,因为它无法在之后检查。我想知道是否有一个类似于内容的属性,它可以是描述性的并且可以被两者阅读。否则我将不得不使用display:none 或其他东西来检测。
  • 看起来很棒,但在 FireFox 中仍然没有骰子。神秘。
  • 很有趣,因为当我 console.log(content) 时,content 的值在那里,但由于某种原因,它被两个双引号括起来,像这样:""medium"" - 你看到了吗?
  • 好吧,找到了解决方法(见我上面的编辑#2)...不确定它是否是完美的解决方案,但它绝对是一个;)
  • 嗯。伟大的。我会在一天后回来查看。我想知道如果您在 CSS 中使用单个 'quotes' 是否会有所不同。
猜你喜欢
  • 2017-10-29
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多