css学习-内容加载占位动画(渐变动画)

news2024/11/28 2:32:35

文章目录

    • 学习链接
      • 纯CSS渐变动画
      • 结合vue指令简单使用

学习链接

Git Hub前端50天50个项目 | 第24 内容文本

纯CSS渐变动画

在这里插入图片描述

<style lang="scss" scoped>
.card-wrapper {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.card {
    width: 260px;
    border-radius: 6px;
    overflow: hidden;
    background-color: #fff;
    box-shadow: 0 2px 5px 0 rgba(0,0,0,0.05);
    .card-header {
        height: 170px;
    }
}



// 卡片头部图片
.card-header img {
    width: 100%;
}

// 卡片内容
.card-content {
    padding: 20px;
    .card-title {
        font-weight: bold;
    }
    .card-bio {
        margin: 5px 0 10px;
        font-size: 14px;
        color: #7c7c7c;
    }

    .author {
        display: flex;
        .author-avatar {
            width: 42px;
            height: 42px;
            border-radius: 50%;
            overflow: hidden;
            flex-shrink: 0;
        }
        .author-intro {
            padding-left: 8px;
            flex: 1;
            overflow: hidden;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            .author-name {
                font-size: 16px;

                text-decoration: none;
                color: #000;

                text-overflow: ellipsis;
                white-space: nowrap; /* white-space属性为nowrap时,不会因为超出容器宽度而发生换行 */
                overflow: hidden;
            }
            .author-date {
                font-size: 13px;
                color: #7c7c7c;
            }
        }

    }

  
}

.animated_txt {
    height: 20px;
    border-radius: 8px;
}
.animated_bg {
    /* 使用渐变作为元素图片,注意这里面的图片是个矢量图片(即:不管放多大,也不会失真。并且元素有多大,它这个背景图片就有多大)*/
    /* 1. 第一个参数是渐变方向
       2. 后面参数,可以理解为:现确定什么颜色的油漆, 然后从什么位置开始刷, 然后中间渐变
    */
    background-image: linear-gradient(to right, 
    #f6f7f8 0,
    #d0d1d2 25%,
    #f6f7f8 50%,
    #f6f7f8 100%
    );
    
    /* 将背景图片(渐变背景)的x轴方向,设置为元素大小的2倍
       为什么要改成2倍呢?
       因为background-position设置背景图片的位移百分比,
       是相对于 元素的大小 减去 背景图片的大小 的百分比,
       而默认情况下,这个矢量渐变背景与元素大小相同,因此设置百分比无效(0乘以任何数都是0)。 
    */
    background-size: 200% 100%;

    // background-position: 0% 0;
    animation: grad 1s linear infinite;
}

@keyframes grad {
    0% {
        background-position: 0% 0;
    }
    100% {
        background-position: -200% 0;
    }
}



</style>

<template>

    <div class="card-wrapper">
    
        <div class="card">
        
            <div class="card-header animated_bg">
                <!-- <img class="img" src="http://119.23.61.24/api/static/img/article/90876672-26ec54f7c7ea7d27b3079ec685effdf2.jpg" alt=""> -->
            </div>
            
            <div class="card-content">
            
                <div class="card-title animated_bg animated_txt">
                    <!-- PSCOOL的签名 -->
                </div>
                
                <p class="card-bio animated_bg animated_txt">
                    <!-- 热爱技术, 一点点的学习 -->
                </p>
                
                <div class="author">
                    <a href="#" class="author-avatar animated_bg">
                        <!-- <img class="img" src="http://119.23.61.24/api/static/img/avatar/avatar.png" alt=""> -->
                    </a>
                    <div class="author-intro">
                        <a href="#" class="author-name animated_bg animated_txt">
                            <!-- PSCOOL -->
                        </a>
                        <div class="author-date animated_bg animated_txt">
                            <!-- 2023-05-21 -->
                        </div>
                    </div>
                </div>
                
            </div>
            
        </div>
        
    </div>
    
</template>

<script>

export default {
    name: '',
    components: {
        
    },
    methods: {
        
    }
}
</script>

结合vue指令简单使用

在这里插入图片描述

  • 在vue指令刚开始绑定到元素上时,给元素加上animated_bg样式,让它产生动画。自定义指令中添加txt修饰符,给默认文本一个高度。
  • 点击按钮时,更新了cardInfo响应式数据的值,当子组件中有用到这个响应式数据时,v-animated_bg指令的componentUpdated方法就会触发,在这个钩子函数中移除值。
<style lang="scss" scoped>
.card-wrapper {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.card {
    width: 260px;
    border-radius: 6px;
    overflow: hidden;
    background-color: #fff;
    box-shadow: 0 2px 5px 0 rgba(0,0,0,0.05);
    .card-header {
        height: 170px;
    }
}



// 卡片头部图片
.card-header img {
    width: 100%;
}

// 卡片内容
.card-content {
    padding: 20px;
    .card-title {
        font-weight: bold;
    }
    .card-bio {
        margin: 5px 0 10px;
        font-size: 14px;
        color: #7c7c7c;
    }

    .author {
        display: flex;
        .author-avatar {
            width: 42px;
            height: 42px;
            border-radius: 50%;
            overflow: hidden;
            flex-shrink: 0;
        }
        .author-intro {
            padding-left: 8px;
            flex: 1;
            overflow: hidden;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            .author-name {
                font-size: 16px;

                text-decoration: none;
                color: #000;

                text-overflow: ellipsis;
                white-space: nowrap; /* white-space属性为nowrap时,不会因为超出容器宽度而发生换行 */
                overflow: hidden;
            }
            .author-date {
                font-size: 13px;
                color: #7c7c7c;
            }
        }

    }

  
}

.animated_txt {
    height: 20px;
    border-radius: 8px;
}
.animated_bg {
    /* 使用渐变作为元素图片,注意这里面的图片是个矢量图片(即:不管放多大,也不会失真。并且元素有多大,它这个背景图片就有多大)*/
    /* 1. 第一个参数是渐变方向
       2. 后面参数,可以理解为:现确定什么颜色的油漆, 然后从什么位置开始刷, 然后中间渐变
    */
    background-image: linear-gradient(to right, 
    #f6f7f8 0,
    #d0d1d2 25%,
    #f6f7f8 50%,
    #f6f7f8 100%
    );
    
    /* 将背景图片(渐变背景)的x轴方向,设置为元素大小的2倍
       为什么要改成2倍呢?
       因为background-position设置背景图片的位移百分比,
       是相对于 元素的大小 减去 背景图片的大小 的百分比,
       而默认情况下,这个矢量渐变背景与元素大小相同,因此设置百分比无效(0乘以任何数都是0)。 
    */
    background-size: 200% 100%;

    // background-position: 0% 0;
    animation: grad 1s linear infinite;
}

@keyframes grad {
    0% {
        background-position: 0% 0;
    }
    100% {
        background-position: -200% 0;
    }
}



</style>

<template>
    <div class="card-wrapper">
        <button @click="getData">button</button>
        <div class="card">
            <div class="card-header" v-animated-bg.img>
                <img v-if="cardInfo.bgUrl" class="img" :src="cardInfo.bgUrl" alt="">
            </div>
            <div class="card-content">
                <div class="card-title" v-animated-bg.txt>
                    <!-- PSCOOL的签名 --> {{ cardInfo.title }}
                </div>
                <p class="card-bio" v-animated-bg.txt>
                    <!-- 热爱技术, 一点点的学习 --> {{ cardInfo.bio }}
                </p>
                <div class="author">
                    <a href="#" class="author-avatar"  v-animated-bg.img>
                        <img v-if="cardInfo.avatar" class="img" :src="cardInfo.avatar" alt="">
                    </a>
                    <div class="author-intro">
                        <a href="#" class="author-name" v-animated-bg.txt>
                            <!-- PSCOOL --> {{ cardInfo.authorName }}
                        </a>
                        <div class="author-date"  v-animated-bg.txt>
                            <!-- 2023-05-21 --> {{ cardInfo.date }}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>

export default {
    name: '',
    components: {
        
    },
    data() {
        return {
            a:'',
            cardInfo: {
               
            }
        }
    },
    methods: {
        getData() {
            this.cardInfo = {
                bgUrl: 'http://119.23.61.24/api/static/img/article/90876672-26ec54f7c7ea7d27b3079ec685effdf2.jpg',
                title: 'PSCOOL的签名',
                bio: ' 热爱技术, 一点点的学习',
                avatar: 'http://119.23.61.24/api/static/img/avatar/avatar.png',
                authorName: 'PSCOOL',
                date: '2023-05-21'
            }
        }
    },
    directives: {
        'animated-bg': {
            bind(el, binding, vnode) {
                console.log(el,'el-bind');
                el.classList.add('animated_bg')
                if(binding.modifiers.txt) {
                    el.classList.add('animated_txt')
                }
            },
            componentUpdated(el, binding) {
                console.log(el,'el-componentUpdated');
                el.classList.remove('animated_bg')
                el.classList.remove('animated_text')
            }

        }
    }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tinymce富文本编辑器使用到二开

tinymce tinymce 一款现代化的富文本编辑器&#xff0c;有专门团队维护&#xff0c;是目前主流的富文本编辑器选择。 安装注意事项&#xff1a; 有两种方案分别是安装对应的vue/react组件&#xff0c;然后直接用组件&#xff0c;或者直接使用tinymce去按原生操作会报找不到文…

HTML- 标签学习之- 列表、表格

无序列表/有序列表&#xff1a; 标签组成( 无序ul 有序 ol ) -> li 父子级标签&#xff0c; ul只能包含li标签&#xff0c; li标签可以包含任意内容。 自定义列表 dl :自定义列表的整体&#xff0c;用于包裹dt/dd 标签dt:自定义列表主题dd:自定义列表的针对主题的…

【VMware】VM安装虚拟机

文章目录 VMware教程创建新的虚拟机自定义安装选择稍后安装操作系统这里选择Linux操作系统&#xff0c;版本为Centos7 64位选择名称和安装位置选择处理器、内核数量&#xff08;可根据电脑硬件以及需求进行调整&#xff09;选择2G内存&#xff08;可根据电脑硬件以及需求进行调…

计算机视觉 day94 DDH - YOLOv5:基于双IoU感知解耦头改进的YOLOv5,用于对象检测

DDH - YOLOv5:基于双IoU感知解耦头改进的YOLOv5&#xff0c;用于对象检测 I. IntroductionII. Related workPrediction head 预测头 III. Methodology3.1 Decoupled Head3.2 Double IoU‑aware3.3 Training3.4 Inference IV. Experiments4.1 与YOLOv5等检测头对PASCAL VOC2007测…

Netty实战(五)

ByteBuf—Netty的数据容器 一、什么是ByteBuf二、 ByteBuf 的 API三、ByteBuf 类——Netty 的数据容器3.1 ByteBuf如何工作&#xff1f;3.2 ByteBuf 的使用模式3.2.1 堆缓冲区3.2.2 直接缓冲区3.2.3 复合缓冲区 四、字节级操作4.1 随机访问索引4.2 顺序访问索引4.3 可丢弃字节4…

使用Docker部署Jenkins

Jenkins是一款开源的持续集成&#xff08;DI&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;能提供自动构建&#xff0c;测试&#xff0c;部署等功能。 文章目录 1、安装2、配置镜像加速3、登录初始化Jenkins4、配置Jenkins 1、安装 接下来使用Docker部署Jenkins&a…

【腾讯云 Finops Crane集训营】关于Crane的认识和体验总结

一、Crane 是什么 Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保证客户应用运行质量的前提下实现极致的降本。Crane 是 FinOps 基金会认证的云优化方案。 Crane基于Docker和Kubernetes技术&#xff0c;支持常见的容器化应用场景&#xff0c;如部署多个…

分布式项目 09.服务器之间的通信和三个工具类

项目的结构&#xff1a;1.通过Nginx首先把访问首页的请求发送到前端web服务器&#xff0c;2.web服务器会根据请求的url中的一些细节&#xff0c;来把相关的请求发送到相关的服务器中&#xff0c;3.相关的服务器会处理业务&#xff0c;并且返回结果到web服务器中&#xff0c;最后…

Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Nodes and Scenes — Godot Engine (stable) documentation in English 节点和场景 在Godot 关键概念概述中&#xff0c;我们看到 Godot 游戏是一棵场景树&#xff0…

算法训练-二分查找

这里写目录标题 34. 在排序数组中查找元素的第一个和最后一个位置162. 寻找峰值153. 寻找旋转排序数组中的最小值33. 搜索旋转排序数组 34. 在排序数组中查找元素的第一个和最后一个位置 题目链接 vector<int> searchRange(vector<int>& nums, int target) {i…

集合 集合

目录 ArraryList 引用基本类型 案例1&#xff1a;定义一个集合添加学生姓名年龄 案例2&#xff1a;查看是否存在这个id 案例3&#xff1a;手机 案例4&#xff1a;学生管理系统&#xff08;不完整&#xff09; Collection collection遍历方式 迭代遍历&#xff08;不依赖…

深度学习用于医学预后-第二课第四周13-15节-使用生存数的非线性风险评估模型

使用生存数的非线性风险评估模型 在这堂课中&#xff0c;你将学习关于生存树的知识。你将学习如何将患者的变量纳入考虑&#xff0c;比较不同患者的风险。 你将看到生存树与二叉决策树相似&#xff0c;可以让你构建模型来捕捉患者数据中的非线性关系。 在这堂课中&#xff0…

分布式运用之rsync远程同步

1.rsync的相关知识 1.1 rsync简介 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09;是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限&#xff0c;且采用优化的同步算法&#…

怎么使用树莓派总要了解一点它的软硬件吧。什么模块有什么用,需要什么准备才能安全的看到树莓派的开机界面

Raspberry Pi(中文名为“树莓派”,简写为 RPi&#xff0c;(或者 RasPi / RPI)只有信用卡大小的微型电脑&#xff0c;其系统基于 Linux。随着 Windows 10 IoT 的发布&#xff0c;我们也将可以用上运行 Windows IoT 的树莓派。别看其外表“娇小”&#xff0c;内“心”却很强大&am…

Doxygen 源码分析: SymbolMap类

2023-05-21 10:59:35 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. Doxygen 版本2. SymbolMap 类概要3. 添加符号: SymbolMap<T>::add()4. 删除符号: SymbolMap<T>::remove()5. 符号查找: SymbolMap<T>::find()6. 哪里用了…

1.golang的介绍、环境安装和编译器安装

一、Go的介绍 Go语言其实是Golanguage的简称&#xff0c;Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。Go 语言语法与 C 相近&#xff0c;但功能上有&#xff1a;内存安全…

Doxygen 源码分析: Definition类

2023-05-21 13:05:28 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz Blog https://blog.csdn.net/baiyu33 文章目录 1. Doxygen 版本2. Definition 类和它的8个子类3. Definition 类的 Private 成员4. Definition 类的 Public 成员4.1 特殊成员函数4.2 获…

(学习日记)AD学习 #1

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Linux基本操作指令2

目录 指令1&#xff1a;rmdir指令&#xff1a; 指令2&#xff1a;rm命令&#xff1a; 指令3&#xff1a;man指令&#xff1a; 指令4&#xff1a;cp指令&#xff1a; 指令5&#xff1a;mv指令&#xff1a;类似于Windows的剪贴 指令6&#xff1a;cat指令 指令7&#xff1a;…

QT5.15.0使用gcc-arm-8.2-2018.08-x86_64-arm-linux-gnueabihf交叉编译的问题总结

目录 一、交叉编译 二、操作中踩过的坑 1、环境变量未生效 2、交叉编译QT代码操作 3、烧录时报错缺少xcb问题 4、小白的细小错误 三、--platform命令 3、1 -platform linuxfb 详细文档请点击此处 我的文档在原文档的基础上添加了非常详细的提醒&#xff0c;可以少走弯路…