處理 Icon 陰影:從 box-shadow 到 filter:drop-shadow

更新於 發佈於 閱讀時間約 3 分鐘

作為一名前端工程師,我們經常會遇到一些看似簡單卻難以解決的 CSS 問題。最近在開發過程中,我遇到了一個有趣的挑戰:如何為 Ant Design Blazor 的 Icon 元件添加一個符合其形狀的陰影效果。這個問題讓我從最初的困惑到最終的恍然大悟,過程中學到了一個非常實用的 CSS 技巧。

問題的起源

一位用戶向我提出了一個看似簡單的需求:能否為 Ant Design Blazor 中的 Icon 元件添加陰影效果,讓圖示在頁面上更加突出。

當時我想:「這還不簡單嗎?CSS 中不是有 box-shadow 屬性嗎?」

初次嘗試的挫折

我立即嘗試了最常見的解決方案:

css.ant-icon {
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
}

結果卻讓我大吃一驚 — 陰影呈現的是一個完美的方形,而不是跟隨 Icon 的實際形狀!這看起來非常奇怪,就像是在 Icon 後面放了一個黑色的小方塊。

我又嘗試了使用 border 來模擬陰影效果:

css.ant-icon {
border: 1px solid rgba(0, 0, 0, 0.3);
}

但這種方法同樣無法達到預期效果,只是在 Icon 的方形邊界上添加了一個框線。

意外的發現

就在我快要放棄的時候,我決定再深入研究一下。經過一番搜索,我發現了 CSS 中的 filter: drop-shadow() 屬性!

css.ant-icon {
filter: drop-shadow(2px 2px 3px rgba(0, 0, 0, 0.3));
}

當我將這段代碼應用到 Icon 上時,效果簡直驚艷!陰影完美地跟隨了 Icon 的實際形狀,就像是在專業圖像編輯軟件中添加的陰影效果一樣。

為什麼 drop-shadow 能解決問題?

經過這次經歷,我對 CSS 中的陰影處理有了更深入的理解。原來 box-shadow 和 drop-shadow 有著本質的區別:

  • box-shadow:應用於元素的整個盒模型,包括 padding 和 border。無論內容實際形狀如何,陰影都會遵循元素的矩形邊界。
  • drop-shadow:專為圖像、SVG 和其他非矩形形狀設計,能夠跟隨內容的實際輪廓。

實際應用場景

這兩種陰影技術各有其適用場景:

  • box-shadow:適合用於按鈕、卡片、容器等矩形元素
  • drop-shadow:適合用於 Icon、SVG、PNG 等具有透明背景或不規則形狀的元素

結語

這次的經歷讓我意識到,即使是看似簡單的前端需求,背後也可能隱藏著學習新知識的機會。從最初的困惑到最終找到解決方案,這個過程不僅解決了用戶的問題,也讓我的 CSS 技能庫增添了一個強大的工具。

如果你也遇到了類似的問題,不妨試試 filter: drop-shadow() 這個屬性。它可能會給你帶來意想不到的驚喜!

想了解更多關於這個技術的詳細內容,可以查看我在個人網站上的完整文章:當 Icon 遇上陰影:從 box-shadow 到 drop-shadow 的意外發現,那裡有更多代碼示例和實際應用場景的討論。

留言
avatar-img
留言分享你的想法!
avatar-img
我的思考空間
0會員
2內容數
NET/Python 全端工程師,用 Blazor 與 Django 構建網站,閒暇時用 Python 實現自動化的小確幸。正探索AI輔助開發,讓程式更智能。這裡分享開發心得、AI 實驗和生活小發現。我與我那隻認為自己是老大的柯基,邀請你一起探索程式與生活的奇妙交織。技術讓生活更簡單,柯基讓心情更愉悅!
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
作為一名前端工程師,我們經常會遇到一些看似簡單卻難以解決的 CSS 問題。最近在開發過程中,我遇到了一個有趣的挑戰:如何為 Ant Design Blazor 的 Icon 元件添加一個符合其形狀的陰影效果。這個問題讓我從最初的困惑到最終的恍然大悟,過程中學到了一個非常實用的 CSS 技巧。 問題
Thumbnail
作為一名前端工程師,我們經常會遇到一些看似簡單卻難以解決的 CSS 問題。最近在開發過程中,我遇到了一個有趣的挑戰:如何為 Ant Design Blazor 的 Icon 元件添加一個符合其形狀的陰影效果。這個問題讓我從最初的困惑到最終的恍然大悟,過程中學到了一個非常實用的 CSS 技巧。 問題
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
這篇文章將介紹如何透過CSS Battle的題目來練習基礎切版技巧。透過一個眼睛圖案的例子,提供了對於 border、outline、border-radius等屬性的調整方式,並分享了一種 100% 的解法。歡迎大家分享自己的作法與作者交流,一起學習成長。
Thumbnail
這篇文章將介紹如何透過CSS Battle的題目來練習基礎切版技巧。透過一個眼睛圖案的例子,提供了對於 border、outline、border-radius等屬性的調整方式,並分享了一種 100% 的解法。歡迎大家分享自己的作法與作者交流,一起學習成長。
Thumbnail
本文介紹了CSS Battle 17的挑戰題目,並提供瞭解題的技巧和方法。內容包括基本排版、圖形解構能力和技術總結。歡迎大家分享自己的解法與作者交流。
Thumbnail
本文介紹了CSS Battle 17的挑戰題目,並提供瞭解題的技巧和方法。內容包括基本排版、圖形解構能力和技術總結。歡迎大家分享自己的解法與作者交流。
Thumbnail
本篇文章分享了前端工程師在 CSS Battle #166 的解題方式,藉由使用 flex 來進行排版,並提供了相關的技術總結。歡迎一起來學習或練習基礎切版的朋友們和作者互動。
Thumbnail
本篇文章分享了前端工程師在 CSS Battle #166 的解題方式,藉由使用 flex 來進行排版,並提供了相關的技術總結。歡迎一起來學習或練習基礎切版的朋友們和作者互動。
Thumbnail
這是一篇關於CSS Battle系列的文章,介紹瞭如何通過CSS來處理特定圖案的切版與前端工程技術。文章分享了使用grid和radial-gradient()方法來處理特定圖案的解法以及相關技術總結。
Thumbnail
這是一篇關於CSS Battle系列的文章,介紹瞭如何通過CSS來處理特定圖案的切版與前端工程技術。文章分享了使用grid和radial-gradient()方法來處理特定圖案的解法以及相關技術總結。
Thumbnail
本文介紹CSS Battle題目#73的解法,涵蓋了分層拆解圖形、使用grid排版、調整樣式等基礎技巧。
Thumbnail
本文介紹CSS Battle題目#73的解法,涵蓋了分層拆解圖形、使用grid排版、調整樣式等基礎技巧。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News