【问题标题】:determinate which css is loaded with jQuery确定哪个 css 加载了 jQuery
【发布时间】:2017-12-09 16:44:19
【问题描述】:

我有加载不同 css 的 html 页面,具体取决于屏幕宽度(针对 pc、平板电脑和手机):

<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="all" href="css/style.css" >
<link rel="stylesheet" type="text/css" media="screen and (min-width: 1200px)" href="css/desktop-style.css" > 
<link rel="stylesheet" type="text/css" media="screen and (min-width: 769px) and (max-width: 1199px)" href="css/tablet-style.css" >
<link rel="stylesheet" type="text/css" media="screen and (min-width: 100px) and (max-width: 768px)" href="css/phone-style.css" >

我非常依赖 jQuery,应该根据活动的 css 来选择函数。 在 jQuery 的 JavaScript 中有没有办法确定哪个 css 处于活动状态? 或者我应该使用 jQuery 来确定浏览器宽度,并根据宽度输出进行更多功能? 谢谢。

【问题讨论】:

  • 对于媒体查询,它总是基于你的屏幕宽度......所以根据你的屏幕宽度它会选择那个css......所以你可以尝试改变浏览器宽度来检查它...
  • 为什么激活一个很重要?你不能在 JavaScript 中读取宽度吗?
  • 这个问题有点奇怪。通常你希望 css 先加载,然后推迟 jQuery 的加载。你想要相反的。不,我只是从一开始就加载 css。您可以使用媒体查询。您可以为整个页面设置一个类,可以使用 jQuery 进行更改,...
  • 这可能是我的英语,我确实先加载 css,然后在文件末尾加载 js。我有四个 div,在 PC 上它们应该排成一排,在平板电脑上排成两排,在手机上每个 div 都有最大宽度,所以四排一个 div。基于此和调整大小功能,我使 div 具有相同的高度(对于 pc 和平板电脑),而不是其他动画功能。我只是认为有一些方法可以确定哪个 css 处于活动状态,所以我可以基于我的功能。根据我从您的回复中收集到的信息,这是不可行的,我宁愿使用 js 来确定窗口宽度。感谢您的宝贵时间和意见。

标签: javascript jquery html css


【解决方案1】:

您可以检查this 线程是否有帮助。

您还可以考虑在 css 文件中使用媒体查询,并为不同的屏幕变体加载相同的文件。

【讨论】:

    【解决方案2】:

    我建议您使用media query,但如果您想要JavaScript 解决方案,可以使用jQuery 执行此操作,如下所示:

    var window = $(window).width();
    var css = $('#css');
    
    if(window > 100 && window < 768){
      css.attr('href','css/desktop-style.css')
    } else if(window > 769 && window < 1199){
      css.attr('href','css/tablet-style.css')
    } else if(window > 1200){
      css.attr('href','css/phone-style.css')
    }
    &lt;link id="css" rel="stylesheet" type="text/css" href="css/style.css" &gt;

    注意:您可以根据需要更改分辨率,我不确定检测 mobile tablet 等是否正确。

    警告: 注意!这种方法对SEO 的东西有点不好,google 等不会读取你的响应样式。

    【讨论】:

    • 嘿 pedram,我确实看过媒体查询,但我(还)没有掌握它。我想您的建议是我将采用的建议,正如我在原始问题中提到的那样,我想知道是否有一个函数可以确定哪个 css 处于活动状态,或者我应该使用 js 获得宽度。似乎以后是要走的路。谢谢。
    【解决方案3】:

    检查设备的宽度可能更明智。但是我认为您可以通过这个小“黑客”找出使用了哪个 css。在每个 css 中,你给隐藏元素一个无意义的属性。

    在示例中,我为 #canary 指定了动画名称 first-css。

    你可以在不同的css文件中写

    #canary {animation-name: second-css; display: none}
    

    您可以为每个 css 文件中的特定元素赋予唯一属性。 JQuery 可以检查该属性。

    $(function() {
    whichcss=$("#canary").css("animation-name");
    $("#output").text(whichcss);
    })
    #canary {animation-name: first-css; display: none}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p id="canary"></p>
    <p id="output"></p>

    要特别清楚。在您的 css 文件中,您应该以这种方式包含 css 文件的名称:

    在 desktop-style.css 中:

    #canary {animation-name: desktop-css; display: none} 
    

    在 tablet-style.css 中:

    #canary {animation-name: tablet-css; display: none}  
    

    在 phone-style.css 中:

    #canary {animation-name: phone-css; display: none}
    

    【讨论】:

    • 嘿汉斯,“canary”实际上是确定加载哪个css的好方法,谢谢你的想法。
    • 嗨,Goran,不客气。你认为接受它作为答案就足够了吗? ;-)
    • 嘿汉斯,你好,我投了赞成票,但我收到警告说我没有足够的分数。至于正确答案,我没有得到它,因为我问的是不可行的。在我的问题中,我回退到 jquery,这就是我的方式。您的回答确实是个好主意,但不适用于我的问题。再次感谢您的时间和投入。
    • 啊,谢谢。没问题。只是出于好奇:“#canary”怎么不是这里的解决方案?您无法访问 css 文件以添加#canary 的样式?
    • 你好汉斯,这可能是我的英语,但据我所知,我想要的是不可能的,它需要解决方法,你的一点也不差,但我带着我原来的问题去回退关于 jquery 和 width()...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多