检测设备和交换CSS文件- jQuery
Detect device and swap the CSS file - jQuery
我的web应用程序目标是主要的智能手机,我需要根据设备更改CSS文件(如果UI中有问题需要击中它们),我计划使用以下jQuery交换CSS。只是想知道它是否是一个最佳实践和良好的性能?
<link rel="stylesheet" href="basic.css" type="text/css" class="cssLink" />
<link rel="stylesheet" href="general.css" type="text/css" />
<script type="text/javascript">
$(document).ready(function() {
// css file based on the device
var controlCss;
// get the device agent and conver to lover case
var deviceAgent = navigator.userAgent.toLowerCase();
if(deviceAgent.match(/android/i)){
controlCss = "android.css";
$(".cssLink").attr("href", controlCss);
}
else if(deviceAgent.match(/webso/i)){
controlCss = "webOS.css";
$(".cssLink").attr("href", controlCss);
}
else if(deviceAgent.match(/iphone/i)){
controlCss = "iphone.css";
$(".cssLink").attr("href", controlCss);
}
else if(deviceAgent.match(/ipod/i)){
controlCss = "ipad.css";
$(".cssLink").attr("href", controlCss);
}
else if(deviceAgent.match(/blackberry/i)){
controlCss = "bb.css";
$(".cssLink").attr("href", controlCss);
}
else {
controlCss = "basic.css";
$(".cssLink").attr("href", controlCss);
}
});
</script>
1。这是最佳实践吗?
取决于你认为什么是最佳实践,以及在你的应用程序和公司的环境中什么是最佳实践。这让我想到的一件事是:您能保证所有页面都使用jQuery吗?如果是这样,那么我认为这是一个很好的方法来实现你所追求的。另一种选择是在服务器端执行此操作,这将保证最佳性能,但可能有其他原因导致您不想这样做(可能您无法访问服务器端代码,或者您希望将大部分功能维护在前端程序员手中)。
2。它的性能好吗?
简短的回答是否定的。在需要100K+的jQuery负载的基础上注入页面上的CSS。目前处理这个问题的方法是等待整个页面(和所有依赖项)加载,然后再添加样式。这将在页面第一次显示(没有样式)和加载样式以及所有内容移动之间创建一个明显的"跳跃"。
加载CSS服务器端将摆脱这种情况,但我认为你仍然可以在UI中这样做,并将大部分代码库保留在JavaScript中,这将使其更容易维护。要做到这一点,请删除在调用CSS文件之前等待文档加载的位置:
<link rel="stylesheet" href="basic.css" type="text/css" class="cssLink" />
<link rel="stylesheet" href="general.css" type="text/css" />
<script type="text/javascript">
// No need to wait for document to load
// $(document).ready(function() {
// css file based on the device
var controlCss;
// get the device agent and conver to lover case
var deviceAgent = navigator.userAgent.toLowerCase();
if(deviceAgent.match(/android/i)){
controlCss = "android.css";
$(".cssLink").attr("href", controlCss);
}
// etc..
// });
</script>
要进一步提高性能,您可以使用不依赖于jQuery的解决方案,而不是
$(".cssLink").attr("href", controlCss);
您可以将#cssLink
添加到样式表<link>
元素中,并使用DOM执行相同的操作:
document.getElementById("cssLink").setAttribute("href", controlCss);
这将使您的代码看起来如下:
<link rel="stylesheet" href="basic.css" type="text/css" css="cssLink" id="cssLink" />
<link rel="stylesheet" href="general.css" type="text/css" />
<script type="text/javascript">
// .. blah blah ..
if(deviceAgent.match(/android/i)){
controlCss = "android.css";
// use a solution that does not need jQuery
document.getElementById("cssLink").setAttribute("href", controlCss);
}
// etc..
</script>
这样,在将样式表应用到页面之前,您将消除对jQuery的100K +有效负载的依赖。
更新:
也可以根据屏幕大小而不是设备来应用CSS规则。
你看过@media queries了吗?
- 为什么jQuery文件的函数中有两个参数,但只接收一个参数
- 限制文件类型,大小,单次上传不'无法在jquery文件上传中工作
- 在jquery文件上传中调用默认的done函数
- 使用send时,jquery文件上传不调整图像客户端的大小
- JQuery文件上载未检测到动态添加的输入
- php文件中包含的jquery文件在服务器上不起作用
- jQuery文件上传崩溃的浏览器
- Blueimp jQuery文件上传音频/视频限制
- 如何在 elfinder(一个 jquery 文件管理器插件)中只显示文件夹列表
- 如何在 Blueimp jquery 文件上传器中发送 I 会话数据
- 如何使用javascript动态添加基于现有文件的jquery文件
- 带有自定义进度条的 JQuery 文件上传 (blueimp)
- 如何将jQuery文件添加到导航网站
- Drupal 7 将 jQuery 文件添加到所有页面
- 将变量从 php 文件发送到 jquery 文件
- jQuery文件上传代码和回调
- jQuery文件上传和验证未定义函数
- 引导程序jquery文件上传和laravel
- 命令代码jquery文件错误
- jQuery文件上传库:如何点击单个文件进行上传