REDLINE MAGAZINE | 印刷用CSSのお話REDLINE MAGAZINEトップページへ

すべてのエントリを見る

印刷用CSSのお話

最近担当したサイトでは印刷用CSSをたいがいセットにしてます。同業者の方だと経験あるかもしれないですが、昔の鬼級テーブルレイアウトの頃は言われた事なかったんですがCSSを使い始めてから「背景が印刷できない」と、よく言われました。「ブラウザの設定で『背景も印刷する』にチェック入れると出てきますよー。デフォルトではインク節約仕様になってるんすねー(嘘かホントかは知らない)あはははー」とか返してました。

デフォルトの状態で印刷できないってのは問題あるだろってのはもちろんちゃんと分かってたんですよ。ここは背景扱いにしたらデフォ状態で印刷したらエラい事になるぞ、とか使い所の選別はしてましたし。まぁでも「あなた、なんでもかんでも画像化するの大好きなクセに検索対策っ!検索対策っ!さっさと検索対策~!って言うじゃん」とか鬱憤も溜まってました。

印刷用のCSSを用意するようになってからは背景画像についてはあまり言われなくなりました。「印刷した時はちゃんと別表示になるねんなー」とかは言われますけど「ええ、うちは印刷用にも最適化してますから(ビシッと)」と胸をはって答えてます。「最適化」という言葉は非常にいい言葉ですね。言い方が悪いかもしれませんが「便利な言葉」だなーと。言う方も言われた方も「いい事してる」気持ちになります(多分)。今のところ印刷用CSSを用意しているサイトで「やっぱり見たまま印刷したい」とはまだ言われたことないです。言われたら少々やっかいだな・・・とは思います。いろんな意味で。

ということで今回は印刷用CSSに関してこんなん考えてますっていうお話でも書こうかな、と。前置き長くてすいません。

印刷用CSSの用意

とりあえずこんな感じで準備してます。

準備

印刷用CSSを書き始めた頃は、スクリーン用に内容を追加した後、印刷用CSSファイルへ移動して中身に不都合ないかと逐一行ったり来たりしてプレビューチェックしていたんですが、これはどうも個人的には効率悪かったです。

今はまずはスクリーン用を一通り完成させて、そのファイルを複製、中身を見ながら完全に消すものはdisplay:none組、幅やフォント周りだけ整理する組、背景画像絡んでる組、コーディング時に予めメモっておいた「ここは何か注意せよ」というイレギュラー組に分類してから細かい部分の確認をしてます。

紙ベースになった時にいらないものは原則として消す

ナビゲーション等、ブラウザの中でしか意味のないものは基本的には全部非表示にしてます。例えばヘッダ + 左ナビ + 右コンテンツ + フッタの定番レイアウトならメインで残すのは基本的には右コンテンツのみ、みたいな感じ。

予め印刷時のみ表示させるものをhtmlに入れておく

背景として扱ってるけど、印刷時にはこれも必ず入れたいっていうものはhtmlをコーディングする際、class="print"みたいな感じで印刷の時だけ表示させるためのclassを振った要素を入れてます。普通にブラウザで見るときは必要ないのでスクリーン用のCSSではそのclassの振ってある要素は非表示に。

画像置換してる部分とか、コレを入れておかないといろいろと不都合があるケースもあるので後から入れていくのは大変なんですが、予めそのつもりでコーディングしてるとそんなに手間も掛からず楽です。

フッタ部分に社名や所在地・連絡先なんかを入れるデザインが多いんですが、それ以外にフッタリンクや関連情報へのリンク、その他モロモロ何かを入れる際なんかに、フッタの中で「これは印刷に含める・・・これはいらない・・・」とか考えなくても済むように、必要なもの(ロゴ、社名、連絡先等)だけを一枚絵にした画像を用意しておいてclass="print"を振ったimg要素でフッタの直前なり後なりに入れておいて、印刷用CSSではフッタは丸ごと非表示にすれば印刷用CSSのソースもスッキリしますし、早いです。どのページを印刷してもこれが入ってるページは必ずページの最後に連絡先等が入った画像が印刷されてなんか整った感じになります。ちょっと小奇麗な枠とかで括っておくといい感じ。

左上にロゴがあるようなデザインで、画像置換とかする場合なら、それが正規のロゴならば必ずこれは入れてます。なんか、正規のロゴがないような会社さんもあるのでね。「特に決まったロゴとかないねん。なんか適当に作ってー」みたいに言われる事も個人的には多いです。そんな場合はテキストのみで社名が入るようにしてます。後から正式なロゴがもし出来た場合に印刷物なんかにその正規ロゴが載ってるのにサイト印刷したら違うロゴが出てきたーみたいなのは嫌なので。後からそのロゴと差し替えればいいんですが、意外とサイト制作者に「ロゴ出来たよー」という連絡が来るのは遅いです。存在忘れられてます。連絡が来たと思ってもサイトのデザインイメージと全然合わないものだったりして切なくなった事もあります・・・。

あまりインクを使わずに済むように

私自身がセコいので印刷してインク使いまくるのはあまり好きではないです。なのでなるべくインクを使わないように単なる背景とかは特別な場合を除いて全部カットしてます。

後から追加したスタイル部分も忘れず確認する

スクリーン用のスタイルでサイト公開当初にはなかったけど後から追加したスタイルに対しての印刷用のスタイル設定。これ、しょっちゅう忘れて後からこっそり追加してます><

後から追加したって印刷スタイルに影響ないケースも多いんですが、イレギュラーなケースで「あれ?」ってなってたり、テキストカラーやサイズでちょっと見た目的にも強調したい部分でせっかくスクリーン用には指定してるのに印刷用には書き忘れてたりして。

別に印刷時にそのスタイルがないからって情報が見れないわけではないんですが、「せっかくなので印刷用も最後まで面倒みてあげようよ」っていう心意気を忘れないようにしてます。

その他、こんなん考えますーっていう話も書いてみますね。

リンク先のURLも印刷する

もうコレは至る所で目にするお話なんですが、a要素のhref属性の値も印刷時にはちゃんと印刷させるという定番ネタ。こういうのはガンガン活用すべきなんだろうけど、個人的には今の所はおまけ的な扱いにしてます。理由は後述。基本はこんな感じ。

a[href]:after {
	content: " ("attr(href)") ";
	}

リンクテキストの後ろに(http://redline.hippy.jp/)みたいな感じでリンク先が入るという内容。

注意してるのはこんな点

このままだと普通に手動でコーディングしてるサイトだとちょっと面倒な事があるので注意してます。

例えばこのブログみたいにブログツールを利用して各リンクを設定してるケースなんかでは全部のhref属性に絶対パスを入れる手間も掛からないし、この書き方だけで十分使えると思ってます。

だけど、普通のサイトで手作業でサイト内リンクを指定してる場合(テンプレ使えよとかは別の話として)たいがい相対パスで繋ぐじゃないですか。その場合、上の書き方のままだとサイト内リンクは「なんたらかんたら(../test/index.html)」みたいな表記になってしまう。それだと印刷したユーザーにとったら意味不明で親切設計のつもりが逆に「なんだこれは」状態になってしまいますよね。

なんか随分前に、この相対パスをどしてくれようと考えてて

a[href^="/"]:after{
 	content:"(http://redline.hippy.jp"attr(href)")";
	}

こんなんも考えたこともあったんですが、チマチマと「/」から始まる絶対パスに置き換えるなんて労力が半端ないので却下。結論として印刷時にリンク先のURLを記載したい部分にはclassをつける事にしてます。例えば外部サイトへのリンクはこんな感じ。

a.exlink[href]:after {
	content: " ("attr(href)") ";
	}

外部リンクに.exlinkっていうclassを指定してそのclassが指定されてるa要素のhref属性は印刷時に表示するという感じ。んでもってここには書いてないけど外部サイトへのリンクは別窓で開くことが多いので「別窓開きますよ」アイコンの指定も合わせてしてたり。(最初からリンクテキストにURLも書けばいいじゃんとか言われたら元も子もないんですが)

同サイト内での使い道

同サイト内でのリンクでもここは絶対記載したいなーっていうa要素にはclassを指定してそこだけ絶対パスでhref属性を書いたりもしてます。何かの申込書PDFファイルへのリンクとか、トップページの更新情報とかで「新製品○○○が発売になりましたー」とか書いててリンクテキストになってるならそういう所に詳細ページへのurl入れるといい感じかもです。情報の詳細ページじゃなくてわざわざトップページを印刷しようというユーザーはあまりいないかもしれないですが。

あと、これまた印刷するユーザーはほとんどいないと思いますが、一応念のためサイトマップのコンテンツは絶対パスで各ページへのリンクを設定してたりもします。もう一度言いますがサイトマップのページを印刷するユーザーはほとんどいないとは思いますけどね。

ただ、これって私みたいに小中規模のサイト制作がメインだからできる事なのかもしんないです。規模が大きなサイトだと後々把握というか管理とか大変そうだな、とは思います。システムがソース吐くから逆に楽なんだぜとかいうのもあるのかもしれませんが。

IE6、IE7では無理

ご存知の通り、CSSの力だけではIEさんではバージョン8でしか利用できません。IE6さんならともかく、IE7さんでなんとかなるとおもいきや、擬似要素は未サポートというオチで使えないのであります。ということで困った時のjQueryを使うという手もあります。

$(document).ready(function(){
	var Href = $("a.exlink").attr("href");
	$("a.exlink").after("(" , Href , ")");
})

jQueryでなんとかする場合は上のCSSと併記するとモダンブラウザでは2回urlが出てくる事になるのでCSSの方はコメント化しておくなりなんなりして適応されない状態にする必要があります。またJS無効だと使えません。そして当然印刷時だけじゃなくてスクリーンにもURL部分が出てきます。だったら最初からリンクテキストにurl含めてればいいじゃんって話になりますね。はい。

なのでこれは上に書いたとおり、おまけ的な存在として用意しています。個人的には印刷時にURLがあったらいいなって思う部分はURLもリンクテキスト内に併記したらいいじゃんって思うケースも多いんですが、クライアントさんは「URLは消して」と言われる方が多いです。

ということで、IEユーザーの皆さん、早くバージョン8を使ってください><

page-break-beforeって結構使える子だよね?

最近page-break-beforeって結構使える子だよね?と時々思ってます。page-break-beforeはその要素の直前で改ページを制御するためのプロパティです。

page-break-before プロパティ - TAG index Webサイト

プロパティ自体は各ブラウザで使えるんですが、値だけ使える値と使えない値があるので注意が必要。と言っても私は「always(直前で改ページさせる)」しか使ったことないので、何の問題もないんですが。禁止したい時ってどんな時なんだろうな。つーか禁止したらどういう風になるのかなぁ。紙なかったら禁止しても改ページせざるを得ないのではとか、うまい具合に適当な場所で改ページするの?とか、なんか疑問に思ってきたので後で調べる。おもしろい結果になったらまた追記します。

使い道はこんなところ

多分、こういう改ページとかってホントはユーザーの環境を無理やり制作側でコントロールしようとしない方がいいとは思ってるんですが、せっかく印刷してもらうならキレイな文書として保存してほしいなとか思うわけです。

図・例えばこういうデザイン

例えばタイトルがあってその下に表があるようなページ。もうちょい具体的に言うと「○○価格表一覧」というタイトルがあってその下に価格表があるようなページって手元に残すとしたらタイトル部分から印刷できたらいいのになとか思うのですよ。
おそらくそのタイトルの上にちょこっと載ってる「当店では常に地域最安値をなんたらかんたら・・・ご来店をお待ちしています。」とかいうテキストとか「写真はイメージです」的な画像はホントはいらんでしょうし。

印刷専用ページ作ればいいじゃんとかいう説もあるんですが、ソースの再利用を前提に考えるとpage-break-beforeを利用するのが一番効率いいかな、と。

(CSS)
#sample{
	page-break-before:always;
	}

(HTML)
<h3 id="sample">○○価格表一覧</h3>

こうしておくとその部分から改ページされてタイトルが用紙の頭にきてくれる。もしも印刷プレビューをしてから印刷する習慣がついてるユーザーだったらちょっぴりハッピーになれるかもしれません。「あ、2ページ目だけ印刷すればいいやー」みたいな。

私的な使い方

これは個人的な話なんですが、私は技術系のサイトでソースが掲載されてたりするブログ等は印刷してじっくり調べながら随時書き込みしたりして熟読する事が多いんです。(特に英語サイト><)

モニタでコメントをざっと確認して今回はコメントの印刷はしなくていいやって場合はその直前までのページまでを印刷指定したりしてインクをケチってます。ほんとに英語サイトは「Nice!」とか「thank you」とか一言コメントが何十件も並んでる場合が多くて「用紙いっぱい使ってると思ったら後半ほとんど thank you コメントやーん」みたいな。

そういう時にFirebugでコメント部分の先頭の要素に「style="page-break-before:always"」とか指定してからコメントの前のページまでを指定印刷とかやってます。ひっそりこっそり。

別にエントリ本文の続きでコメントの先頭の一部が入ったままキリのいい所までをページ指定しても残りは印刷しないようにしてもいいんですけど、一定期間はファイリングとかして保存しているのでなんか・・・ちょっとだけ入って残りはカットとか・・・あぁ、私が神経質すぎるのか。

<< カラム落ちとか自分のコーディングとかの話 | CSS 画像の一部を使う3つの方法 >>

トラックバック

このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/243

コメント (11)

印刷用にcssを作成する際はとにかく消去、消去の考え方でやってます。グローバルナビ、左メニュー、背景画像、などなど。

ページの要素としていらないものは消すばっかり。

情報整理ってものを念頭にしています。
リンク先は付けていないですね~。

これからは考慮します。

>painkillerさん、こんにちわー。
コメントありがとうございました。
私もpainkillerさんと同じく基本は非表示非表示・・・ですね。最近は記事に書いてたみたいに印刷時専用の要素を予めコーディングでいれておくことでかなり楽になりました。印刷用に非表示にする際も大枠ごとがっさり非表示にして印刷に必要にものだけ代替として表示させると時間もかからないし、印刷用CSSがすっきりするのが嬉しいです(n'∀')η

はじめましてー。

印刷用だと、モノクロモノクロっていうのも、よくやります。 画像以外は結構白黒にしてしまったり・・・。
でも、僕の周囲では見たままを印刷したいっていう要望の方が多い気もします・・・。

>SKさん
はじめまして。コメントありがとうございました(n'∀')η
返信遅くてすみません・・・。

>モノクロモノクロ
あーなんかそれわかりますw
それはそれで結構整っててキレイですよね。

>僕の周囲では見たままを印刷したいっていう要望の方が多い気もします・・・。
ふむふむ。印刷する側の環境にも左右されるので結構大変ですよね・・・。本気で100%完璧に見たまま、というならスクリーン用の内容を印刷CSSで全部非表示にして、印刷時だけ表示されるようにページ全体をキャプチャ画像1枚にして入れておくというのが実は一番楽で安全なのかも、とか一瞬思ってしまいました。。。印刷用のページを別に作ったとしても普通にブラウザの「印刷」メニューで印刷しちゃう人も多い気がしますし・・・。

はじめまして。こんにちわ。

>印刷時だけ表示されるようにページ全体をキャプチャ画像1枚にして入れておくというのが実は一番楽で安全なのかも、とか一瞬思ってしまいました。。。

このやり方って定期的に更新が入るページの場合、その都度画像の修正が必要ということになりません?

ティザーサイトみたいなところで、尚且つ修正がなければいいかもしれませんね!

>通りすがりさん
コメントありがとうございました。
>定期的に更新が入るページの場合、その都度画像の修正が必要ということになりません?
そうなんですよねー。それが困るんですよね。何か手間も予算も掛からずに常に完璧な見たままの状態で印刷できる方法があれば楽なんですが・・・。

>ティザーサイトみたいなところで、尚且つ修正がなければいいかもしれませんね!
そうですねー。使い道としてはその辺りか、年に1回更新するかしないか、みたいなページも自分が担当しているサイトでは存在するので、そういったページではいいかもとは思いました。(見たまま印刷したいよ!と言われた場合は、ですが)

お久しぶりです。

クライアントさんからの印刷したい要望って、

1.このページの情報が欲しいユーザーのため
2.このページの校正をするため大学の先生にプリントアウトして見せにいきたいから

と、目的がバラバラなんですよね。
1.の場合はブラウザでは必要で、印刷時には不要だと思われるヘッダーの細かいパーツやフッターリンクとか非表示でいいんですが、

2.の場合、ナビゲーションで文言変更してほしいのに紙に写ってないとか、フッターリンクの修正が言えないじゃないかとか、ここの別窓アイコンの画像が消えてますとかツッコまれるんですよね。

印刷用にパーツを作っていても、
コンテンツ名がコロコロ変わると全部見えてない印刷用の分も変更しなきゃいけないし、
自分でやれる分はいいんですが、
下の子に修正を任せてしまってるとき、
下の子は印刷用も直さないといけないコトに気付いてなかったり、納品直前に発覚して結局自分だけテンパったり・・・

その日々ですね。。。^^;

でもこのドタバタを落ち着けようとガイドラインやルール決めしたところで、そんなに効力発揮しないんですよね、例外例外で。
このへんのケースbyケースの事情やお客さんの我侭も、経験と知恵をしぼって、コツコツサイトを納品に導いていくのがディレクタの仕事なんだな、て思います^^
そこがカンタンになったら、きっと面白くないんですよね。

>あやーんさん、こんにちわー。
お久しぶりですねー。リニューアルお疲れ様でした(何)

そういう意味での校正用って自分で用意したキャプチャ送ることもありますよ。最初に「最終的にユーザーが印刷するのは必要な情報のみになるようにする」って伝えておくので見た目の面での修正や要望用にページ毎にメール添付で送る、みたいな。(最終納品の時に一式送るので制作中は同じフォーマットなら全ページは送らないけど。)

そういえば最近テキスト原稿の修正に関してはファックスで送ってくる人、私の受け持ちではいなくなったなぁとか、ふと思いました。みんなメールでコピーペーストで「ここをこうして」みたいな感じの指定が多いっすね。ファックスにトルツメとかかかれてたり、文字潰れで「え?何?なんて書いてあるん?」みたいなケースに最近出会わなくて助かってます。その方がいろいろと安全やんね。証拠も残るし(何w)

>ここの別窓アイコンの画像が消えてますとかツッコまれるんですよね。
これって相手がブラウザの設定で背景印刷しないにしてる件ですか?これ昔よく言われた記憶あります。そんな時こそimgで入れておいて印刷時以外は消すclassですよ(n'∀')η

>下の子に修正を任せてしまってるとき、
あーそれありますね。複数でやるときのルール決めは口で言うぶんにはいいんだけど、それを文書にまとめる作業、時間かかってしんどいですよね(汗
口で言ったら後で「あ。忘れてました」、文書送っても「あ。よく読んでませんでした」とか平気で言う人、身近にいますけどね。どうよ、それ。イレギュラーは必ず連絡してって言ってるのに、例外の報告すらしませんからね、どうよ、それ。あやーんさんの所みたいに優秀なスタッフの方々がいる環境、すごい羨ましいっす。。。

以前にもお世話になったmon-juです。このコーナーとは全く関係が無い話(お願い)ですみません。ここのサイトを支援しているのですが、http://members3.jcom.home.ne.jp/haru.yu/maruyamaclass.html上部に有る画像が変わる部分でIEだけに白い点が出ます。気がつかない部分もありますが、黒いところにはっきり判るかなり明るい白い点が出現します。スピードを変えてみましたが改善されません。画像ファイルの形式も変えてみましたがだめでした。お時間のある時に見て頂いて、もし、ヒントになるようなことがあったら教えて頂けないでしょうか?他のサイトにも同じ問題がありましたのでフラッシュで同様のものを創って問題はある程度回避出来ているのですが、このjsもかなり気に入っていて使って行きたいと思っています。どこか基本的なことが抜け落ちているようでお恥ずかしいのですがよろしくお願い致します。

>mon-juさん、こんにちわ。

白い点っていうのがどの部分なのか、間違ってるかもしれないんですが、例えば「Boo」って書いてある文字のすぐ下辺りに出る点ってことでしょうか?確かにFxでは出てこないけどIEだと6でも7でも8でも出てきますね。画像単体をブラウザでプレビューすると出てこないんですね。なんだ、これは。。

ソースも問題なさそうですし、試しに白い点が見えやすいliを一番上に持ってきたら、最初の時点では白い点は出ませんね。で、フェードし始めると点が出てくる・・・みたいな。ということはやっぱりfade自体に何かIEと相性悪い何かがあるのかなーということで、他のshuffleなんかの動きに変更してみたら白い点、出ませんね。そういえば前に私もCycle Pluginを試した時、IEでだけfadeが何か変な事になった記憶がありました。

代替案ですが、jQueryのプラグインでフェード効果を利用したいなら、
http://www.gruppo4.com/~tobia/cross-slide.shtml
このプラグインを利用されてはいかがでしょうか?同じようなfade効果が得られるんですが、スピードやフェード時間の設定もカンタンですよん。


本当にありがとうございます。丁寧で私レベルでも判りやすいお知らせの内容、重ねて感謝し致します。ぜんぶ、試してみて、あらためてお知らせ致します。先ずは御礼まで。このコーナーの印刷に関する懸案は実は現在進行中で頭を抱えていることが在ります、甘えてばかりいられないので私なりに調べて、降参した時点でお願いするかもしれません、その時はよろしくお願いします。何のお礼も出来なくて恐縮しています、年齢だけはもうすぐ還暦ですので、その辺に『利用価値』が万が一在れば何でもおたずねください、流通に関するシンクタンク的な知識は今でも通用する部分が在るようですが『時代は変わる』で『タミフル』のような効果が臨めるかどうかは怪しいかぎりです。長くなりましたが取り急ぎ重ねて御礼まで。




※コメント欄に「<」「>」等を含むソースを記載する場合は実体参照に変換してください。

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。