使用 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
2會員
4內容數
簡單的了解一個關於程式相關的主題
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
Thumbnail
【Premiere 教學】製作綜藝字卡 這篇文章介紹了使用 Premiere 製作文字卡的方法,包括文字的層次調整、修飾圖樣的跟隨文字進行增減、位移、遮罩效果的製作。最後還教你如何將字卡存成模板並使用。
Thumbnail
今天介紹的是 #canve 小小的做個範例影片, 意外看到這種小動畫廣告XD 順便貼圖的廣告做上去看看成品, https://www.instagram.com/p/C9CdEkropaS/
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 挑戰5透過玩弄 flex-grow 屬性來操作網頁裡的卡片效果,看別人的成果:yhabib.github.io 本次學習心得: 製造過度效果延遲的方法:transition-delay V.S
Thumbnail
Ae 小技巧:卡牌旋轉 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
最近除了文字,開始試著做影片(正確來說,去年就開始了。),這次是有人在問「文案卡卡怎麼辦」,就試著以影片的方式分享。
Thumbnail
這個專欄分享了除了PV影片之外,自己學習或創作的其他經歷,包括自製頭像的設計和繪製過程。作者分享了創作的初版草稿、上色過程以及根據意見修改的過程。
Thumbnail
手把手帶你做風格海報! 一起來看看本次海報使用到的重點效果,大家可以跟著試試看! 本次使用素材: 點我下載素材一 點我下載素材二 (1) 製作背景 開啟新檔,畫布尺寸為 1080x1920 px。 並將素材一置入畫面後,使用選取工具將空白處選取1,直接點選生成填色2,並選擇合適的結果。
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
浮動(float)是早期用來創建佈局的技術。元素可以向左或向右浮動,旁邊的元素會環繞浮動元素。浮動元素通常用於圖文混排或簡單的兩欄佈局。
Thumbnail
【Premiere 教學】製作綜藝字卡 這篇文章介紹了使用 Premiere 製作文字卡的方法,包括文字的層次調整、修飾圖樣的跟隨文字進行增減、位移、遮罩效果的製作。最後還教你如何將字卡存成模板並使用。
Thumbnail
今天介紹的是 #canve 小小的做個範例影片, 意外看到這種小動畫廣告XD 順便貼圖的廣告做上去看看成品, https://www.instagram.com/p/C9CdEkropaS/
Thumbnail
這篇文章教你如何製作側邊欄,包括準備工作、HTML和CSS的部分,還有一些互動效果。文章涵蓋了連結、圖片、超連結、大小、顏色、排版、flex和滑鼠互動等內容。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 挑戰5透過玩弄 flex-grow 屬性來操作網頁裡的卡片效果,看別人的成果:yhabib.github.io 本次學習心得: 製造過度效果延遲的方法:transition-delay V.S
Thumbnail
Ae 小技巧:卡牌旋轉 動態後記系列會記錄一些我在製作中的記錄,可能是分解動畫、小技巧、發想、腳本......等等。 每篇都是小短篇,就是補充用的小筆記,沒有前後順序,可跳著閱讀。
Thumbnail
最近除了文字,開始試著做影片(正確來說,去年就開始了。),這次是有人在問「文案卡卡怎麼辦」,就試著以影片的方式分享。
Thumbnail
這個專欄分享了除了PV影片之外,自己學習或創作的其他經歷,包括自製頭像的設計和繪製過程。作者分享了創作的初版草稿、上色過程以及根據意見修改的過程。
Thumbnail
手把手帶你做風格海報! 一起來看看本次海報使用到的重點效果,大家可以跟著試試看! 本次使用素材: 點我下載素材一 點我下載素材二 (1) 製作背景 開啟新檔,畫布尺寸為 1080x1920 px。 並將素材一置入畫面後,使用選取工具將空白處選取1,直接點選生成填色2,並選擇合適的結果。