问题 打印样式表 - 将输入转换为文本


我有一张桌子有一些 <input type="text"> 其中的框,我希望这些在打印时显示为普通文本。我已经设置了一个media =“print”样式表

input
{
border-style: none;
}

在它,这删除了边框,所以内容看起来像文本,但输入仍然将列的宽度推到其实际宽度(不奇怪),所以我得到不必要的空格和列宽。是否有一种时髦的方式以某种方式使用CSS将输入的宽度设置为其内容大小,或其他一些方法来解决这个问题?

另一个论坛上有人建议使用打印按钮来创建客户端脚本来物理地更改页面标记,但遗憾的是,由于页面的复杂性和动态性,这并不实际。

我很确定这不可能,但我想我会问。


7434
2018-02-23 12:53


起源

BTW: overflow: visible 由于一个错误(!!),输入在IE6 / 7中工作。 - BalusC
除了使用jQuery之外,你有没有找到答案? - L84


答案:


不,我不认为没有一些脚本可以做到这一点。但是使用像Jquery这样的框架很容易实现脚本编写:

  • 对于每个输入元素,您将创建一个 <span> 在它旁边并给它一个隐藏在其中的类 media="screen" 样式表,可见 media="print"

  • 输入元素本身会得到一个反过来的类,可见 screen 并隐藏在 print

  • 每个输入元素都会得到一个 change 更新邻居的事件 span

我还没有将JQuery例程从我的袖子中拉出来,而不是现在把它放在一起,但它绝对可以解决,而且仍然非常不显眼 - 当用户开始打印时不需要执行任何脚本。

我敢打赌,如果你重新标记问题或者问一个新问题,我们的常驻JQuery大师之一会看看它:)


7
2018-02-23 13:29



感谢您的建议 - 我正在使用(并且相当称职)JQuery,但是有一大堆动态创建的输入因此将其放入会使(已经很复杂的)代码相当复杂,所以我想避免可能,因此我想用CSS做这件事 - 目前还不完美,但这并不算太糟糕。 - Mad Halfling
谢谢,我可以自己做,但这将是一个野兽和功能与额外测试的权衡是不值得的(我知道它听起来不会那么复杂,但这个页面正在变成有点怪物,呵呵)。非常感谢你的建议,也许它会帮助别人 - Mad Halfling
我还没有发现一个情况 border: 0; 不起作用。试一试! - roberthuttinger
另请查看与布局关联的其他元素的布局。可能是父母比你认为强迫包裹要小。 - roberthuttinger


如果您使用的是Bootstrap:

@media print {
  .no-print {
    display: none !important;
  }

  .form-control
  {
    border: 0;
    padding:0;
    overflow:visible;
  }
}

2
2017-12-23 21:19





我遇到了这个搜索有关如何设置表单样式和其他一些内容的信息。

在搞乱了一些CSS后,我想出了一个适合我的CSS方法。

我的表单都具有涉及彩色背景和黑色边框的样式。

在我的打印CSS文件中,我复制了我的表单css并将所有颜色(不是文本本身)更改为白色。换句话说,它隐藏了我的文本框并仅显示文本。

原始CSS - #form textarea,#form input,#form select {border:1px solid #ddd;颜色:#313131; }

打印CSS - #form textarea,#form input,#form select {border:1px solid #fff;颜色:#FFF; }

像魅力一样工作=>

希望这可以帮助


1
2017-07-19 04:34



看到我对上面答案的评论, border: 0; 完成同样的事情! - roberthuttinger


input { border-style: none; display: inline}

0
2018-02-24 13:03



很好的想法,但它不起作用。 - casraf
是的,我已经尝试了它并且它不起作用(至少在IE8下) - 文本框仍然在页面上保留它们的空间并且不会折叠以适合它们的内容文本(无论如何,谢谢你的建议) - Mad Halfling


我正在使用ASP.NET并遇到同样的问题。

我通过添加一个与我的Textbox对应的Label来解决它,并设置了两个类:

在@media屏幕中:

.hdnPrint {visibility:visible;display:block;}
.visPrint {visibility:hidden;display:none;}

在@media打印:

.hdnPrint {visibility:hidden;display:none;}
.visPrint {visibility:visible;display:block;}

对于文本框,我分配了hdnPrint类,在标签上,我分配了visPrint类。当用户打印表单时,将显示标签并隐藏表单域。

我假设你可以通过遵循相同的模式在非ASP.NET环境中做类似的事情。

无需编写脚本。


0
2017-12-13 16:00





要在CSS打印部分中定义输入字段的宽度,请使用:

width: ?cm 

对于相应的输入元素。

在Firefox中测试;也许它不适用于以前版本的浏览器。


0
2017-10-11 09:45