根据Media Query有条件地显示内容
conditionally display content based on Media Query
我有一个网站,在桌面版本的侧边栏显示包含10到20个小图像。到目前为止,在移动设备上,这个侧边栏只是用display: none
隐藏,这是性能最低的解决方案,因为所有的图像无论如何都会被加载。
我现在想知道在移动设备上完全禁用侧边栏的最好方法是什么(不使用单独的AJAX请求)。
我能想到的最好的解决办法是:
- 将侧边栏的HTML代码写入JavaScript变量
- 通过使用JavaScript检查媒体查询来测试设备宽度(例如使用
Modernizr.mq
或左右) - 如果此测试产生非移动设备,则将变量的内容写入DOM,例如使用
innerHTML
,jQuery.append
,jQuery.prepend
或类似的
我知道RWD性能有时可能是一个非常复杂的话题,而最有效的解决方案往往不是显而易见的。那么,有没有人能想出比上面提到的更好的解决方案呢?
如果您不希望图像在移动设备上加载,而不是将图像放置为<img>
标记,您可以将div设置为所需的宽度和高度,并将图像作为背景图像。在css中,默认情况下隐藏侧边栏。然后,在任何你认为超出移动的宽度,使用媒体查询来显示侧边栏,并在div中加载背景图像。
#sidebar {
display: none;
}
#sidebar div#sidebar-img-1 {
width: 100px;
height: 100px;
}
/* ... */
@media only screen and (min-width: 480px) {
/* display sidebar */
#sidebar {
display: block;
}
/* set background image for sidebar items */
#sidebar div#sidebar-img-1 {
background-image: url("sidebar1.jpg");
}
/* ... */
}
缺点是,通过在样式表中放置内容,您将牺牲性能来换取语义。
我正在做一些关于如何做到这一点的研究,并通过灯丝组遇到了这个:https://github.com/filamentgroup/Ajax-Include-Pattern/
似乎很容易设置。它的工作原理看起来像是在数据属性中设置的媒体查询。
你不想在移动设备上显示的侧边栏应该是这样的:
<aside href="..." data-append="articles/latest/fragment" data-media="(min-width: 40em)">Possible Mobile Content</aside>
所以你的侧边栏只会出现在至少40ems (~640px)宽的屏幕上。当然,您还需要javascript文件并启动它,但这些看起来也相当简单。
相关文章:
- 在canjs中,根据任何模型实例的存在,有条件地显示胡子模板部分的最常用方法是什么
- 根据用户输入有条件地显示表单字段
- JavaScript :有条件地显示谷歌广告
- 如何使用 CSS 和 jQuery 根据表单元格值有条件地在悬停时突出显示表行
- 使用三元运算符有条件地在 AngularJS 模板中显示内容
- 有条件地以角度显示链接.js
- Ember.js - Ember.js 车把内的视图有条件:视图未显示
- 有条件地在带有角度的选择中显示选项
- 有条件地显示使用Aurelia的元素
- jQuery:有条件地显示基于下拉框选择的元素
- 如何在Angular/Meteor中有条件地显示ng repeat内的按钮
- ng-hide,如何通过url扩展有条件地显示有角度的东西
- 使用AngularJS阅读RSS提要并有条件地显示结果
- 根据“是/否”单选按钮有条件地显示/隐藏表行
- AngularJS在应用程序页面的导航栏中有条件地显示登录/注销按钮
- 根据可见行数在表上有条件地显示按钮
- Richfaces 3.3.2 GA基于验证有条件地显示模态面板
- 有条件显示2个字符中的1个.S基于xsl:value-of
- 动态地形成网格,有条件地显示单元格的底边框
- 有条件地显示EJS数据