我一直使用Firebug和IE Developer Toolbar来调试棘手的CSS问题。但是,有时会出现棘手的错误,仅在您打印页面时才会出现。
您使用什么技术/工具来诊断此类问题?有没有办法在打印视图中充分利用传统的CSS调试工具?
更新:我已经使用PDF打印机以避免浪费纸张;我的问题是我无法右键单击打印的DOM。下面的其他一些答案非常有帮助,谢谢。:-)
我一直使用Firebug和IE Developer Toolbar来调试棘手的CSS问题。但是,有时会出现棘手的错误,仅在您打印页面时才会出现。
您使用什么技术/工具来诊断此类问题?有没有办法在打印视图中充分利用传统的CSS调试工具?
更新:我已经使用PDF打印机以避免浪费纸张;我的问题是我无法右键单击打印的DOM。下面的其他一些答案非常有帮助,谢谢。:-)
Answers:
lee-penkman刚刚在这里找到了有关Firefox的新功能的评论:Shift-F2
在Firefox中按打开浏览器控制台(不是javascript控制台),然后输入media emulate print
。绝对不错!
更新2018年9月:从Firefox 62开始,开发人员控制台已消失。现在似乎还没有一种激活打印样式仿真的方法。
2019年11月更新:似乎在Firefox 69中,再次出现了一个用于打印样式仿真的新按钮。请参阅此页面上的其他答案:https : //stackoverflow.com/a/58015662/195476
fn+shift+F2
我使用WebDeveloper插件和CSS->“按媒体类型显示CSS”->“打印”来查看打印时的CSS。Firebug的检查实用程序可以使用由插件过滤的CSS。
只列出最后一个打印CSS,然后从CSS链接或import语句中删除“打印”条件,该怎么办?然后,您正在浏览器窗口中调试打印CSS。
#body { width: 8.5in; height:11in;}
我一直使用Web开发人员工具栏(如其他答案所述),但Firebug似乎有时会错过某些样式。因此,我在浏览器中添加了一个书签,并添加了以下Javascript作为书签的URL。现在,我只需单击书签即可切换到打印样式:
javascript:(function(){var%20h,a,f;a=document.getElementsByTagName('link');for(h=0;h<a.length;h++){f=a[h];if(f.rel.toLowerCase().match(/stylesheet/)&&f.href&&(f.media=='print'||f.media=='screen')){var%20g=f.href.replace(/(&|%5C?)forceReload=\d+/,'');if(f.media.toLowerCase().match(/screen/))f.media="dontshow";if(f.media.toLowerCase().match(/print/))f.media="all";f.href=g+(g.match(/\?/)?'&':'?')+'forceReload='+(new%20Date().valueOf());}}})()
上面的代码查找所有样式表链接,测试是否为media = print,是否将其更改为media = all(并通过将其替换为media = dontshow来隐藏所有media = screen),并通过向其添加时间标记来重新加载样式表网址。基本的重载脚本来自其他人,我添加了媒体部分。这对我来说很棒!
这将是上面的JavaScript URL可读性更高的版本,以进行解释:
javascript: (function() {
var h, a, f;
a = document.getElementsByTagName('link');
for (h = 0; h < a.length; h++) {
f = a[h];
if (f.rel.toLowerCase().match(/stylesheet/) && f.href && (f.media == 'print' || f.media == 'screen')) {
var g = f.href.replace(/(&|\?)forceReload=\d /, '');
if (f.media.toLowerCase().match(/screen/)) f.media = "dontshow";
if (f.media.toLowerCase().match(/print/)) f.media = "all";
f.href = g(g.match(/\?/) ? '&' : '?')
'forceReload=' (new Date().valueOf());
}
}
})()