这个小练习来源于b站up小K师兄,大家可以通过下面的链接学习哦~up讲的非常详细。
写一个好玩的悬浮抽卡片效果~
先看一下效果:
1.鼠标没有放置到card上
2.鼠标放到card上,所有card呈角度散开
3.单击选中某一张卡片,卡片上浮高亮,其他卡片变暗
HTML部分
<html>
标签定义了整个HTML文档。<head>
标签包含了文档的元数据,如字符编码、标题和样式表。<body>
标签包含了文档的主体内容,即展示给用户看的部分。
CSS部分
*
选择器用于选择所有元素,并设置它们的默认样式,包括去除默认的边距、填充、边框、盒模型和字体。body
选择器设置了页面的背景颜色、居中对齐、最小高度和隐藏溢出内容。.container
选择器设置了容器元素的样式,包括相对定位、宽度、居中对齐和居中对齐内容。.card
选择器设置了卡片的样式,包括绝对定位、宽度、高度、背景颜色、边框、过渡效果、旋转原点、颜色、字体大小、字体粗细、阴影等。.container:hover .card
选择器设置了鼠标悬停时卡片的旋转、平移、阴影、颜色和光标样式。.container:active .card:not(:active)
选择器设置了鼠标按下时卡片的背景颜色。.container .card:active
选择器设置了鼠标按下时卡片的平移和层级。
HTML元素
<div class="container">
是一个容器元素,包含了多个卡片元素。<div class="card" style="--i:-4">1</div>
等元素是卡片元素,通过CSS变量--i
控制旋转角度。
实现原理
这段代码通过CSS的伪类选择器和变量实现了卡片的动态效果。当鼠标悬停在容器上时,卡片会根据CSS变量 --i
的值进行旋转和平移,从而产生动态效果。当鼠标按下时,卡片会改变背景颜色,并进一步平移和提升层级。
完整的代码:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style type="text/css">* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Poppins', sans-serif;}body {display: flex;justify-content: center;align-items: center;min-height: 100vh;background-color: #0f0f0f;overflow: hidden;}.container {position: relative;width: 100%;display: flex;justify-content: center;align-items: center;}.container .card {/* 设置卡片的位置、大小、背景颜色、边框、过渡效果、旋转原点、颜色、字体大小、字体粗细、阴影 */position: absolute;width: 240px;height: 360px;background-color: #5e5cfc;border-radius: 8px;display: flex;justify-content: center;align-items: center;color: rgba(0, 0, 0, 0);font-size: 8em;font-weight: 700;border: 10px solid rgba(0, 0, 0, .1);transition: .5s;transform-origin: 50% 100%;filter: hue-rotate(calc(var(--i)*60deg));box-shadow: 0 15px 50px rgba(0, 0, 0, .1);}.container:hover .card {/* 设置鼠标悬停时的卡片旋转、平移、阴影、颜色、光标样式 */transform: rotate(calc(var(--i)*5deg)) translate(calc(var(--i)*120px), -50px);box-shadow: 0 15px 50px rgba(0, 0, 0, .25);color: rgba(0, 0, 0, .25);cursor: pointer;}.container:active .card:not(:active) {/* 设置鼠标按下时的卡片背景颜色 */background-color: #333;}.container .card:active {/* 设置鼠标按下时的卡片平移、层级 */translate: calc(var(--i)*20px) -50px;z-index: 999;}</style></head><body><div class="container"><!-- 设置每个卡片的样式,使用CSS变量--i来控制旋转角度 --><div class="card" style="--i:-4">1</div><div class="card" style="--i:-3">2</div><div class="card" style="--i:-2">3</div><div class="card" style="--i:-1">4</div><div class="card" style="--i:0">5</div><div class="card" style="--i:1">6</div><div class="card" style="--i:2">7</div><div class="card" style="--i:3">8</div><div class="card" style="--i:4">9</div></div></body>
</html>
感谢你的阅读~
如果文章对你有用的话请点个赞支持一下吧~