2011-06-13 14 views
5

मेरे पास एक वेब एप्लिकेशन है जो प्रिंटर से बाहर आने पर पृष्ठ को कैसा दिखता है, यह नियंत्रित करने के लिए एक अलग print stylesheet का उपयोग करता है। यह आश्चर्यजनक रूप से काम कर रहा था जब तक कि मैंने हाल ही में साइट पर कुछ जावास्क्रिप्ट एन्हांसमेंट नहीं किए। इन एन्हांसमेंट्स में से एक उपयोगकर्ता को पेज हेडर और नेविगेशन, साथ ही टेबल हेडर को फ्रीज करने की अनुमति देता है। इसके पीछे जावास्क्रिप्ट स्क्रीन पर तत्वों को फ्रीज करने के लिए कुछ सीएसएस चालबाजी करता है। दुर्भाग्यवश, मेरे शीर्षलेख पर position: fixed लागू करना (उदाहरण के लिए) इसे प्रत्येक पृष्ठ पर प्रिंट करने का कारण बनता है, और यह वांछित प्रभाव नहीं है। प्रिंट शैली को प्रभावित किए बिना क्लाइंट-साइड पर तत्व शैलियों को ट्विक करने के लिए मैं जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं?प्रिंट स्टाइल को प्रभावित किए बिना प्रदर्शन शैलियों (सीएसएस) को बदलने के लिए जावास्क्रिप्ट का उपयोग करें

@media print { #foo { color: blue; } }    /* Print definition */ 
@media screen { #foo { color: green; } }    /* Display definition */ 
document.getElementById('foo').style.color = 'red'; /* Overrides both! */ 
+0

नोट: जावास्क्रिप्ट के साथ मैं कई शैलियों को बदलता हूं, वे सीएसएस प्रिंट फ़ाइल में भी सेट नहीं होते हैं। आदर्श रूप से, मेरे पास जावास्क्रिप्ट में * केवल प्रदर्शन * शैलियों को बदलने का एक तरीका होगा। '! महत्वपूर्ण' के साथ सीएसएस प्रिंट फ़ाइल में सभी जेएस tweaks मैन्युअल रूप से ओवरराइड करने के लिए वास्तव में एक समाधान नहीं है। –

उत्तर

1

कोई अच्छा समाधान नहीं! क्या मैं कर (मैं यहाँ स्थिति में हूँ कि हम केवल IE उपयोगकर्ताओं है) IE में onbeforeprint और onafterprint कार्यों का उपयोग कर रहा है "नरम कर देना" और "refreeze" तत्वों को समाप्त ...

window.onbeforeprint = function() { 
    document.getElementById('foo').style.position = 'static'; 
} 

window.onload = window.onafterprint = function() { 
    var el = document.getElementById('foo'); 
    // Get element position and size 
    // Set left/top/width/height properties 
    // Set position to fixed 
    el.style.position = 'fixed'; 
} 
+0

[html5shiv] (http://code.google.com/p/html5shiv/) IE के पुराने संस्करणों में HTML5 तत्वों को प्रिंट करने के लिए समर्थन सक्षम करने के समान कुछ करता है। तो, तकनीक मजबूत है। – thirtydot

3

अपने प्रिंट नियमों में !important जोड़ें।

+0

हू? वह कुछ भी नहीं करने जा रहा है। मैं अपने सीएसएस नियमों में 'स्थिति' (या अन्य चीजों में से कोई भी जावास्क्रिप्ट के साथ tweaking) सेट भी नहीं है। –

+0

मुझे लगता है कि इसका मतलब है कि मुझे जावास्क्रिप्ट के साथ हर शैली को ओवरराइड करना होगा? मैं देख सकता हूं कि वह कहां जा रहा है!तो अगले साल जब मुझे जावास्क्रिप्ट को बदलना है तो मैं सीएसएस ओवरराइड को बदलना भूल जाऊंगा ... यूग-लीई –

+0

वैसे, मैंने इसे जोड़ने की कोशिश की और प्रिंट पर निश्चित स्थिति से बचने के लिए 'स्थिति: स्थिर! महत्वपूर्ण' सेट किया, और अब यह आईई को हर बार क्रैश करता है जब मैं प्रिंट या पूर्वावलोकन करने की कोशिश करता हूं! –

1

आप इसे @media प्रिंट {#foo {color: blue! महत्वपूर्ण; }}

समस्या यह है कि जावास्क्रिप्ट। स्टाइल.something, तत्व के इनलाइन सीएसएस को संपादित करता है, इसलिए यह सामान्य सीएसएस वर्ग/आईडी नियमों को ओवरराइड करेगा।

या आप कक्षाओं के साथ काम कर सकते हैं। document.getElementById ('foo')। ClassName = 'redText';

और अपनी नियमित सीएसएस फ़ाइल (प्रिंट एक नहीं) में .redText रखें, अपने प्रिंट सीएसएस को भरने से कहीं ज्यादा बेहतर! महत्वपूर्ण नियम।

+0

अधिक संपूर्ण उत्तर के लिए धन्यवाद। मुझे दुख है कि क्लीनर तरीका नहीं है, जैसे 'document.getElementById (' foo ')। DisplayStyle.color =' green '; ' –

+0

दुर्भाग्यवश ऐसा नहीं है, नहीं। लेकिन कक्षाओं के साथ काम करना वास्तव में बहुत साफ है। क्योंकि जब आप कुछ रख-रखाव करने के लिए बाद में वापस आते हैं तो आपको सीएसएस और सभी जेएस फाइल को संपादित करने के बजाय सीएसएस में सभी स्टाइल नियम मिलेंगे (जहां वे अर्थात् संबंधित हैं)। – Pantelis

+0

वास्तव में एक विकल्प नहीं है। यदि आप पृष्ठ पर किसी तत्व को जमा करने के बारे में सोचते हैं, तो आपको स्थिति को ठीक करना होगा, और उसके बाद अपने सटीक निर्देशांक को माता-पिता के भीतर सेट करना होगा। यदि इन तत्वों की सामग्री पृष्ठ से पृष्ठ में भिन्न होती है, तो आप अनुमान लगा सकते हैं कि यह आकार (यदि आप किसी भी प्रकार के प्रवाह लेआउट का उपयोग कर रहे हैं), तो परिवर्तन जावास्क्रिप्ट में गतिशील रूप से किए जाने चाहिए। मैं फँस गया हूँ। –

6
इसके बजाय इस के साथ अपने तत्वों पर गुणों को बदलने के

:

document.getElementById('foo').style.color = 'red'; 

एक नया <style> तत्व, उदाहरण के लिए संलग्न:

$('<style>@media screen { #foo { color: green; } }</style>').appendTo('head'); 

बेहतर होगा कि एक <style> में अपने सभी आवश्यक परिवर्तन को श्रेणीबद्ध करने के लिए यदि संभव हो तो तत्व।

+2

महान विचार। मैंने आईई 6, आईई 9, क्रोम और एफएफ 5 पर इसका परीक्षण किया है। –

0

उचित

@media screen { .freeze { position: fixed; } } /* Display-only definition */

+

0123: समाधान नोड्स पर शैलियों प्रहार करने के लिए नहीं है, लेकिन बजाय सीएसएस वर्गों के लिए अपनी स्क्रीन विशिष्ट शैली में तोड़ मरोड़ टाई है कि केवल बातों में से अपनी स्क्रीन गायन को प्रभावित है

बोनस के रूप में, यह जेएस की केवल एक पंक्ति के साथ कई शैलियों को बदलना आसान बनाता है, जो चीजों को तेज़ी से और बनाए रखने में आसान बनाता है।

संबंधित मुद्दे

 संबंधित मुद्दे