CSS实现一个交互感不错的卡片列表功能
薛定谔的壳
0、需求分析
- 横向滚动
- 鼠标悬停时突出显示
- 默认堆叠展示
- 鼠标悬停时,完整展示当前块+适当旋出效果
- 移动端样式优化、磁吸效果
- 美化滚动条
1、涉及的主要知识块
- flex 布局
- css 简单变换+过渡
- transform、transition
- 渐变色函数
- linear-gradient
- …
- 伪类、伪元素
- 滚动条、::after、 ::before
- …
2、实现效果
3、代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>卡片</title> <style> :root{ --pcWidth: 700px; --mbWidth: calc(100%-30px); } *{ margin: 0; padding: 0; } body{ background-color: #3a3939; } @media (min-width: 1200px) { .wrapper{ width: calc(var(--pcWidth) + 30px); } .article-wrapper{ width: var(--pcWidth); } } @media (max-width: 1200px){ .wrapper{ width: var(--mbWidth); } .article-wrapper{ width: var(--mbWidth); } } .wrapper{ height: fit-content; position: relative; margin: 0 auto; } .wrapper::after{ content: " "; position: absolute; top: 50px; bottom: 28px; right: 0; width: 6px; background: linear-gradient(45deg, #df0684, #c90700 20%, #f2a500 90%); border-radius: 3px 2px 2px 3px; z-index: 2; box-shadow: -8px 0 12px 2px #000; } .article-wrapper{ position: relative; overflow-x: scroll; scroll-snap-type: x mandatory; display: flex; color: white; padding: 50px 0 20px 30px; } .article-wrapper::-webkit-scrollbar{ width: 8px; height: 8px; } .article-wrapper::-webkit-scrollbar-thumb{ height: 5px; background: linear-gradient(.8deg, #05CB98, #0098C9 40%, #F25A00 80%); border-radius: 10px; } .wrapper .item{ min-width: 180px; background: linear-gradient(85deg, #4e4e4e, #222222); border-radius: 9px; box-shadow: -73px 0 66px -20px #000000; transition: .2s; scroll-snap-align: start; scroll-snap-stop: always; } .wrapper .item:not(:first-child){ margin-left: -50px; } .wrapper .item:hover{ transform: translateY(-8px) rotate(2deg); } .wrapper .item:hover~.item{ transform: translateX(59px); } .wrapper .item .title{ overflow-y: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; margin: 6px 8px; } .wrapper .item .cover{ width: 100%; height: 150px; background: linear-gradient(134deg, #05CB98, #0098C9 40%, #F25A00 80%); } .wrapper .item .detail{ font-size: 14px; overflow-y: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; padding: 0 9px; margin: 8px 0; } </style> </head> <body> <div class="wrapper"> <div class="article-wrapper"> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> <article class="item"> <h5 class="title">这是一个标题,可能会有好多个字,然后导致两行展示不了,需要省略一下</h5> <div class="cover"></div> <div class="detail">黑夜从大地上升起遮住了光明的天空丰收后荒凉的大地黑夜从你内部升起你从远方来, 我到远方去遥远的路程经过这里天空一无所有为何给我安慰丰收之后荒凉的大地人们取走了一年的收成取走了粮食骑走了马留在地里的人, 埋的很深草叉闪闪发亮, 稻草堆在火上稻谷堆在黑暗的谷仓谷仓中太黑暗, 太寂静, 太丰收</div> </article> </div> </div> </body> </html>
到此这篇关于CSS实现一个交互感不错的卡片列表的文章就介绍到这了,更多相关css卡片列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!