在开发网站时,我遇到了一个令人沮丧但合乎逻辑的重大问题。
看一眼这把小提琴 http://jsfiddle.net/PdgKB/.
重要的 CSS:
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
div#wrapper {
padding: 1em;
}
img {border: 4px solid blue;}
@media screen and (max-width: 480px) {
img {border: 0 none;}
}
重要的 jQuery:
function imgSize() {
if ($(window).width() < 481) {
$("img").css({
"position": "relative",
"width": $(window).width(),
"max-width": "none",
"left": "-1em",
"float": "none"
});
} else {
$("img").attr("style", "");
}
}
imgSize();
$(window).resize(function() {
imgSize();
});
尝试将结果窗口设置为小于 481 像素并再次增大。基本功能解释:当窗口宽度小于 481px 时,图像将被强制宽度大于其父级并等于窗口宽度。你不能用 CSS 来做到这一点。 (如果可以,请告诉我!)这应该在移动设备上提供良好的视图。为了进一步“美化”图像,当屏幕在 0 到 480px 之间时,原始边框将被删除,这是通过媒体查询完成的。
所有这一切都很有效,直到......出现狂野的滚动条!发生的情况是,jQuery 仅考虑“窗口”,而媒体查询还计算滚动条宽度生成的像素。
事实上,这是非常符合逻辑的。$(*window*).width()
and @media *screen*
但这太令人沮丧了。处理这个问题的最佳方法是什么?在 jQuery 中编写一个自定义函数,该函数归结为“如果滚动条:将 x 像素添加到“如果窗口宽度”函数”,其中x是特定操作系统中滚动条的宽度。或者我们应该尝试用 CSS 绕过这个问题,或者只是不交替使用 jQuery 和 CSS?
我不仅仅关注这个问题,而是关注两者之间的区别$(window).width()
and media queries
一般来说。就我而言,我实际上可以添加border: 0 none
到 jQuery 就这样了。但不幸的是这并不总是可能的。最好不使用插件!