首页 > 其他分享 >【技术实战】Vue功能样式实战【七】

【技术实战】Vue功能样式实战【七】

时间:2023-08-13 14:36:11浏览次数:32  
标签:实战 info Vue 卡片 样式 transform height font card

需求实战一

样式展示

代码展示

<template>
    <transition name="fade-in" appear>
        <ARow v-if="show">
            <ACol>
                <div class="info-card">
                    <div class="info-title">
                        数据总和
                    </div>
                    <div class="info-value">
                        100
                    </div>
                </div>
            </ACol>
        </ARow>
    </transition>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const show = ref(false);

// 在需要的时候触发过渡效果
setTimeout(() => {
    show.value = true;
}, 1000);
</script>

<style scoped>
.fade-in-enter-active {
    animation: fade-in 1s;
}

@keyframes fade-in {
    from {
        opacity: 0;
        transform: translateX(-100px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.info-card {
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23,179,163,0.07);
    border-radius: 4px;
}

.info-title {
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding: 20px 0 20px 30px;
}

.info-value {
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding: 0 0 0 30px;
}
</style>

 代码解读

这段代码是一个Vue组件,实现了一个渐入效果的过渡动画。下面是对代码的解读:

1. <template> 标签中定义了组件的模板结构。
2. <transition> 标签用于包裹需要过渡的元素,通过 name 属性指定过渡效果的名称为 "fade-in",并设置 appear 属性为 true,表示组件初次渲染时也会触发过渡效果。
3. <ARow> 和 <ACol> 是自定义的组件,用于布局。
4. <div class="info-card"> 是一个信息卡片的容器。
5. <div class="info-title"> 显示信息的标题。
6. <div class="info-value"> 显示信息的数值。
7. v-if="show" 表示只有当 show 的值为 true 时,才会渲染 <ARow> 组件及其子组件,从而触发过渡效果。
8. <script setup> 标签中使用了 Vue 3 的新特性,通过 ref 创建了一个响应式的变量 show,初始值为 false。
9. setTimeout 函数用于在1秒后将 show 的值设置为 true,从而触发过渡效果。
10. <style scoped> 标签中定义了组件的样式,其中 .fade-in-enter-active 是过渡效果的关键帧动画,实现了渐入效果。
11. .info-card、.info-title 和 .info-value 是信息卡片的样式。

这段代码实现了一个简单的渐入效果的过渡动画,通过控制 show 的值来触发过渡效果的显示

需求实战二

样式展示

代码展示

<template>
    <ARow>
        <ACol>
            <div class="info-card" :class="{ 'blinds-transition': showBlinds }">
                <div class="info-title">
                    数据总和
                </div>
                <div class="info-value">
                    100
                </div>
            </div>
        </ACol>
    </ARow>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';

const showBlinds = ref(false);

onMounted(() => {
    showBlinds.value = true;
});
</script>
<style scoped>
:deep(.info-card){
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23,179,163,0.07);
    border-radius: 4px;
    overflow: hidden;
    position: relative;
}

:deep(.info-card.slide-out) {
    height: 0;
}

:deep(.info-title){
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding:20px 0 20px 30px;
}

:deep(.info-value){
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding:0 0 0 30px;
}
.blinds-transition {
    animation: blinds 1s ease-in-out forwards;
}

@keyframes blinds {
    0% {
        height: 0;
    }
    100% {
        height: 116px;
    }
}
</style>

代码解读

这段代码是一个Vue组件的模板部分,用于展示一个信息卡片。具体解读如下:

1. 在模板中,使用了<ARow>和<ACol>组件来创建一个行列布局,将信息卡片放置在列中。
2. 信息卡片使用了一个<div>元素,并添加了一个名为info-card的类。通过:class绑定,可以根据showBlinds的值来动态添加blinds-transition类,实现卡片的动画效果。
3. 卡片内部包含了一个标题和一个数值,分别使用info-title和info-value类进行样式设置。
4. 在<script setup>中,引入了Vue的ref和onMounted函数。showBlinds是一个响应式的变量,初始值为false。在组件挂载后,通过onMounted钩子函数,将showBlinds的值设置为true,从而触发动画效果。
5. 在<style scoped>中,使用:deep()选择器来设置卡片的样式。其中,.info-card表示卡片的样式,.info-card.slide-out表示卡片收起时的样式。
6. blinds-transition类使用了CSS动画blinds,在1秒的时间内,将卡片的高度从0过渡到116px,实现展开的效果。

这段代码可以用于展示一个数据总和的信息卡片,并通过动画效果使卡片在页面加载后逐渐展开显示。

需求实战三

样式展示

代码展示

<template>

    <ARow>
        <ACol >
            <div class="info-card">
                <div class="info-title">
                    数据总和
                </div>
                <div class="info-value">
                    100
                </div>
            </div>
        </ACol>
    </ARow>

</template>

<script setup lang="ts">



</script>

<style scoped>
:deep(.info-card) {
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23, 179, 163, 0.07);
    border-radius: 4px;
    animation: shake 1s ease-in-out infinite;
    transition: transform 0.5s ease-in-out;
}

@keyframes shake {
    0% {
        transform: rotate(0deg);
    }
    10% {
        transform: rotate(20deg);
    }
    20% {
        transform: rotate(40deg);
    }
    30% {
        transform: rotate(20deg);
    }
    40% {
        transform: rotate(-30deg);
    }
    100% {
        transform: translateY(800px);
    }
}

:deep(.info-title) {
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding: 20px 0 20px 30px;
}

:deep(.info-value) {
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding: 0 0 0 30px;
}

:deep(.info-card.exit) {
    transform: translateY(200px);
}
</style>

代码解读

这段代码是一个Vue组件的模板部分,用于展示一个信息卡片。具体解读如下:

- 在<template>标签中,定义了一个ARow组件,表示一个行容器。
- 在<ARow>标签中,定义了一个ACol组件,表示一个列容器。
- 在<ACol>标签中,定义了一个div元素,具有info-card类名,表示一个信息卡片。
- 在<div class="info-card">中,包含了两个子元素:
  - 一个具有info-title类名的div元素,用于显示信息标题。
  - 一个具有info-value类名的div元素,用于显示信息值。
- 在<script>标签中,暂时没有任何代码。
- 在<style>标签中,定义了一些样式规则:
  - .info-card类选择器表示选择所有具有info-card类名的元素,设置了宽度、高度、背景颜色、阴影、边框圆角、动画和过渡效果。
  - @keyframes shake表示定义了一个名为shake的关键帧动画,实现了一个卡片抖动的效果。
  - .info-title类选择器表示选择所有具有info-title类名的元素,设置了字体大小、字体样式、颜色、行高和内边距。
  - .info-value类选择器表示选择所有具有info-value类名的元素,设置了字体大小、字体样式、颜色、行高和内边距。
  - .info-card.exit类选择器表示选择所有具有info-card和exit类名的元素,设置了一个向下平移的动画效果。

这段代码的作用是展示一个带有坠落效果的信息卡片,其中包含一个标题和一个数值。

需求实战四

样式展示

代码展示

<template>
    <ARow>
        <ACol>
            <div class="info-card" :class="{ 'fade-out': isFadeOut }">
                <div class="info-title">
                    数据总和
                </div>
                <div class="info-value">
                    100
                </div>
            </div>
        </ACol>
    </ARow>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';

const isFadeOut = ref(false);

onMounted(() => {
    setTimeout(() => {
        isFadeOut.value = true;
    }, 2000);
});
</script>

<style scoped>
.info-card {
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23, 179, 163, 0.07);
    border-radius: 4px;
    transition: opacity 0.5s ease;
}

.fade-out {
    opacity: 0;
}
.info-title {
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding: 20px 0 20px 30px;
}

.info-value {
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding: 0 0 0 30px;
}
</style>

代码解读

这段代码是一个Vue组件的模板部分,用于展示一个带有淡出效果的信息卡片。具体解读如下:

- 在<template>标签中,定义了一个ARow组件,表示一个行容器。
- 在<ARow>标签中,定义了一个ACol组件,表示一个列容器。
- 在<ACol>标签中,定义了一个div元素,具有info-card类名,并使用了动态类绑定fade-out,根据isFadeOut的值来决定是否添加fade-out类名。
- 在<div class="info-card">中,包含了两个子元素:
  - 一个具有info-title类名的div元素,用于显示信息标题。
  - 一个具有info-value类名的div元素,用于显示信息值。
- 在<script>标签中,使用了Vue的ref和onMounted函数:
  - isFadeOut是一个响应式引用,初始值为false。
  - onMounted函数在组件挂载后执行,通过setTimeout函数延迟2秒后将isFadeOut的值设置为true,从而触发淡出效果。
- 在<style>标签中,定义了一些样式规则:
  - .info-card类选择器表示选择所有具有info-card类名的元素,设置了宽度、高度、背景颜色、阴影和边框圆角,以及一个过渡效果。
  - .fade-out类选择器表示选择所有具有fade-out类名的元素,设置了透明度为0,实现了淡出效果。
  - .info-title类选择器表示选择所有具有info-title类名的元素,设置了字体大小、字体样式、颜色、行高和内边距。
  - .info-value类选择器表示选择所有具有info-value类名的元素,设置了字体大小、字体样式、颜色、行高和内边距。

这段代码的作用是展示一个带有淡出效果的信息卡片,并在组件挂载后延迟2秒触发淡出效果。

需求实战五

样式展示

代码展示

<template>
    <ARow :class="{ 'erased': isErased }">
        <ACol>
            <div class="info-card" >
                <div class="info-title">
                    数据总和
                </div>
                <div class="info-value">
                    100
                </div>
            </div>
        </ACol>
    </ARow>
<br>
    <ARow style="padding:20px 0 0 0">
        <ACol>
            <div class="info-card"  :class="{ 'erased': isErased }">
                <div class="info-title">
                    数据总和
                </div>
                <div class="info-value">
                    100
                </div>
            </div>
        </ACol>
    </ARow>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue';

const isErased = ref(false);

onMounted(() => {
    setTimeout(() => {
        isErased.value = true;
    }, 2000);
});
</script>

<style scoped>
.info-card {
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23, 179, 163, 0.07);
    border-radius: 4px;
    position: relative;
    overflow: hidden;
}

.erased:after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
    animation: erase 5s linear forwards infinite;
}

@keyframes erase {
    0% {
        transform: translateX(-100%);
    }
    100% {
        transform: translateX(0);
    }
}

.info-title {
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding: 20px 0 20px 30px;
}

.info-value {
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding: 0 0 0 30px;
}
</style>

代码解读

这段代码是一个Vue组件模板,用于展示一个信息卡片。代码中使用了Vue的响应式数据和动态类绑定。

首先,在模板中定义了两个信息卡片,分别位于两个<ARow>和<ACol>组件中。每个信息卡片都有一个标题和一个数值。

在<script setup>部分,使用了Vue的ref函数创建了一个名为isErased的响应式数据,默认值为false。然后,在onMounted生命周期钩子中,通过setTimeout函数将isErased的值设置为true,即2秒后将信息卡片擦除。

在<style scoped>部分,定义了信息卡片的样式。.info-card类设置了卡片的宽度、高度、背景颜色、阴影和圆角等样式。.erased:after伪类定义了擦除效果的动画,通过transform属性实现了从左侧滑入的效果。.info-title和.info-value类分别定义了标题和数值的样式。

总的来说,这段代码实现了一个信息卡片的展示,并在2秒后通过动画将卡片擦除的效果。你可以根据这段代码的思路,写一篇关于Vue组件开发和动态类绑定的博客。 

需求实战六

样式展示

代码展示

<template>
    <transition name="fade-in" appear>
        <ARow v-if="show">
            <ACol>
                <div class="info-card">
                    <div class="info-title">
                        数据总和
                    </div>
                    <div class="info-value">
                        100
                    </div>
                </div>
            </ACol>
        </ARow>
    </transition>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const show = ref(false);

// 在需要的时候触发过渡效果
setTimeout(() => {
    show.value = true;
}, 1000);
</script>

<style scoped>
.fade-in-enter-active {
    animation: fade-in 0.5s;
}

@keyframes fade-in {
    0% {
        transform: translateX(-200px) translateY(-200px);
    }
    20% {
        transform: translateX(-160px) translateY(-100px);
    }
    30% {
        transform: translateX(-120px) translateY(-140px);
    }
    40% {
        transform: translateX(-80px) translateY(-180px);
    }
    50% {
        transform: translateX(-60px) translateY(-150px);
    }
    60% {
        transform: translateX(-40px) translateY(-80px);
    }
    70% {
        transform: translateX(-20px) translateY(-120px);
    }
    80% {
        transform: translateX(-6px) translateY(-70px);
    }
    90% {
        transform: translateX(-3px) translateY(-40px);
    }
    100% {
        transform: translateX(0px) translateY(0px);
    }

}

.info-card {
    width: 318px;
    height: 116px;
    background-color: #bebebe;
    box-shadow: 0px 2px 10px 1px rgba(23,179,163,0.07);
    border-radius: 4px;
}

.info-title {
    font-size: 18px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #333333;
    line-height: 21px;
    padding: 20px 0 20px 30px;
}

.info-value {
    font-size: 36px;
    font-family: Microsoft YaHei;
    font-weight: bold;
    color: #333333;
    line-height: 21px;
    padding: 0 0 0 30px;
}
</style>

代码解读

这段代码是一个Vue组件,实现了一个渐入效果的过渡动画。下面是对代码的解读:

1. <template> 标签中定义了组件的模板结构。
2. <transition> 标签用于包裹需要过渡的元素,通过 name 属性指定过渡效果的名称为 "fade-in",并设置 appear 属性为 true,表示组件初次渲染时也会触发过渡效果。
3. <ARow> 和 <ACol> 是自定义的组件,用于布局。
4. <div class="info-card"> 是一个信息卡片的容器。
5. <div class="info-title"> 显示信息的标题。
6. <div class="info-value"> 显示信息的数值。
7. v-if="show" 表示只有当 show 的值为 true 时,才会渲染 <ARow> 组件及其子组件,从而触发过渡效果。
8. <script setup> 标签中使用了 Vue 3 的新特性,通过 ref 创建了一个名为 show 的响应式数据,并将其初始值设置为 false。
9. setTimeout 函数用于在一定时间后将 show 的值设置为 true,从而触发过渡效果。
10. <style scoped> 标签中定义了组件的样式,其中 .fade-in-enter-active 是过渡效果的关键帧动画,通过 transform 属性实现了元素的平移效果。
11. .info-card、.info-title 和 .info-value 是信息卡片的样式。

这段代码实现了一个简单的弹跳效果的过渡动画,通过控制 show 的值来触发过渡效果,使信息卡片从左上角渐渐移动到指定位置。

标签:实战,info,Vue,卡片,样式,transform,height,font,card
From: https://www.cnblogs.com/yyyyfly1/p/17626535.html

相关文章

  • vue项目部署到gitee
    1、首先本地项目生成静态网页npmrunbuild使用本命令将vue项目打包成静态网页存放到dist文件夹里2、将静态资源推到gitee仓库前提条件:新建了git仓库,然后 gitclone +仓库地址,拉到本地,将dist整个文件夹放到刚才拉下来的项目文件夹中。gitadddistgitcommit-m"部署......
  • Caddy 入门实战(2)--简单使用
    本文主要介绍Caddy的实际使用,配置Caddy使用Caddyfile+CLI的方式;文中所使用到的软件版本:Centos7.9.2009、Caddy2.4.6。1、配置日志{log{outputfile/home/mongo/soft/caddy_2.6.4/caddy.loglevelINFOformatconsole{......
  • 【技术实战】Vue功能样式实战【六】
    需求实战一样式展示代码展示<template><ARow><AColstyle="background-color:#F1F4F5"><divclass="info-card"><divclass="info-title">数据总和......
  • WPF自定义控件实战:自制上传文件显示进度按钮
    自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造。 目录按钮设置圆角按钮上传文件相关定义测试代码 话不多说直接看效果默认效果:上传效果:按钮设置圆角因为按钮本身没有CornerRadius属性,所......
  • Vue学习笔记:路由开发 Part 08 导航守卫
    vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。全局前置守卫可以使用 router.beforeEach 注册一个全局前置守卫。当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航......
  • VUE3_API 风格
    选项式API(OptionsAPI)使用选项式API,我们可以用包含多个选项的对象来描述组件的逻辑,例如 data、methods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例<script>exportdefault{//data()返回的属性将会成为响应式的状态/......
  • 使用create-vue创建vue3项目
    create-vue是vue3新的脚手架搭建项目工具,底层构建工具使用vite,而不是vue-cli的webpack。但不是说你不能用以前的vuecreate命令来创建vue3项目,你完全可以用vue-cli来创建。vite:https://cn.vitejs.dev/guide/#scaffolding-your-first-vite-project使用create-vue创建项目使用cr......
  • create-vue和vue-cli创建项目的差异
    这里对比的是vue-cli和create-vue创建vue3项目的文件中的内容差异。原来public中的index.html被移动到根目录:(原因见这里:)https://cn.vitejs.dev/guide/#index-html-and-project-root<!--不同点1:script放在了最前面,方便编写代码,实际上你给他放在最后面也没问题.script属......
  • vue3组合式api生命周期
    生命周期钩子函数Vue3:https://cn.vuejs.org/api/composition-api-lifecycle.htmlVue2:https://v2.cn.vuejs.org/v2/api/#选项-生命周期钩子Vue2(选项式)Vue3(选项式)Vue3(组合式Api)beforeCreate()beforeCreate()created()created()setup()beforeMount()bef......
  • vue3在父子组件使用v-model双向绑定
    父组件:<scriptsetup>importInputBoxfrom"@/compon/InputBox.vue";import{ref}from"vue";constcount=ref(100)</script><template><div>我是父组件,{{count}}<InputBoxv-model="count"&......