Tarayıcıları CSS'de arka plan resimleri yazdırmaya nasıl zorlayabilirim?


104

Bu soru daha önce sorulmuştu ancak çözüm benim durumumda geçerli değil. Sayfanın ayrılmaz bir parçası oldukları için belirli arka plan resimlerinin yazdırıldığından emin olmak istiyorum. (CSS sprite olarak kullanılan birkaçı olduğundan, doğrudan sayfadaki resimler değildir.)

Aynı soruyla ilgili başka bir çözüm, list-style-imageyalnızca her simge için farklı bir görüntünüz varsa işe yarayan, CSS sprite mümkün olmayan kullanılmasını önerir .

Satır içi simgelerle ayrı bir sayfa oluşturmanın yanı sıra, başka bir çözüm var mı?

Yanıtlar:


51

Bir tarayıcının yazdırma yöntemleri üzerinde çok az kontrole sahipsiniz. En fazla TAVSİYE edebilirsiniz, ancak tarayıcının yazdırma ayarlarında "arka plan resimleri yazdırma" varsa, sayfanızı yeniden yazmadan arka plan görüntülerini diğer içeriğin arkasında olan kayan "ön plan" görüntülerine dönüştürmek için yapabileceğiniz hiçbir şey yoktur.


212

Chrome ve Safari ile -webkit-print-color-adjust: exact;arka plan rengini ve / veya resmini yazdırmaya zorlamak için CSS stilini öğeye ekleyebilirsiniz.


4
Bu harika. Phantomjs kullanıcıları / webkit için hayatı çok daha kolaylaştırır
Jason

1
@MuneemHabib IE'de çalışmıyor, aslında desteklenen tek tarayıcı Chrome: developer.mozilla.org/en-US/docs/Web/CSS/…
Marco Bettiolo

Neyse ki bu durumda ben sadece destek wekkit için gerekli krom için hile ... ... yaptığını
Davy

2
@DisgruntledGoat, sorunumu hızla çözdüğü için bunu doğru yanıt olacak şekilde güncellemelidir (işteki projem yalnızca Chrome'a ​​odaklanır). Açıkçası tüm tarayıcılarda çalışmaz, ancak ne olursa olsun önceden bilinmesi gerekir.
Brett84c

1
@ Brett84c: Tek bir tarayıcı çözümü olduğu için katılmıyorum.
Kukeltje

86

Tarayıcıların varsayılan olarak arka plan renkleri ve resimleri yazdırma seçenekleri kapalı. Bunu atlamak için CSS'ye bazı satırlar ekleyebilirsiniz. Sadece ekle:

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

ya iyi çalışıyor ancak mozilla markası standart dışı. Bu özellik standart değildir ve standart bir yolda değildir. Web'e bakan üretim sitelerinde kullanmayın: her kullanıcı için çalışmayacaktır. Uygulamalar arasında büyük uyumsuzluklar da olabilir ve gelecekte davranış değişebilir.
Qh0stM4N

3
Neden !importantgerekli?

Benim için çalıştı! Teşekkür ederim.
Nick Woodhams

color-adjustne yazık ki FireFox tarafından düzgün şekilde desteklenmiyor. Görünüşe göre colorcss özelliğine değil, yalnızca arka plana uygulanıyor . Çok fazla etkinlik veya oy olmaksızın bir hata olarak rapor edilir . Yazı tipi rengi korunmazsa arka planı tutmak oldukça işe yaramaz ve okunamaz olmasına neden olur.
Frédéric

Bu iyi bir çözüm. IE11 ile çalışmadığını unutmayın (biliyorum!).
Rafael S. Fijalkowski

76

Arka plan resmini CSS ile yazdırmanın bir yolunu buldum. Arka planınızın nasıl düzenlendiğine biraz bağlı, ancak uygulamam için işe yarıyor gibi görünüyor.

Esasen, @media printstil sayfanızın sonuna eklersiniz ve gövde arka planını biraz değiştirirsiniz.

Örneğin, mevcut CSS'niz şöyle görünüyorsa:

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

Stil sayfanızın sonuna şunları eklersiniz:

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

Bu, görüntüyü vücuda "ön plan" görüntüsü olarak ekler ve böylece yazdırılabilir hale getirir. z-indexDoğru yapmak için bazı ek CSS eklemeniz gerekebilir . Ancak yine, sayfanızın düzenine bağlı.

Baskı görünümünde görünecek bir başlık resmi alamadığımda bu benim için çalıştı.


3
Bu, yapmam gereken şey için harika bir çözümdü, bu da bir inline <img>(RWD için) için farklı bir tane ile geçiş yapmaktı @media print. Web görüntüsü koyu bir arka plan üzerindeydi, bu yüzden bu görüntüyü beyaz kağıda yazdırmak işe yaramadı ve kullanıcıları başlığa koyu bir arka plan yazdırmaya zorlamak istemedim. Mükemmel!
JHogue

@JHogue - Teşekkürler! Sana yardım etmesine sevindim.
ckpepper02

4
Bu "doğru" bir cevap olmasa da. Kabul edilen cevaptan çok FAR daha faydalıdır.
Xenology

cevabın altında stackoverflow.com/a/15208258/915865 daha iyi bir açıklaması olduğu için işaretlenmelidir, imho
Kat Lim Ruiz

1
Firefox'ta, yalnızca içindeki içeriği kullandıysanız işe yaradı: önce like @
hanz

18

Aşağıdaki kod benim için iyi çalışıyor (en azından Chrome için).

Ayrıca bazı kenar boşluğu ve sayfa yönlendirme kontrolleri ekledim. (Dikey, yatay)

<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

Önemli özniteliğini kullandığınızdan emin olun. Bu, stillerinizin yazdırıldığında korunma olasılığını önemli ölçüde artırır.

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

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

Bu yöntemi kullanarak şirketim için bazı basit "yazıcı dostu" raporlar oluşturdum. OS X Chrome / Safari ve Windows 8 Chrome / IE'de çalışır (diğer platformları denememiştir).
fındık-n-bira

3
Bunun Mac'teki Chrome, Firefox ve Safari üzerinde hiçbir etkisi olmadığı görülüyor.
intcreator

Bu, özniteliği o öğenin her kullanımına uygulamak için ihtiyacım olan şeydi ve belgeyi uygun şekilde yazdırmama izin ver. Teşekkürler!
johnny

7

@ Ckpepper02'nin dediği gibi, gövde içeriği: url seçeneği iyi çalışıyor. Bununla birlikte, biraz değiştirirseniz,: before sözde öğesini kullanarak bir tür başlık görüntüsü eklemek için aşağıdaki gibi kullanabileceğinizi buldum.

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

Bu, resmi sayfanın üst kısmına kaydıracak ve benim sınırlı testime göre Chrome ve IE9'da çalışıyor

-hanz


5

Psuedo elemanlarını kullanın. Pek çok tarayıcı arka plan resimlerini göz ardı ederken, içeriği bir resme ayarlanmış psuedo öğeleri teknik olarak arka plan resimleri DEĞİLDİR. Ardından, arka plan görüntüsünü kabaca görüntünün gitmesi gereken yere konumlandırabilirsiniz (orijinal görüntü kadar kolay veya kesin olmasa da).

Bunun bir dezavantajı, bunun Chrome'da çalışması için, bu davranışı yazdırma medyası sorgunuzun dışında belirtmeniz ve ardından yazdırma medyası sorgu bloğunda görünür yapmanız gerektiğidir. Yani, bunun gibi bir şey ...

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

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

Dezavantajı, görüntünün genellikle normal sayfa yüklemelerinde indirilerek gereksiz yığınlar eklenmesidir. Orijinal, görünür resim için zaten kullandığınız resmi / yolu kullanarak bundan kaçınabilirsiniz.


1

Arka plan resmine! önemli öznitelik eklediğinizde google chrome'da çalışıyor, önce öznitelik eklediğinizden emin olun ve tekrar deneyin, bunu böyle yapabilirsiniz

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

}


bahsetmek için güzel bir nokta, sorunumu -webkit-print-color-ayar ile birlikte çözdüm: tam! önemli;
czmarc

0

Sabit renkler için kenarlıkları kullanabilirsiniz.

 borderTop: solid 15px black;

ve gradyan arka planı için şunları kullanabilirsiniz:

    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 , bir arka plan görüntüsü yerine özel bir madde işareti kullanarak zarif bir çözüm önerir:

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

Bunu bir

@media print {
}

bloke ediyorsanız, ekranda arka plan resmi olarak oluşturulmuş şeffaf üzeri beyaz bir logoyu baskı için şeffaf üzeri siyah logo ile değiştirebiliyorum.


Bu sevimli bir düzeltmedir, ancak arka plan görüntüsü kaptan çok daha büyükse gerçekten işe yaramaz. (içerdiği
div'i uzatır

-1

Bunun gibi bazı numaralar yapabilirsiniz:

<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>

Gövde etiketinde:

<img src="YOUR IMAGE URL" class="whater"/>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.