使用 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>
留言
avatar-img
留言分享你的想法!
avatar-img
Soft Code
2會員
4內容數
簡單的了解一個關於程式相關的主題
Soft Code的其他內容
2024/01/28
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
2024/01/28
非同步程式設計(Asynchronous programming) 或是簡單的稱之為 async,它是一種並發程式模型(concurrent programming model),其目的就是讓多個任務能同時在作業系統的執行緒上執行,並透過 async/.await 保留同步。
Thumbnail
2023/10/02
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Thumbnail
2023/10/02
對於剛學習 Rust 的人來說,最一開始不是看 Youtube 的影片或是跟著 Rust 官方手冊 The Book 學習,這邊來推薦一個練習 Rust 的專案,名為 rustlings。 rustlings 包含著一些簡單的題目,來讓你更習慣閱讀或編寫 Rust 程式碼。該專案會在每道題目上給予
Thumbnail
2023/09/13
Bun 在 2023/9/8 釋出了 1.0 版本,這篇文章就來說一下為什麼 Bun 會被關注,還有該怎麼使用它。
Thumbnail
2023/09/13
Bun 在 2023/9/8 釋出了 1.0 版本,這篇文章就來說一下為什麼 Bun 會被關注,還有該怎麼使用它。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
在這篇文章中,我們將探討如何製作章節轉場動畫,讓您的作品更具吸引力。本文包含了準備素材、定義圖片、製作簡易動畫等步驟,適合初學者進行學習和操作。我們提供了必要的資源和範例,讓您能輕鬆上手。期待透過這篇教學,能讓您在創作中達到更高的境界!
Thumbnail
在這篇文章中,我們將探討如何製作章節轉場動畫,讓您的作品更具吸引力。本文包含了準備素材、定義圖片、製作簡易動畫等步驟,適合初學者進行學習和操作。我們提供了必要的資源和範例,讓您能輕鬆上手。期待透過這篇教學,能讓您在創作中達到更高的境界!
Thumbnail
不論是平面設計、介面設計,都能見排版這一詞。而排版的作用,即在明確的設計目標中,將所有元素做有組織的安排,精確地傳達訊息。
Thumbnail
不論是平面設計、介面設計,都能見排版這一詞。而排版的作用,即在明確的設計目標中,將所有元素做有組織的安排,精確地傳達訊息。
Thumbnail
【Premiere 教學】製作綜藝字卡 這篇文章介紹了使用 Premiere 製作文字卡的方法,包括文字的層次調整、修飾圖樣的跟隨文字進行增減、位移、遮罩效果的製作。最後還教你如何將字卡存成模板並使用。
Thumbnail
【Premiere 教學】製作綜藝字卡 這篇文章介紹了使用 Premiere 製作文字卡的方法,包括文字的層次調整、修飾圖樣的跟隨文字進行增減、位移、遮罩效果的製作。最後還教你如何將字卡存成模板並使用。
Thumbnail
今天介紹的是 #canve 小小的做個範例影片, 意外看到這種小動畫廣告XD 順便貼圖的廣告做上去看看成品, https://www.instagram.com/p/C9CdEkropaS/
Thumbnail
今天介紹的是 #canve 小小的做個範例影片, 意外看到這種小動畫廣告XD 順便貼圖的廣告做上去看看成品, https://www.instagram.com/p/C9CdEkropaS/
Thumbnail
Ae 小技巧:宣紙噪點+抽幀效果 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:宣紙噪點+抽幀效果 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
最近在練習使用 CSS 來製作一些簡單的動畫,以下是我收集資料與實作的成果。製作一張可以水平翻轉的卡片,這邊會使用 Vue.js 來簡化邏輯,主要是解釋 CSS 的部分。
Thumbnail
最近在練習使用 CSS 來製作一些簡單的動畫,以下是我收集資料與實作的成果。製作一張可以水平翻轉的卡片,這邊會使用 Vue.js 來簡化邏輯,主要是解釋 CSS 的部分。
Thumbnail
Ae 小技巧:製作3D 方塊 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
Ae 小技巧:製作3D 方塊 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
手把手帶你做風格海報! 一起來看看本次海報使用到的重點效果,大家可以跟著試試看! 本次使用素材: 點我下載素材一 點我下載素材二 (1) 製作背景 開啟新檔,畫布尺寸為 1080x1920 px。 並將素材一置入畫面後,使用選取工具將空白處選取1,直接點選生成填色2,並選擇合適的結果。
Thumbnail
手把手帶你做風格海報! 一起來看看本次海報使用到的重點效果,大家可以跟著試試看! 本次使用素材: 點我下載素材一 點我下載素材二 (1) 製作背景 開啟新檔,畫布尺寸為 1080x1920 px。 並將素材一置入畫面後,使用選取工具將空白處選取1,直接點選生成填色2,並選擇合適的結果。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News