@media print 語法介紹在前兩天的文章中,我們完成了 Tool 3(每日用藥時間表生成器)的核心資料處理與 CRUD 互動。但別忘了,這項工具的核心使用對象可能是家中的長輩,或是習慣把紙本貼在冰箱上的使用者。
如果你直接在瀏覽器按 Ctrl + P(或 Cmd + P),往往會發現畫面上充滿了輸入框、新增按鈕、刪除的 ❌ 符號、甚至頁頭頁尾的網址,印出來既不好看又浪費墨水。
今天我們要透過 CSS 的 @media print 媒體查詢,搭配 JavaScript 自動帶入當日日期,讓網頁一鍵轉化為一張乾淨、專業且適合貼在冰箱或隨身攜帶的實體用藥時間表!
@media print 語法介紹在 CSS 中,我們習慣用 @media (max-width: 768px) 來處理手機與平板的響應式網頁(RWD)。同理,CSS 也提供了針對「列印裝置」的媒體查詢:@media print。
當瀏覽器觸發列印(如執行 window.print() 或按下列印快捷鍵)時,瀏覽器會自動載入並套用 @media print 區塊內的 CSS 樣式,蓋過預設的螢幕顯示樣式。
/style.css
/* 列印樣式 */
@media print {
.header, .tab-nav, .no-print, .btn, .form-grid {
display: none !important;
}
.tool-card {
display: block !important;
box-shadow: none;
padding: 0;
}
body {
background: white;
}
要將一個網頁打造成適合列印的紙本,主要有三大優化方向:
隱藏無關元素 (.no-print):
輸入框、表單標籤、新增/清空按鈕、單筆刪除的 ❌ 符號、頁腳說明等,都是「只有在螢幕操作時才需要,印出來會干擾視覺」的元素,一律設為 display: none !important;。
網頁佈局寬度轉化 (A4 / 滿頁化):
螢幕畫面的最大寬度(例如 max-width: 800px)或陰影效果(box-shadow)在紙本上會顯得古怪。列印時應將外層容器拉寬至 100%、消除外邊距(Margin),並隱藏邊框陰影。
極簡配色與黑白優化:
彩色的背景顏色會耗費大量墨水,且黑白印表機印出來可能變成一片慘灰。列印時應將網頁背景改為純白(#fff),文字強制設為深黑(#000),確保對比度最高。
以下是 Tool 3 完整整合四時段表格與列印優化後的 CSS 與 JavaScript 程式碼:
/components.css
/* --- Tool 3 四時段表格與列印專用樣式 --- */
/* 多選框排版 */
.checkbox-group {
display: flex;
gap: 15px;
flex-wrap: wrap;
padding: 8px 0;
}
.checkbox-group label {
font-weight: normal;
cursor: pointer;
display: flex;
align-items: center;
gap: 4px;
}
/* 4 時段表格樣式 */
.schedule-table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
background-color: var(--card-bg);
}
.schedule-table th {
background-color: var(--macaron-blue);
color: var(--text-main);
padding: 12px 8px;
text-align: center;
font-size: 0.95rem;
border: 1px solid #DEE2E6;
}
.schedule-table td.time-slot {
vertical-align: top;
padding: 10px;
border: 1px solid #DEE2E6;
min-height: 120px;
height: 150px; /* 固定高度保持表格美觀 */
background-color: #FAFAFA;
}
/* 表格內的藥品卡片小標籤 */
.med-chip {
background-color: #FFFFFF;
border-left: 4px solid var(--macaron-pink-dark);
padding: 6px 8px;
border-radius: 4px;
margin-bottom: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.05);
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.85rem;
}
.med-chip .med-info {
display: flex;
flex-direction: column;
}
.med-chip .med-qty {
font-size: 0.75rem;
color: var(--text-muted);
}
/* 列印專用抬頭 (平時不顯示) */
.print-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
padding-bottom: 5px;
border-bottom: 2px solid var(--text-main);
}
.print-date {
font-size: 0.9rem;
color: var(--text-muted);
font-weight: bold;
}
/* --- A4 紙張紙質列印優化 --- */
@media print {
/* 隱藏非列印元件 */
.header, .tab-nav, .no-print, .btn, .footer, .subtitle {
display: none !important;
}
body {
background: white !important;
color: black !important;
}
.tool-card {
box-shadow: none !important;
padding: 0 !important;
display: block !important;
}
/* 確保表格在紙張上呈現高品質邊框 */
.schedule-table th {
background-color: #F1F3F5 !important;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
.schedule-table td.time-slot {
height: 180px; /* 列印時加高方便填寫格 */
}
.med-chip {
border: 1px solid #CED4DA !important;
border-left: 4px solid #333 !important;
}
.btn-del {
display: none !important; /* 列印時隱藏刪除按鈕 */
}
}
/tool3-schedule.js
document.addEventListener("DOMContentLoaded", () => {
// 1. 自動帶入當日日期 (YYYY/MM/DD)
const dateSpan = document.getElementById("current-date-str");
if (dateSpan) {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0');
const day = String(today.getDate()).padStart(2, '0');
dateSpan.textContent = `${year}/${month}/${day}`;
}
// 2. 一鍵觸發列印按鈕
const btnPrint = document.getElementById("btn-print");
if (btnPrint) {
btnPrint.addEventListener("click", () => {
window.print(); // 呼叫瀏覽器原生列印視窗
});
}
});
.checkbox-group & .schedule-table)flex-wrap),在小螢幕自動換行,不會卡在一起。150px 高度且頂部對齊(vertical-align: top),不管有沒有藥品,格子大小都一模一樣,看起來乾淨俐落。.med-chip)border-left)與微陰影,讓藥品標籤更有立體卡片感。.print-header)@media print)display: none !important 一口氣隱藏按鈕、輸入框與頁尾,只留純藥品表格。print-color-adjust: exact,防止瀏覽器為了省墨水自動把表頭的質感灰底偷洗掉。180px,方便長輩印出來後還能拿筆手寫備註。今天我們運用了 CSS @media print 與 JavaScript window.print(),成功讓 Tool 3 從「螢幕上的網頁工具」跨足到「實體生活的紙本應用」。
好的 UI/UX 設計不應該只侷限於螢幕畫素上。針對健康醫療、銀髮族輔助這類網頁應用,考慮紙本輸出體驗往往是打動使用者的關鍵細節!