使用 CSS 製作簡單的 Flip Card

閱讀時間約 5 分鐘

最近在練習使用 CSS 來製作一些簡單的動畫,以下是我收集資料與實作的成果。

製作一張可以水平翻轉的卡片,這邊會使用 Vue.js 來簡化邏輯,主要是解釋 CSS 的部分。


首先,一張卡片會有正面與反面,程式碼的寫法會是:

<div class="flip-card">
<div class="flip-card-inner">
<div class="flip-card-front">
<button class="flip-card-btn">flip</button>
<h2>Front</h2>
</div>
<div class="flip-card-back">
<button class="flip-card-btn">flip</button>
<h2>Back</h2>
</div>
</div>
</div>

接下來就要設定 CSS:

/* 設定轉動時透視狀態 */
.flip-card {
perspective: 1000px;
}
/* 卡片以 3D 方式呈現 */
.flip-card-inner {
position: relative;
&nbsp; transform-style: preserve-3d;
&nbsp; transition: transform 1s;
&nbsp; transition-timing-function: ease-in-out;
}
/* 卡片翻轉 */
.flip-card-inner.flipped {
transform: rotateY(180deg);
transition: ease-in-out 1s;
}
/* 卡片內容樣式設定 */
.flip-card-front,
.flip-card-back {
position: absolute;
top: 0;
right: 0;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden; /* Safari */
backface-visibility: hidden;
}
/* 卡片背面翻轉 */
.flip-card-back {
transform: rotateY(180deg);
}

以下會說明每個 CSS 屬性存在的目的,如果沒有特殊的情境,每個屬性都只會解釋一次,裡面的數值可根據自己需求改變。

Flip Card

perspective:是 Transform 3D 會用到的屬性,表示 Z軸到觀看者之間的距離。數值越小越容易會有翻轉失真的問題,這是因為觀測者與卡片距離太相近,導致卡片翻轉時超出了觀測者的範圍,所以這邊設定 1000px (可以試著將數值調低來觀看差異)

Flip Card Inner

這裡會把 .flip-card-inner 和 .flip-card-inner.flipped 放在一起說:

.flip-card-inner

  • transform-style: preserve-3d 將這個元件保留在 3D 空間中
  • transition:翻轉的方式會參照 .flip-card-inner.flipped 裡 transform 的設定
  • transition-timing-function:動畫過渡的方式

.flip-card-inner.flipped

  • transform: rotateY(180deg):當觸發翻轉時,會水平翻轉 180 度
  • transition:動畫過渡的方式與時間

Flip Card Front & Back

backface-visibility: hidden;:是將卡片背面的物件隱藏。也因為現在是在 3D 空間下,所以可以看到多出一個 .flip-card-back 裡的設定,這就是將內容設定成卡背的方式

這邊要特別注意,為什麼使用 position: absolute?這是因為backface-visibility 是將卡片背後的內容 hidden,這表示這個元素還是存在,如果不使用 absolute 在卡片翻過去背面後,卡片正面的內容雖然消失但依舊會佔據原本的位置

flip-card-no-absolute

flip-card-no-absolute

Logic

以 Vue 來說很簡單,只要設定一個 Reactive State 就可以解決:

const isFlipped = ref(false);

const flipCard = () => {
isFlipped.value = !isFlipped.value;
};

再將這個 flipCard 函式套用在想與之互動的方式上(可以是 hover 之類的,這裡我用 button):

<button class="flip-card-btn" @click="flipCard()">
flip
</button>
2會員
4內容數
簡單的了解一個關於程式相關的主題
留言0
查看全部
發表第一個留言支持創作者!
Soft Code 的其他內容
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Bun 在 2023/9/8 釋出了 1.0 版本,這篇文章就來說一下為什麼 Bun 會被關注,還有該怎麼使用它。
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Bun 在 2023/9/8 釋出了 1.0 版本,這篇文章就來說一下為什麼 Bun 會被關注,還有該怎麼使用它。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
分享使用 Simmpo iPad 護眼類紙膜|TÜV 抗藍光簡單貼的經驗,在 iPad 上使用這款保護貼的感受和效果,另外包含了 Simmpo 品牌的理念和產品特色。如果你也在尋找抗藍光護眼類紙膜,試試看 Simmpo 的產品吧。
Thumbnail
網站設計不再僅僅是靜態的展示,而是越來越多地引入動態網頁效果來提供更豐富和引人注目的使用者體驗。本文將解釋如何使用CSS轉換、過渡和動畫效果來創建動態網頁元素,並介紹一些常用的JavaScript庫和框架(如jQuery和GSAP)來實現更複雜的動態效果。
Thumbnail
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
最近在把 Tailwind CSS 加入我的技能樹中,其實像這種 Bootstrap, Tailwind CSS 都是很基本前端需要掌握的 CSS 相關工具 但是我其實對美工比較沒那麼大的興趣,我對功能、效能、安全比較感興趣,所以後端、架站、DevOps、一些安全防護玩了一圈,現在來加強我的排版功力
@import可以將一個style sheet 導入另一個style sheet example: 匯入式: 連結式: 顧名思義,就是創造一個css的stylesheet,然後進行連結(link) 再來我們開啟***.css的頁面,再進行匯入 讀取順位請將@import放在css頁面的最前列。
Thumbnail
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
Thumbnail
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
許多人因為太陽能板節省成本,決定開始使用太陽能板,一方面幫助地球節能減碳,另一方面及省家中的用電成本,那在太陽能板發電之前,我們可以了解什麼呢?   不同的太陽能電池板是由什麽製成的? 為了發電,太陽能電池是由一種半導體材料制成的,它能將光轉化為電。在太陽能電池制造過程中,最常用的半導體材料是矽。
Thumbnail
以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
分享使用 Simmpo iPad 護眼類紙膜|TÜV 抗藍光簡單貼的經驗,在 iPad 上使用這款保護貼的感受和效果,另外包含了 Simmpo 品牌的理念和產品特色。如果你也在尋找抗藍光護眼類紙膜,試試看 Simmpo 的產品吧。
Thumbnail
網站設計不再僅僅是靜態的展示,而是越來越多地引入動態網頁效果來提供更豐富和引人注目的使用者體驗。本文將解釋如何使用CSS轉換、過渡和動畫效果來創建動態網頁元素,並介紹一些常用的JavaScript庫和框架(如jQuery和GSAP)來實現更複雜的動態效果。
Thumbnail
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
最近在把 Tailwind CSS 加入我的技能樹中,其實像這種 Bootstrap, Tailwind CSS 都是很基本前端需要掌握的 CSS 相關工具 但是我其實對美工比較沒那麼大的興趣,我對功能、效能、安全比較感興趣,所以後端、架站、DevOps、一些安全防護玩了一圈,現在來加強我的排版功力
@import可以將一個style sheet 導入另一個style sheet example: 匯入式: 連結式: 顧名思義,就是創造一個css的stylesheet,然後進行連結(link) 再來我們開啟***.css的頁面,再進行匯入 讀取順位請將@import放在css頁面的最前列。
Thumbnail
對於前端初學者來說,在切版時會出現很多規則、不規則的網頁區塊,這時候我們會嘗試用各種相對定位、絕對定位、margin 或是 padding 的方式來進行網頁區塊的推擠。
Thumbnail
明明想要某個欄位的寬高為 200px,卻發現自己不知道為什麼怎麼更改都會改不動,又或者寬高更改了,卻沒有辦法與其他元素並列。 上述的狀況,通常都是在不熟悉 HTML display 特性而產生的狀況下才會出現⋯⋯
許多人因為太陽能板節省成本,決定開始使用太陽能板,一方面幫助地球節能減碳,另一方面及省家中的用電成本,那在太陽能板發電之前,我們可以了解什麼呢?   不同的太陽能電池板是由什麽製成的? 為了發電,太陽能電池是由一種半導體材料制成的,它能將光轉化為電。在太陽能電池制造過程中,最常用的半導體材料是矽。
Thumbnail
以電信公司離網分析 (churn rate)預測為例 既有手動資料分析的挑戰: 電信公司與上千萬個客戶簽約,因此顧客資料量龐大,難以分析 需有專業人員進行複雜的數據建模,導致人力、時間、工具成本昂貴,無法彈性擴展應用 新進人員需要時間訓練,無法快速上手 分析目的:     使用過