Electron-桌面 App-螢幕遮罩(Screen mask) - 1

更新 發佈閱讀 11 分鐘

前言
公司最近配的一台螢幕,沒辦法調整亮度,亮得要命,眼睛要瞎掉了所以只好自立自強搞一個螢幕遮罩

本章節內容
顯示 Electron 視窗,可調整透明度

專案規格

{
"electron": "^40.2.1",
"tailwindcss": "^4.1.18",
"@tailwindcss/cli": "^4.1.18"
}

※ p.s. 如果 ChatGPT 或 Gemini 要你做一大堆 tailwind 設定
記得跟他說我是用 tailwind v4 喔 😖 (每次都要特別標註,真麻煩)


第一步:專案初始化

首先,建立資料夾並安裝必要的依賴。

# 初始化專案
npm init -y

# 安裝 Electron
npm install electron --save-dev

# 安裝 Tailwind CSS v4 及其 CLI 工具
npm install tailwindcss @tailwindcss/cli --save-dev

第二步:建立 Tailwind 設定

Tailwind v4 簡化了許多設定。我們只需要一個 CSS 入口點。
建立一個 src 資料夾。在 src 內建立 input.css

/* src/input.css */
@import 'tailwindcss';

/* 讓 body 預設透明,並撐滿視窗 */
body {
@apply m-0 p-0 overflow-hidden bg-transparent;
}

第三步:撰寫 Electron 主進程 (main.js)

✨ 推薦的目錄結構

my-electron-app/
├── node_modules/
├── src/
│ ├── main.js <-- 主進程
│ ├── input.css <-- Tailwind 輸入檔
│ └── index.html <-- 網頁內容
├── dist/
│ └── output.css <-- Tailwind 編譯出來的檔
├── package.json
└── package-lock.json
// main.js
const { app, BrowserWindow, screen } = require('electron')

const path = require('path')

function createWindow() {
const { width, height } = screen.getPrimaryDisplay().workAreaSize

const win = new BrowserWindow({
width: width,
height: height,
x: 0,
y: 0,
frame: true, // 移除視窗邊框 false
transparent: false, // 開啟視窗透明 true
alwaysOnTop: false, // 始終置頂 true
fullscreen: false, // 全螢幕 true
skipTaskbar: false, // 不在工具列顯示 true
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
},
show: false,
})

win.loadFile(path.join(__dirname, 'index.html'))
win.once('ready-to-show', () => {
win.show()
win.setAlwaysOnTop(true, 'screen-saver')
})
}

app.whenReady().then(createWindow)

🗹 BrowserWindow 設定

  • 待 npm start 可以顯示視窗、調整透明度後再一一追加設定

🗹 __dirname

  • 為確保打包專案後,可取得到 index.html 的正確路徑,採用
    const path = require('path')
    win.loadFile(path.join(__dirname, 'index.html'))

第四步:撰寫前端介面 (index.html)

我們利用 Tailwind v4 的 CSS 變數功能來動態調整顏色與不透明度。

<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="../dist/output.css" />
</head>

<body class="h-screen w-screen overflow-hidden">
<div
id="overlay"
class="fixed inset-0 transition-all duration-300 pointer-events-none"
style="background-color: rgba(var(--overlay-color, 0, 0, 0), var(--overlay-opacity, 0.5));"
></div>

<div
class="fixed top-4 right-4 p-4 bg-white/80 backdrop-blur rounded-xl shadow hover:opacity-100 opacity-20 transition-opacity z-10"
>
<label class="block">
透明度
<input
type="range"
id="opacityInput"
min="0"
max="1"
step="0.1"
value="0.5"
class="w-full"
/>
</label>
</div>

<script>
const opacityInput = document.getElementById('opacityInput')
function updateStyle() {
document.body.style.setProperty('--overlay-opacity', opacityInput.value)
}
opacityInput.oninput = updateStyle
</script>
</body>
</html>

第五階段:啟動設定 (package.json)

{
...
"main": "src/main.js", // <-- 這裡要指向 src 內部
"scripts": {
"build:css": "npx @tailwindcss/cli -i ./src/input.css -o ./dist/output.css",
"watch:css": "npx @tailwindcss/cli -i ./src/input.css -o ./dist/output.css --watch",
"start": "npm run build:css && electron .",
"dev": "npm run build:css && (npx @tailwindcss/cli -i ./src/input.css -o ./dist/output.css --watch & electron .)"
},
...
}
  • build:css:手動編譯。
    當你執行 npm run build:css 時,它會掃描你的 HTML/組件,根據你用到的 Class 名稱,產生一個最小化的 CSS 檔案。
    這通常用於專案上線前
  • watch:css:自動監控。
    當你執行 npm run watch:css 時,CLI 會一直開著。只要你修改了 HTML 或 CSS 並存檔,它就會即時更新輸出檔案,讓你在開發時不用手動一直跑指令。
  • npx @tailwindcss/cli: 呼叫 Tailwind CSS 的執行工具
  • -i ./src/input.css
    Input(輸入): 告訴工具你的原始 CSS 檔案在哪裡(通常裡面只有一行 @import "tailwindcss";)。
  • -o ./dist/output.css
    Output(輸出): 告訴工具編譯完的成品要放在哪裡。你的 HTML 應該引用這個檔案。
  • --watch
    監控模式: 讓程式不要結束,持續觀察檔案變動。

第六階段:執行

在終端機輸入:

npm run start
# 或
npm start
vocus|新世代的創作平台

可以透過右上方小面板控制透明度

vocus|新世代的創作平台


留言
avatar-img
李昀瑾的沙龍
0會員
37內容數
李昀瑾的沙龍的其他內容
2026/03/19
(進階) 搭配 Nano Stores 完成「過濾器按鈕」 index.astro 的 ALL 按鈕,改為 FilterButton.tsx 套用先前建立好的 techStore.js 1. 建立 FilterButton 元件 新增 src\components\FilterButton
2026/03/19
(進階) 搭配 Nano Stores 完成「過濾器按鈕」 index.astro 的 ALL 按鈕,改為 FilterButton.tsx 套用先前建立好的 techStore.js 1. 建立 FilterButton 元件 新增 src\components\FilterButton
2026/03/12
(進階) 搭配 Nano Stores 完成「即時搜尋」 靜態 HTML Client Component Vanilla JS / Framework JS
2026/03/12
(進階) 搭配 Nano Stores 完成「即時搜尋」 靜態 HTML Client Component Vanilla JS / Framework JS
2026/03/05
(進階) 在 Astro 5 中讀取並顯示 我們可以直接在頁面中把這些資料抓出來,並根據 status 分類。
2026/03/05
(進階) 在 Astro 5 中讀取並顯示 我們可以直接在頁面中把這些資料抓出來,並根據 status 分類。
看更多
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News