webページをユーザーが印刷する際、印刷対象となる要素を絞り込みたくなる場合があります。例えばメニュー、ヘッダー、フッター、サイドバーなどのwebページを便利にするためのパーツを隠してメインのコンテンツのみを印刷できるようにする、といった具合です。これを簡素なCSSで実装する方法を紹介します。
CSSの例が次です。#print-tgt
の部分には任意のセレクタを使えます。
@media print { *:not(#print-tgt):not(:has(#print-tgt)):not(#print-tgt *){ display: none; } }
印刷時にだけ表示を変更するために@media print
を使います。 @media print
は印刷時にだけ適用されるCSSルールを指定するためのものでwebページの通常表示には影響しません。
*:not(#print-tgt):not(:has(#print-tgt)):not(#print-tgt *)
というセレクタで、#print-tgt
というIDが付与された要素以外の全てを非表示にしています。
*:not(#print-tgt)
は#print-tgt
要素自体を非表示にしないようにします。*:not(:has(#print-tgt))
は、#print-tgt
を含む親要素が印刷対象から除外されるのを防ぎます。*:not(#print-tgt *)
は、#print-tgt
の子要素も印刷対象から除外されないようにしています。
このようにすると#print-tgt
で指定した要素とその中に含まれるコンテンツだけが印刷されるようにできます。このコードの特に便利な点は印刷対象要素のdisplay
のスタイルを壊さないところにあります。表とdivなどが混在していると個々のdisplay
を指定するのは難しいです。これを印刷対象の要素のスタイルを変えないことで回避しています。
例ではIDで指定していますが、特定の要素が指定できるならばセレクタは自由です。適宜#print-tgt
の部分を変えることで自由に使えます。