純CSS雜志封面折疊效果
本文主要介紹了純CSS雜志封面折疊效果,分享給大家,具體如下:

如圖所示,這是一個雜志封面圖的折疊效果,折疊前后的圖片內(nèi)容完全不違和,瞬間對這個圖片內(nèi)容的排版設(shè)計很是稱贊,但這塊不再本次文章的討論范圍,本次文章是要用純CSS實現(xiàn)這個折疊效果。
按圖片的效果進行代碼還原很多方式都可以實現(xiàn),以下是本次實現(xiàn)的主要幾點:
- 純CSS實現(xiàn),不依賴JavaScript
- 使用單張圖片,不需要在PS中切割成多單圖片
- 可以通過樣式屬性中設(shè)置CSS變量來配置頁面
實現(xiàn)過程
界面布局
HTML的實現(xiàn)相對簡單,img標簽主要實現(xiàn)內(nèi)容大小的控制,將圖標內(nèi)部的內(nèi)容分割為3個部分,其中左側(cè)span.a占50%,右側(cè) span.bc占50%,span.bc中的 span.b 和 span.c 各占比一半。圖片的地址從HTML中可傳入,這樣需要更換圖片的時候就不需要更新CSS中的代碼了。
<span class="jaffee" style="--bg: url('path/to/image.png');">
<span class="a"></span>
<span class="bc">
<span class="b"></span>
<span class="c"></span>
</span>
<img src="path/to/image.png">
</span>
你可能會好奇圖片為什么被隱藏了,核心的邏輯就是對不同的分割塊中設(shè)置不同的 background-position,每一塊都是用的同一個圖片地址,但是真正顯示的區(qū)域不一樣,拼在一起剛好是一張完整的圖片。當hover時對 span.b 和 span.c設(shè)置不同的動畫效果,接下來看核心的代碼實現(xiàn)。
上面有提到img標簽主要實現(xiàn)內(nèi)容大小的控制,所有img標簽的目的是撐開內(nèi)容的大小,但是本身是不展示在頁面中的,所以img標簽有一個特殊的樣式控制opacity: 0,隱藏其透明度。這樣我們就可以靈活的操作span分割出來的背景了。
img {
width: auto;
height: auto;
max-width: 100%;
max-height: 56vh;
opacity: 0;
}接下來設(shè)置abc三個區(qū)域的尺寸:
.jaffee .a {
position: absolute;
left: 0;
width: 50%;
background-position: 0 0;
}
.jaffee .bc {
position: absolute;
width: 50%;
height: 100%;
left: 50%;
}
.jaffee .b,
.jaffee .c {
position: relative;
width: 50%;
}bc區(qū)域會涉及到3d動畫,進一步增加相關(guān)css屬性:
.jaffee .bc {
transform-origin: left;
transition: transform 3s;
transform-style: preserve-3d;
}然后對不同的區(qū)域背景圖片設(shè)置不同的 background-position,a區(qū)域在最左側(cè)且無相關(guān)動畫展示,所以不需要設(shè)置:
.jaffee .b {
background-position: 66.666667% 0;
transform-style: preserve-3d;
}
.jaffee .c {
background-position: 100% 0;
transform-origin: left;
}為了讓效果更有3d的感覺,給最外層增加 perspective 透視,讓效果更逼真:
.jaffee-wrapper {
perspective: 60em;
}此時的界面效果:

動畫實現(xiàn)
布局完成后接下來就是動畫的實現(xiàn)過程了,動畫看著有些復(fù)雜,其實仔細拆解一下并沒有那么復(fù)雜,仔細看動畫的過程,只有bc區(qū)域有動畫的過程。整個bc區(qū)域Y軸進行了一次180deg的翻轉(zhuǎn),bc區(qū)域的c區(qū)域本質(zhì)是沒有翻轉(zhuǎn),但是因為父級的翻轉(zhuǎn)的原因需要進行設(shè)置反向的值進行抵消。另外可以發(fā)現(xiàn)c區(qū)域的動畫結(jié)束時間要晚一些,說明兩者的動畫執(zhí)行時間上有區(qū)別。
基于上述的核心代碼如下:
.jaffee:hover .bc,
.jaffee:active .bc {
transform: rotateY(-180deg) ;
transition: transform 2s;
}
.jaffee:hover .c,
.jaffee:active .c {
transform: rotateY(180deg);
transition: transform 3s;
}增強陰影
為了讓效果更真實貼近現(xiàn)實,在折疊的時候增加了b區(qū)域背面的黑色陰影的實現(xiàn),這個陰影的實現(xiàn)使用偽元素,代碼如下:
.jaffee .b:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #000;
transform: rotateY(180deg) translateZ(1px);
transform-style: preserve-3d;
backface-visibility: hidden;
}這里可以看到對偽元素設(shè)置了translateZ(1px),所以需要對剛剛設(shè)置的動畫區(qū)域也增加相應(yīng)的translateZ,避免在動畫過程中黑色陰影的覆蓋。增加后的代碼如下:
.jaffee:hover .bc,
.jaffee:active .bc {
transform: rotateY(-180deg) translateZ(-1px);
}
.jaffee:hover .c,
.jaffee:active .c {
transform: rotateY(180deg) translateZ(2px);
}到此整個動畫效果就實現(xiàn)完成了,最終的效果如下:

最后
本文解析了通過純 CSS 實現(xiàn)雜志封面折疊效果,拆解之后的實現(xiàn)過程相對就比較清晰了,主要使用了css 3d相關(guān)屬性。還可以用于各種其他場景,比如卡片翻轉(zhuǎn)、菜單展開等等,有興趣的朋友可以嘗試看看~
參考
The Mad Magazine Fold-In Effect in CSS:https://thomaspark.co/2020/06/the-mad-magazine-fold-in-effect-in-css/
到此這篇關(guān)于純CSS雜志封面折疊效果的文章就介紹到這了,更多相關(guān)CSS雜志折疊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- CSS Grid 是一種二維布局系統(tǒng),可以同時控制行和列,相比 Flex(一維布局),更適合用在整體頁面布局或復(fù)雜模塊結(jié)構(gòu)中,這篇文章主要介紹了前端CSS Grid 布局詳解,需要的朋2025-04-16
CSS Padding 和 Margin 區(qū)別全解析
CSS 中的 padding 和 margin 是兩個非?;A(chǔ)且重要的屬性,它們用于控制元素周圍的空白區(qū)域,本文將詳細介紹 padding 和 margin 的概念、區(qū)別以及如何在實際項目中使用它們2025-04-07- will-change 是一個 CSS 屬性,用于告訴瀏覽器某個元素在未來可能會發(fā)生哪些變化,本文給大家介紹CSS will-change 屬性詳解,感興趣的朋友一起看看吧2025-04-07
- 本文給大家分享在 CSS 中,去除a標簽(超鏈接)的下劃線的幾種方法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-07
在前端開發(fā)中,CSS(層疊樣式表)不僅是用來控制網(wǎng)頁的外觀和布局,更是實現(xiàn)復(fù)雜交互和動態(tài)效果的關(guān)鍵技術(shù)之一,隨著前端技術(shù)的不斷發(fā)展,CSS的用法也日益豐富和高級,本文將2025-04-07css中的 vertical-align與line-height作用詳解
文章詳細介紹了CSS中的`vertical-align`和`line-height`屬性,包括它們的作用、適用元素、屬性值、常見使用場景、常見問題及解決方案,感興趣的朋友跟隨小編一起看看吧2025-03-26淺析CSS 中z - index屬性的作用及在什么情況下會失效
z-index屬性用于控制元素的堆疊順序,值越大,元素越顯示在上層,它需要元素具有定位屬性(如relative、absolute、fixed或sticky),本文給大家介紹CSS 中z - index屬性的作用2025-03-21- 文章詳細介紹了CSS中的打印媒體查詢@mediaprint包括基本語法、常見使用場景和代碼示例,如隱藏非必要元素、調(diào)整字體和顏色、處理鏈接的URL顯示、分頁控制、調(diào)整邊距和背景等2025-03-18

CSS模擬 html 的 title 屬性(鼠標懸浮顯示提示文字效果)
本文介紹了如何使用CSS模擬HTML的title屬性,通過鼠標懸浮顯示提示文字效果,通過設(shè)置`.tipBox`和`.tipBox.tipContent`的樣式,實現(xiàn)了提示內(nèi)容的隱藏和顯示,感興趣的朋友一起2025-03-10
前端 CSS 動態(tài)設(shè)置樣式::class、:style 等技巧(推薦)
本文介紹了Vue.js中動態(tài)綁定類名和內(nèi)聯(lián)樣式的兩種方法:對象語法和數(shù)組語法,通過對象語法,可以根據(jù)條件動態(tài)切換類名或樣式;通過數(shù)組語法,可以同時綁定多個類名或樣式,此外2025-02-26




