CSSでブラウザに背景画像を印刷させるにはどうすればよいですか?


102

この質問は以前に尋ねられましたが、解決策は私の場合には適用されません。特定の背景画像がページに不可欠であるため、それらを確実に印刷したい。(CSSスプライトとして使用されている画像がいくつかあるため、ページ内の画像ではありません。)

同じ質問に対する別の解決策はlist-style-image、を使用することを提案しています。これは、アイコンごとに異なる画像がある場合にのみ機能し、CSSスプライトは使用できません。

アイコンをインラインで配置した別のページを作成する以外に、別の解決策はありますか?

回答:


51

ブラウザの印刷方法をほとんど制御できません。最大で推奨できますが、ブラウザの印刷設定に「背景画像を印刷しない」場合は、ページを書き直して背景画像を他のコンテンツの背後にあるフローティング「前景」画像に変換することなしにできることはありません。


209

ChromeとSafariでは、CSSスタイル-webkit-print-color-adjust: exact;を要素に追加して、背景色や画像を強制的に印刷できます


4
これは素晴らしいです。phantomjsユーザー/ webkitの生活をはるかに容易にします
Jason

1
@MuneemHabibそれはIEでの作業は、実際には、唯一サポートされているブラウザはクロームではありません。developer.mozilla.org/en-US/docs/Web/CSS/...
マルコBettiolo

それはクロムのトリックを行いました...幸いなことに、この場合、私はウェキットをサポートするだけで済みました...
Davy

2
@DisgruntledGoatは問題をすばやく解決したので、これを正しい答えに更新する必要があります(私の作業中のプロジェクトはChromeにのみ焦点を当てています)。明らかにすべてのブラウザで機能するわけではありませんが、関係なく、事前に知っておく必要があります。
Brett84c

1
@ Brett84c:1つのブラウザーのみのソリューションであるため、同意しません。
Kukeltje

84

ブラウザーには、デフォルトで、背景色と画像を印刷するオプションがオフになっています。CSSにいくつかの行を追加して、これをバイパスできます。追加するだけです:

* {
    -webkit-print-color-adjust: exact !important;   /* Chrome, Safari */
    color-adjust: exact !important;                 /*Firefox*/
}

yaは正常に動作しますが、mozilla は非標準
Qh0stM4N 2018

3
なぜ!important必要なのですか?

私のために働いた!ありがとうございました。
Nick Woodhams

color-adjust残念ながらFireFoxでは適切にサポートされていません。colorcssプロパティではなく、背景にのみ適用されるようです。多くの活動や投票がなく、バグとして報告されています。フォントの色が保持されていない場合、背景を維持してもまったく役に立たないため、読みにくくなります。
フレデリック

それは良い解決策です。IE11では動作しないことに注意してください(わかっています!)。
Rafael S. Fijalkowski

76

CSSで背景画像を印刷する方法を見つけました。背景のレイアウトによって多少異なりますが、私のアプリケーションではうまくいくようです。

基本的に、@media printスタイルシートの最後にを追加し、本文の背景を少し変更します。

例、現在のCSSが次のようになっている場合:

body {
background:url(images/mybg.png) no-repeat;
}

スタイルシートの最後に、以下を追加します。

@media print {
body {
   content:url(images/mybg.png);
  }
}

これにより、画像が「前景」画像として本文に追加され、印刷可能になります。z-index適切にするには、CSSを追加する必要がある場合があります。しかし、繰り返しになりますが、ページのレイアウト方法次第です。

これは、印刷ビューに表示するヘッダー画像を取得できないときに機能しました。


3
これは、私がする必要があることに対して素晴らしいソリューションでした。インライン<img>(RWDの場合)をの別のものに切り替えることでした@media print。Web画像は暗い背景上にあったため、その画像の印刷は白い紙では機能せず、ヘッダーに暗い背景を印刷するようユーザーに強制したくありませんでした。パーフェクト!
JHogue 2013年

@JHogue-ありがとうございます!よかったです。
ckpepper02 2013年

4
これは「正しい」答えではありませんが。受け入れられた回答よりもはるかに役立つ。
Xenology 2014年

回答以下stackoverflow.com/a/15208258/915865それはより良い説明、私見持つためにマークされなければならない
キャット・リム・ルイス

1
hanz答え@のように前に:Firefoxでは、それはあなたがコンテンツの内部を使用している場合にのみ働いていた
vaskort

18

以下のコードは私にはうまくいきます(少なくともChromeでは)。

マージンとページの向きのコントロールも追加しました(縦、横)。

<style type="text/css" media="print">
@media print {
  body {-webkit-print-color-adjust: exact;}
}
@page {
    size:A4 landscape;
    margin-left: 0px;
    margin-right: 0px;
    margin-top: 0px;
    margin-bottom: 0px;
    margin: 0;
    -webkit-print-color-adjust: exact;
}
</style>

9

必ず!important属性を使用してください。これにより、印刷時にスタイルが保持される可能性が大幅に高まります。

#example1 {
    background:url(image.png) no-repeat !important;
}

#example2 {
    background-color: #123456 !important;
}

この方法を使用して、会社用の簡単な「印刷用」レポートをいくつか作成しました。OS X Chrome / SafariとWindows 8 Chrome / IEで動作します(他のプラットフォームでは試していません)。
nuts-n-beer

3
これは、Chrome、Firefox、MacのSafariでは効果がないようです。
intcreator 2016

これは、特定の要素のすべての使用に属性を適用し、ドキュメントを適切に印刷するために必要なものです。ありがとう!
ジョニー

7

@ ckpepper02が言ったように、body content:urlオプションはうまく機能します。しかし、少し変更すれば、次のように:before疑似要素を使用してソートのヘッダー画像を追加するだけでよいことがわかりました。

@media print {
  body:before { content: url(img/printlogo.png);}
}

それはページの上部に画像を入れてしまいます、そして私の限られたテストから、それはChromeとIE9で動作します

-ハンツ


5

疑似要素を使用します。多くのブラウザは背景画像を無視しますが、コンテンツが画像に設定されている疑似要素は、技術的には背景画像ではありません。その後、背景画像を画像が表示されるはずの場所に大まかに配置できます(ただし、元の画像ほど簡単でも正確でもありません)。

1つの欠点は、これをChromeで機能させるには、この動作を印刷メディアクエリの外部で指定し、それを印刷メディアクエリブロックに表示する必要があることです。だから、このようなもの...

.image:before{
        visibility:hidden;
        position:absolute;
        content: url("your/image/path");
    }   

@media print {
.image{
   position:relative;
    }
    .image:before{
       visibility:visible;
       top:etc...
    }       
}

欠点は、通常のページの読み込み時に画像がダウンロードされることが多く、不要なサイズが追加されることです。元の可視画像にすでに使用しているのと同じ画像/パスを使用するだけで、これを回避できます。


1

重要な属性を背景画像に追加すると、Google Chromeで機能します。最初に属性を追加してから、もう一度試してください。そのようにすることができます。

    .inputbg {
background: url('inputbg.png') !important;  

}


言及すべき良い点は、-webkit-print-color-adjustと一緒に私の問題を解決しました:正確です!重要;
czmarc

0

固定色の境界線を使用できます。

 borderTop: solid 15px black;

グラデーションの背景には、次を使用できます。

    box-sizing: border-box;
    border-style: solid;
    border-top: 0px;
    border-left: 0px;
    border-right: 0px;
    border-image: linear-gradient(to right, red, blue) 100%;
    border-image-slice: 1;
    border-width: 18px;

0

https://gist.github.com/danomanion/6175687は、背景画像の代わりにカスタムの箇条書きを使用して、エレガントなソリューションを提案します

   a.logo {
     display: list-item;
     list-style-image: url("../images/desired-background.png");
     list-style-position: inside;
   }

これを

@media print {
}

ブロックでは、背景画像としてレンダリングされた画面上の透明な白のロゴを、印刷用の透明な黒のロゴに置き換えることができます。


これはかわいい修正ですが、背景画像がコンテナよりもはるかに大きい場合は実際には機能しません。(それは私の含まれているdivを伸ばします)
Jabbamonkey '30 / 10/30

-1

あなたはそのようないくつかのトリックを行うことができます:

<style>
    @page {
        size: 21cm 29.7cm;
        size: landscape
        /*margin: 30mm 45mm 30mm 45mm;*/

    }
    .whater{
        opacity: 0.05;
        height: 100%;
        width: 100%;
        position: absolute;
        z-index: 9999;
    }
</style>

本文タグ内:

<img src="YOUR IMAGE URL" class="whater"/>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.