看效果,動起來~:

實作:
1. 定義標簽,.card是底層盒子,.card2是呈現卡片效果的盒子,然后里面就是一些圖片和文字,字體圖示的標簽了,:
<div class="card">
<div class="card2">
<img src="img/haha.gif" alt="haha">
<h2>北極光之夜</h2>
<p class="txt">The aurora borealis.</p>
<div class="font">
<span>? </span>
<span>? </span>
<span>? </span>
</div>
</div>
</div>
2. 定義底層盒子.card的基本樣式:
.card {
position: relative;
width: 250px;
height: 300px;
transform-style: preserve-3d;
cursor: pointer;
}
position: relative; 相對定位,
transform-style: preserve-3d; 其子元素獲得3D位置,
cursor: pointer; 滑鼠樣式變為小手,
3. 定義卡片盒子 .card2 的基本樣式:
.card2 {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: transparent;
border-radius: 15px;
transition: all 0.2s;
transform-style: preserve-3d;
box-shadow: inset 0 0 30px rgb(83, 83, 82);
}
position: absolute; 絕對定位,
background-color: transparent; 背景色為透明色,
border-radius: 15px; 邊角的弧度,
transiton: all 0.2s;過渡效果,
transform-style:preserve-3d;子元素獲得3D位置,
box-shadow: 內陰影,
4. 定義頭像圖片得基本樣式:
.card2 img {
position: absolute;
top: 30px;
left: 75px;
width: 100px;
height: 100px;
border-radius: 50%;
transform: translateZ(50px);
box-shadow: 0 0 10px rgb(83, 83, 83);
}
position:絕對定位,
transform:translateZ(50px);圖片向 Z 軸移動 50 px ,這樣更有層次感和立體效果,
box-shadow: 0 0 10px rgb(83, 83, 83); 陰影,
5. 標題的基本樣式:
.card2 h2 {
font-family: 'Permanent Marker', cursive;
position: absolute;
top: 150px;
width: 100%;
height: 28px;
font-size: 25px;
line-height: 28px;
text-align: center;
text-shadow: 0 0 5px rgb(177, 174, 174);
color: rgb(33, 34, 34);
transform: translateZ(50px);
}
font-family: 字體樣式,
font-size:字體大小,
text-align:文本居中對齊,
text-shadow: 文字陰影,
transform: translateZ(50px);文字也向 Z 軸移動 50 px ,更有層次感和立體效果,
6. 小標題基本樣式:
.txt{
font-family: 'Permanent Marker', cursive;
position: absolute;
top: 180px;
width: 100%;
line-height: 30px;
font-size: 16px;
text-align: center;
text-shadow: 0 0 10px rgb(185, 187, 186);
transform: translateZ(50px);
}
font-family: ‘Permanent Marker’, cursive; 字體樣式,字體樣式大全
line-height: 30px; 行間距,
…略…
7. 字體圖示的基本樣式,寬,高等:
.font{
position: absolute;
top: 215px;
left: 50%;
width: 80%;
height: 50px;
display: flex;
align-items: center;
justify-content: space-around;
transform: translateZ(50px) translateX(-50%);
}
.font span{
display: inline-block;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 30px;
color: white;
border-radius: 50%;
background-color: rgb(61, 60, 60);
box-shadow: inset 0 0 8px white,
inset 0 0 8px white,
inset 0 0 8px white,
0 0 8px black;
}
display: flex;
align-items: center;
justify-content: space-around; flex布局,主軸平分空間對齊,側軸居中對齊,
display: inline-block; 轉為行內塊元素,
box-shadow: 陰影,寫多行可以讓陰影效果更亮,
…略…
8. js部分,看注釋,公式可以結合注釋自己理解下:
<script>
/* 獲取底層盒子標簽*/
var card = document.querySelector('.card');
/*獲取卡片標簽*/
var card2 = document.querySelector('.card2');
/*給底層盒子添加滑鼠經過mousemove事件*/
card.addEventListener('mousemove', function (e) {
/* x為滑鼠距離頁面左側距離減去底層盒子距離頁面左側距離*/
let x = e.clientX - card.offsetLeft;
/* left為底層盒子寬度的一半*/
let left = card.offsetWidth / 2;
/* rotateY 為卡片繞Y軸旋轉的大小,旋轉度看自己,我除以5,也可以大點或小點 */
let rotateY = -(left - x) / 5;
/* y為滑鼠距離頁面頂側距離減去底層盒子距離頁面頂側距離*/
let y = e.clientY - card.offsetTop;
/* top為底層盒子高度的一半*/
let top = card.offsetHeight / 2;
/* rotateX 為卡片繞X軸旋轉的大小,旋轉度看自己,我除以5,也可以大點或小點 */
let rotateX = (top - y) / 5;
/*為卡片添加transform屬性 */
card2.style.cssText = `
transform: rotateX(${rotateX}deg) rotateY(${rotateY}deg); `
})
/*給底層盒子添加滑鼠離開事件mouseout*/
card.addEventListener('mouseout', function (e) {
/* 讓卡片的transform屬性的繞X,Y軸的rotate都是0deg*/
card2.style.cssText = `
transform: rotateY(0deg) rotateX(0deg); `
})
</script>
完整代碼:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://fonts.font.im/css?family=Dancing+Script" rel="stylesheet">
<link href="https://fonts.font.im/css?family=Permanent+Marker" rel="stylesheet">
<style>
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?wr5es');
src: url('fonts/icomoon.eot?wr5es#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?wr5es') format('truetype'),
url('fonts/icomoon.woff?wr5es') format('woff'),
url('fonts/icomoon.svg?wr5es#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
* {
font-family: 'icomoon';
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-image: linear-gradient(120deg,rgb(255, 196, 0) 40%,rgb(31, 223, 175),rgb(0, 195, 255),rgb(183, 0, 255) 60%);
}
.card {
position: relative;
width: 250px;
height: 300px;
transform-style: preserve-3d;
cursor: pointer;
}
.card2 {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: transparent;
border-radius: 15px;
transition: all 0.2s;
transform-style: preserve-3d;
box-shadow: inset 0 0 30px rgb(83, 83, 82);
}
.card2 img {
position: absolute;
top: 30px;
left: 75px;
width: 100px;
height: 100px;
border-radius: 50%;
transform: translateZ(50px);
box-shadow: 0 0 10px rgb(83, 83, 83);
}
.card2 h2 {
font-family: 'Permanent Marker', cursive;
position: absolute;
top: 150px;
width: 100%;
height: 28px;
font-size: 25px;
line-height: 28px;
text-align: center;
text-shadow: 0 0 5px rgb(177, 174, 174);
color: rgb(33, 34, 34);
transform: translateZ(50px);
}
.txt{
font-family: 'Permanent Marker', cursive;
position: absolute;
top: 180px;
width: 100%;
line-height: 30px;
font-size: 16px;
text-align: center;
text-shadow: 0 0 10px rgb(185, 187, 186);
transform: translateZ(50px);
}
.font{
position: absolute;
top: 215px;
left: 50%;
width: 80%;
height: 50px;
display: flex;
align-items: center;
justify-content: space-around;
transform: translateZ(50px) translateX(-50%);
}
.font span{
display: inline-block;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
font-size: 30px;
color: white;
border-radius: 50%;
background-color: rgb(61, 60, 60);
/* border: 1px solid rgb(173, 172, 172) ; */
box-shadow: inset 0 0 8px white,
inset 0 0 8px white,
inset 0 0 8px white,
0 0 8px black;
}
</style>
</head>
<body>
<div class="card">
<div class="card2">
<img src="img/haha.gif" alt="haha">
<h2>北極光之夜</h2>
<p class="txt">The aurora borealis.</p>
<div class="font">
<span>? </span>
<span>? </span>
<span>? </span>
</div>
</div>
</div>
<script>
var card = document.querySelector('.card');
var card2 = document.querySelector('.card2');
card.addEventListener('mousemove', function (e) {
let x = e.clientX - card.offsetLeft;
let left = card.offsetWidth / 2;
let rotateY = -(left - x) / 5;
let y = e.clientY - card.offsetTop;
let top = card.offsetHeight / 2;
let rotateX = (top - y) / 5;
card2.style.cssText = `
transform: rotateX(${rotateX}deg) rotateY(${rotateY}deg); `
})
card.addEventListener('mouseout', function (e) {
card2.style.cssText = `
transform: rotateY(0deg) rotateX(0deg); `
})
</script>
</body>
</html>
總結:
這個效果涉及的知識點是比較全的,拿來練習很不錯~

2021年最大的愿望就是疫情消失,
在生命中還有許多激動人心的事情等著我們去做~
其它文章~:
炫彩流光文字 html+css
氣泡浮動背景特效 html+css
簡約時鐘特效 html+css+js
賽博朋克風格按鈕 html+css
回應式卡片懸停效果 html+css
水波加載影片 html+css
導航欄滾動漸變效果 html+css+js
書本翻頁 html+css
3D立體相冊 html+css
炫彩流光按鈕 html+css
記一些css屬性總結(一)
Sass總結筆記
…等等
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/262064.html
標籤:其他
上一篇:Js函式
