动画效果案例

20 阅读2分钟

两面翻转的盒子效果

     <div class="scene">
            <div class="card">
                <div class="card__face">正面</div>
                <div class="card__face card__face--back">侧面</div>
            </div>
            <div class="card">
                <div class="card__face">正面</div>
                <div class="card__face card__face--back">侧面</div>
            </div>
        </div>

    .scene {
        display: flex;
        justify-content: space-between;
        width: 1000px;
        perspective: 1000px;

    .card {
        position: relative;
        width: 240px;
        height: 300px;
        cursor: pointer;
        color: white;
        transform-style: preserve-3d;
        transition: 1s ease-in-out;

        &:hover {
            transform: rotateY(180deg);
        }

        .card__face {
            position: absolute;
            background-color: blueviolet;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            -webkit-box-reflect: below 0 //倒影效果
                linear-gradient(transparent, transparent, rgba(0, 0, 0, 0.4));
            backface-visibility: hidden;
            transition: 1s ease-in-out;

            //   img {
            //     width: 240px;
            //     object-fit: cover;
            //   }
            &--back {
                transform: rotateY(180deg);
            }
        }
    }
}

卡片折叠效果

<ul>
   <li>1</li>
   <li>1</li>
   <li>1</li>
   <li>1</li>
</ul>

 ul{
    margin: 0 auto;
    width: 800px;
    height: 200px;
    display: grid;
    grid-template-columns: 2fr 1fr 1fr 1fr;
    gap: 10px;
    transition: all 1s;
    li{
        background-color: pink;
    }
}

// has当鼠标经过li的时候选择父元素ul
ul:has(li:nth-child(1):hover){
    grid-template-columns: 2fr 1fr 1fr 1fr;
}
ul:has(li:nth-child(2):hover){
    grid-template-columns: 1fr 2fr 1fr 1fr;
}
ul:has(li:nth-child(3):hover){
    grid-template-columns: 1fr 1fr 2fr 1fr;
}
ul:has(li:nth-child(4):hover){
    grid-template-columns: 1fr 1fr 1fr 2fr;
}       

图片无缝滚动

 <div class="box">
            <div class="scroll">
                <ul>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                </ul>
                <ul>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                    <li>1</li>
                </ul>
            </div>

        </div>
       
.box {
    width: 1180px;
    background-color: pink;
    margin: 0 auto;
    overflow: hidden;
    box-sizing: border-box;
    position: relative;
    padding: 20px 0; /* 添加顶部底边距 */
}
// //鼠标移入停止动画
.box:hover .scroll {
    animation-play-state: paused;
}

.scroll {
    display: flex;
    animation: scroll 10s linear infinite;
    will-change: transform; /* 性能优化 */
}

ul {
    box-sizing: border-box;
    display: grid;
    grid-template-columns: repeat(6, 180px);
    grid-template-rows: repeat(4,90px);
    gap: 16px 20px;
    flex-shrink: 0; /* 防止内容压缩 */
    width: 1180px; /* 明确宽度 */
}
ul:nth-child(1) {
    margin-right: 20px;
}

ul li {
    width: 180px;
    background-color: #fff;
    text-align: center;
    height: 90px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px; /* 添加圆角 */
    box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 添加阴影 */
    font-weight: bold;
    font-size: 1.2rem;
}

@keyframes scroll {
    0% {
        transform: translateX(0);
    }
    100% {
        transform: translateX(-1200px); /* 精确移动一个容器宽度 */
    }
}

鼠标悬停放大当前

div class="box">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

.box{
    width: 600px;
    margin: 10px auto;
    display: flex;
    justify-content: space-between;
    align-items: center;
    .item{
        position: relative;
        width: 120px;
        height: 120px;
        margin: 0 2px;
        background-color: aqua;
        -webkit-box-reflect: below 0 //倒影效果
                linear-gradient(transparent, rgba(0, 0, 0, 0.4));
        transition: all 0.5s;        
    }
}
.box .item:hover{
    transform: scale(1.2);
    z-index: 1;
}
// 鼠标经过某个盒子,其余的子盒子都变形,当前盒子不变形
.box:hover .item:not(:hover){
    transform: perspective(500px) scale(0.9) rotateY(45deg);
}
//鼠标经过的盒子后面的兄弟修改下变形
.box .item:hover~.item{
    transform: perspective(500px) scale(0.9) rotateY(-45deg);
}