2009-04-28 12 views
8

Javascript(プルダウン)から変更する必要があるCSSプロパティ(フォント)があります。ただし、このフォントは印刷時にのみ使用してください(@media print)。メディア固有のCSSプロパティをJavascriptから変更する

したがって、javascriptは画面の表示にも影響するため、フォントの値を変更することはできません。フォントプロパティの印刷バージョンのみを変更する方法はありますか?

また、CSSプロパティを別のプロパティへの参照にする方法がありますか?

そのようにして、印刷CSSでは、font:printfontと画面CSS font:12と言うことができます。そして、printfontの値を変更すると、印刷時にのみフォントが変更されます。

ありがとうございました。

編集:要点は、プルダウンからドキュメントを印刷するフォントサイズを変更する必要がありますが、ドキュメントが表示されるフォントサイズを変更したくないということです。

答えて

2

はあなただけmyabe変更したり、あなたがそこに行くしている興味深いジレンマだJS

<p class="inrto comicSans">this is the text to change</p> 

@screen p.intro {font-family:verdana;} 

@print p.comicSans {font-family:comic-sans;} 
+0

私はこの提案を理解していません。私はUIの時間にフォント(サイズは問題ではない)を変更する必要があります。だから、私は、ユーザーがドロップダウンを使用してサイズを変更することができるようにし、印刷するときに、そのサイズを使用します。 –

+0

フォントサイズの大文字小文字の区別がある場合は、有限個のオプションがあると仮定します。それらを一連のクラスの値としてデリケートして、そのクラス名をbodyタグに適用します...上記で説明したのと同じ表記 .largeFont {font-size:1.5em;} .mediumFont {font-size: 1em:} これらのクラスをあなたの体に追加してください(もちろん、これは相対的で固定されていないと機能しません) – nickmorss

10

でアイテムにクラスを追加されて何をしたいのかのように思えます。私の頭の上から、私が考えることができる唯一のことはあなたのfont-sizeが!importantで宣言されているヘッダーに新しいタグを追加することです。たとえば、あなたの頭のタグでは:

<style type="text/css" media="print"> 

.printfont { 
    font-size: 16px !important; 
} 

</style> 

これにより、新しいフォントサイズが優先されます。

次はあなたがちょうどあなたがあなたのドロップダウンの属性としてのonchange =「changeMediaStyleを()」を持っていることを確認してくださいJavaScriptの

<script type="text/javascript"> 

    var inlineMediaStyle = null; 

    function changeMediaStyle() 
    { 
     var head = document.getElementsByTagName('head')[0]; 
     var newStyle = document.createElement('style'); 
     newStyle.setAttribute('type', 'text/css'); 
     newStyle.setAttribute('media', 'print'); 
     newStyle.appendChild(document.createTextNode('.printFont { font-size: 16px !important;}')); 

     if (inlineMediaStyle != null) 
     { 
      head.replaceChild(newStyle, inlineMediaStyle) 
     } 
     else 
     { 
      head.appendChild(newStyle); 
     } 
     inlineMediaStyle = newStyle; 
    } 

</script> 

でこれを達成できるかの非常に簡単な例です。また、私の例で免責事項として、私はメモリリークのようなものを考慮していないので、あなた自身でこれらの種類の問題を解決しなければなりません。

私の知る限り、本質的にCSS変数であることを宣言/使用する方法はありません。しかし、勧告はそれのためにそこに現在があります:http://disruptive-innovations.com/zoo/cssvariables/

+0

しかし、それをプルダウンのjavascriptからどのように変更できますか? –

+0

サーバーサイドに追加しないで、プルダウンからの最初の変更には、Javascriptを使用してDOMに追加し、参照を保持します。ユーザーが値(プルダウン)を再度変更した場合は、DOMから値を削除し、更新された値で再追加します。 –

+0

しかし、どのように@(ジャバスクリプトで)@ mediaプリントケースでのみプロパティを削除または追加するのですか? –

0

クラスベースのソリューションは完全にあなたにも使用することができ、仕事だろうがあなただけのクラスを切り替えるためにはJavaScriptを使用して、

@print { 
    .myPrintClass { font-family: serif; } 
} 
@screen { 
    .defaultClass { font-family: sans-serif; } 
} 
0

を持つことができますJavascriptを使用して、新しい<link>タグをページに動的に追加します。たとえば、あなたが持っている場合:

stylesheet1.css:

@print * {font-family:verdana;} 

stylesheet2を。CSS:あなたは、その後のような何かを行うにはjQueryを使用することができ

@print * {font-family:comicSans;} 

$(document.body).append("<link href='stylesheet2.css'/>"); 

(あなたもjQueryのせずにそれを行うことが、私はその構文を忘れて、それを調べるのが面倒だが、 - ))。

しかし、少量の変更しか行っていない場合は、単一のスタイルシートと別のクラスが適しています。新しい<link>タグソリューションは、さまざまなスタイル変更が発生した場合にのみ価値があります。

+0

私は現在、クラスベースのソリューションを使用しています。問題は、その場で値を変更できないということです! –

関連する問題