一个非常好看的前端Vue3登录页面

news2024/11/19 21:26:37

卡哇伊
Vue3+less+Element Plus

<template>
<div id="login">
    <div id="contain">
        <div id="left_card">
            <h1>欢迎来到我的Vue3大世界</h1>
            <span>Welcome to my Vue3 world</span>
        </div>
        <div id="right_card">
            <el-card class="el-card">
                <h2>欢迎登录</h2>
                <form  class="login" action="">
                    <input v-shake type="text" v-model="userLoginForm.username" placeholder="请输入账号">
                    <input v-shake type="password" v-model="userLoginForm.password" placeholder="请输入密码">
                </form>
                <div class="remember">
                    <input type="radio" name="" id="psd" class="radio"><label for="psd"></label>记住密码
                </div>
                <div class="message">
                    <span v-html="error"></span>
                </div>
                <div id="btn">
                    <button class="loginbtn"  @click="usreList">登陆</button>
                </div>
            </el-card>
        </div>
    </div>
    
</div>
</template>

<script>
import { useStore } from 'vuex'
import { useRouter } from 'vue-router'
import { getCurrentInstance, reactive , ref  } from '@vue/runtime-core'


export default {
    name:"appLogin",
    setup(){
        let userLoginForm = reactive({
            username:" ",
            password:" "
        })
        const store = useStore()
        const router = useRouter()
        const { proxy } = getCurrentInstance()
        let error = ref('')
        //获取用户登录信息
        async function usreList(){
            
        }
        //获取用户信息
        async function getUserInfo() {
                
        }
        return {
            userLoginForm,error, 
            usreList,getUserInfo,
        }    
    } 
}
</script>
//APP.vue里写margin:0;padding:0;
<style lang="less" scoped>
@keyframes animate {
    0%{
        filter: hue-rotate(0deg);
    }
    100%{
        filter: hue-rotate(360deg);
    }
}
#login{
    position: relative;
    width: 100vw;
    height: 100vh;
    background-image: url(./../assets/login_background.gif);
    background-size: 100% 100%;
    background-color:  #a7a8bd;
    #contain{
        height: 400px;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
        border-radius: 25px;
        border: 1px solid black;
        background-color: rgba(255, 255, 255, 0.1) !important;
        backdrop-filter: blur(5px);
        box-shadow: -5px -5px 10px rgb(39, 65, 65),
                     5px 5px 20px aqua;
        /* 5秒 infinite循环播放无限次 linear匀速  */
        animation: animate 5s linear infinite;
    }
}
#contain{
    display: flex;
    flex-direction:row;
    text-align:center;
    align-items: center;
    #left_card{
        width: 500px;
        h1{
            color: white;
            white-space: nowrap;
        }
        span{
            font-size: 1.2rem;
            text-align:center;
            color: white;
            white-space: nowrap;
        }   
    }
    #right_card{
        width: 400px;
        .el-card{
            margin: 0 45px;
            border-radius: 25px;
            background-color: rgba(255, 255, 255, 0.1);
        }
    }
}
#right_card{
    display: flex;
    justify-content: center;
    align-items: center;
    h2{
        margin-bottom: 5px;
    }
    .login{
        input{
            width: 80%;
            height: 45px;
            margin-top: 10px;
            border: 1px solid white;
            background-color: rgba(255, 255, 255, 0.5);
            border-radius: 10px;
            font-size: inherit;
            padding-left: 20px;
            outline: none;
        }
    }
    .remember{
        float: right;
        height: 26px;
        text-align: center;
        font-size: 1rem;
        position: relative;
        .radio{
            height: 1rem;
            width: 1rem;
            vertical-align:middle;
            margin-top: -2px;
            opacity: 0;
        }
        label {
            position: absolute;
            left: -2px;
            top: 5px;
            height: 1rem;
            width: 1rem;
            vertical-align:middle;
            margin-top: -2px;
            border-radius: 50%;
            border: 1px solid black;
        }
        //radio选中后修改labe内的内容 :after 选择器在被选元素的内容后面插入内容。
        input:checked + label::after {
            content: "";
            width: 0.6rem;
            height: 0.6rem;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            border-radius: 50%;
            background-color: rgba(207, 38, 38, 0.8);  
            border: 1px solid rgba(207, 38, 38, 0.8);
        }
    }
    .message{
        margin-top: 26px;
        font-size: 0.9rem;
        color: red;
    }
    .loginbtn{
        width: 100%;
        height: 35px;
        margin-top: 10px;
        border-radius: 10px;
        background-color: rgba(207, 38, 38, 0.8);    
    } 
    
}
</style>

input抖动

参考input抖动

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

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

相关文章

HTML学习笔记 1-用HBuilderX写的HTML无法在浏览器上运行怎么办?问题出在这里:HBuilderX外部web服务支撑配置

初学HTML的时候&#xff0c;用的是HBuilderX开发软件 写了一段简单的代码 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>这是网页的标题</title></head><body><p>这里是网页的内容</p>&l…

解决Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location

问题描述&#xff1a;重复点击导航时&#xff0c;控制台出现报错 &#xff0c;虽然不影响功能使用&#xff0c;但也不能坐视不管。解决 Vue 重复点击相同路由&#xff0c;出现 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation 问题 .报错内容&#…

Nginx部署前端静态网站详细教学(一步步操作)

前言 从零开始使用Xshell、Xftp、Nginx 简单部署静态网站&#xff0c;需准备云服务器(阿里云、腾讯云、华为云等都可) 一.下载安装Xshell和Xftp XShell 用于命令行操作服务器&#xff0c;Xftp 用于对服务器的文件上传和下载 官方下载地址&#xff1a;NetSarang Homepage CN - …

你评论,我赠书~【哈士奇赠书 - 16期】〖Vue.js 快速入门实战〗等你来拿

推荐&#xff1a; Python全栈白宝书专栏&#xff0c;免费阶段订阅数量4300&#xff0c;购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区。福利&#xff1a;加入社区的小伙伴们&#xff0c;除了可以获取博主所有付费专栏的阅读权限之外&#xff0c;还有机会加入 星荐官共赢计划…

html网页调用后端python代码方法

当我们利用html代码制作网页时&#xff0c;可以用以下方法进行python代码的调用&#xff1a; 1.简单的python代码例如输出‘hello world’时,可以选择直接在网页写入python代码的方式调用&#xff0c;这时候我们就需要了解Pyscript了。以下是在网页里直接运行简易python语段的…

AJAX中的跨域(CORS) 问题 (更新于2023.02.04)

目录​​​​​​​ 预检请求 实例讲解 2023.02.04 更新 此文章在介绍跨域加载的同时&#xff0c;也解决了在使用axios.post()时如下跨域加载失败问题&#xff1a; from origin null has been blocked by CORS policy: Response to preflight request doesnt pass access c…

element-ui实现图片上传功能(前台部分)

文章目录前言一、 template 部分二、script部分1、导入token2、在data中注册以下3、method中的方法4、style前言 最近做的项目中需要实现图片上传功能&#xff0c;一开始也不懂&#xff0c;经过一段时间的学习后&#xff0c;终于实现了图片上传功能。我将分为前台与后台两部分…

vue 基于axios封装request接口请求——request.js文件

目录 了解几个Content-type类型 第一种&#xff1a;application/json;charsetUTF-8 第二种&#xff1a;multipart/form-data 第三种&#xff1a; application/x-www-form-urlencoded 第一步新建request.js文件 第二步新建services/apiUrl文件 第三步新建services/index.…

【前端】深入浅出缓存原理

缓存的基本原理 对于前端来说&#xff0c;缓存主要分为浏览器缓存&#xff08;比如 localStorage、sessionStorage、cookie等等&#xff09;以及http缓存&#xff0c;也是本文主要讲述的。 当然叫法也不一样&#xff0c;比如客户端缓存大概包括浏览器缓存和http缓存 所谓htt…

手撕前端面试题【javascript~文件扩展名、分隔符、单向绑定、判断版本、深浅拷贝、内存泄露等】

前端的那些基本标签&#x1f353;&#x1f353; 直角三角形&#x1f353;&#x1f353;文件扩展名&#x1f353;&#x1f353;分隔符&#x1f353;&#x1f353;单向绑定&#x1f353;&#x1f353;创建数组&#x1f353;&#x1f353;判断版本&#x1f353;&#x1f353;什么是…

四、nginx静态文件的配置

1. 根据上节内容的提示&#xff0c;我们知道如何进行nginx的信号控制和命令行控制了。 2. 这节主要是学习nginx的静态文件、缓存、静态文件压缩等相关内容。 一、 配置并访问nginx静态文件 1.1 root配置nginx静态文件地址 在nginx.conf 配置文件中默认使用root配置了nginx静态…

vue项目使用svg图片

&#xff08;svg-sprite-loader以及vue2-svg-icon的使用&#xff09; 第一种方式&#xff1a; 1、安装svg-sprite-loader npm install svg-sprite-loader --save-dev 2、webpack 配置&#xff08;build/webpack.base.conf.js&#xff09; { test: /\.svg$/, loader: svg-spr…

小程序表单校验uni-forms正确使用方式及避坑指南

小程序表单校验uni-forms正确使用方式及避坑指南一、前言二、成果展示三、uni-forms即时校验四、uni-forms自定义校验规则五、uni-forms异步校验六、完整示例源码七、最后&#xff0c;点个赞一、前言 小程序上使用表单理应是很常用&#xff0c;也很必须的功能&#xff0c;因为…

【微信小程序】自定义组件

组件的创建与引用 1.1、创建组件 &#xff08;1&#xff09;在项目的根目录中&#xff0c;鼠标右键&#xff0c;创建 components > test 文件夹 &#xff08;2&#xff09;在新建的 components > test 文件夹中&#xff0c;鼠标右键&#xff0c;点击“新建 Component” …

通过JavaScript、css、H5 实现简单的tab栏的切换和复用

目录 一、效果展示 二、实现的大致原理 三、H5的布局 四、CSS样式 五、JS代码内容 六、完整代码 一、效果展示 二、实现的大致原理 1.我们先通过css 和h5布局得到最基本的tab栏样式&#xff08;有代码参考&#xff09; 2.在获得样式&#xff0c;给我们所需要点击的目标设…

yolov5部署+微信小程序前端展示

分为yolov5项目部署和微信小程序两部分&#xff0c;先介绍微信小程序前端展示flask后端&#xff0c;之后介绍项目部署这部分。 一、先上效果图 1. 点击选择图片&#xff0c;调用摄像头选择图片 2.选择图片之后&#xff0c;点击开始检测&#xff0c;然后返回结果 ​​​​​​…

CTF----Web真零基础入门

目录 前置知识导图&#xff1a; ​TCP/IP体系结构&#xff08;IP和端口&#xff09;&#xff1a; IP是什么&#xff1a;是计算机在互联网上的唯一标识&#xff08;坐标&#xff0c;代号&#xff09;&#xff0c;用于在互联网中寻找计算机。 内网&#xff08;局域网&#xf…

JSONP解决跨域问题

一、什么是同源 概念&#xff1a;如果两个页面的协议、域名和端口都相同&#xff0c;则这两个页面具有相同的源。 二、什么是同源策略 概念&#xff1a;是浏览器提供的一个安全功能。 三、什么是跨域 概念&#xff1a;同源指的是两个URL的协议、域名、端口号一致&#xff0c…

前端开发调式必备技能F12开发者工具之Elements(元素)面板,详细图解带流程【第一部分】

目录 一、进入浏览器开发工具的几种方式 二、Elements&#xff08;元素&#xff09;面板 左侧区域 右侧区域 计算样式 事件监听器 大家好&#xff01;我是爷爷的茶七里香&#xff0c;这个名字有没有让你想起周董的歌捏&#xff1f;好了&#xff0c;废话不多说&#xff0c;开始今…

项目实训记录(十二)——el-table-column根据条件修改字体颜色

目录 一、干了什么&#xff1f; 二、问题和解决方法 1. el-table-column根据条件修改字体颜色 2.问题 总结 一、干了什么&#xff1f; 本周要完成数据去重工作和前端的完善。 清理工作 主要是来删除用户插入的重复数据。由管理员决定表是否允许重复数据。如果用户上传的表不允…