|
@@ -1,26 +1,224 @@
|
|
|
<template>
|
|
|
- <img alt="Vue logo" src="./assets/logo.png">
|
|
|
- <HelloWorld msg="Welcome to Your Vue.js App"/>
|
|
|
+ <div id="app">
|
|
|
+ <div class="container" id="container">
|
|
|
+ <div class="form-container sign-in-container">
|
|
|
+ <LoginForm/>
|
|
|
+ </div>
|
|
|
+ <div class="form-container sign-up-container">
|
|
|
+ <RegisterForm/>
|
|
|
+ </div>
|
|
|
+ <!-- 覆盖容器 -->
|
|
|
+ <div class="overlay-container">
|
|
|
+ <div class="overlay">
|
|
|
+
|
|
|
+ <!-- 覆盖左边 -->
|
|
|
+ <div class="overlay-penal overlay-left-container">
|
|
|
+ <h1>welcome back!</h1>
|
|
|
+ <p>
|
|
|
+ To keep connected with us please login with your personal info
|
|
|
+ </p>
|
|
|
+ <router-link to="/login"><button class="ghost" id="signIn" @click="signInClick">登录</button></router-link>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 覆盖右边 -->
|
|
|
+ <div class="overlay-penal overlay-right-container">
|
|
|
+ <h1>Hello Friend!</h1>
|
|
|
+ <p>
|
|
|
+ Enter your personal details and start journey with us
|
|
|
+ </p>
|
|
|
+ <router-link to="/register"><button class="ghost" id="signUp" @click="signUpClick">注册</button></router-link>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import HelloWorld from './components/HelloWorld.vue'
|
|
|
+import LoginForm from './components/LoginForm.vue';
|
|
|
+import RegisterForm from './components/RegisterForm.vue';
|
|
|
|
|
|
export default {
|
|
|
- name: 'App',
|
|
|
components: {
|
|
|
- HelloWorld
|
|
|
- }
|
|
|
-}
|
|
|
+ LoginForm,
|
|
|
+ RegisterForm
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ isSigningIn: true, // 初始状态设为登录界面
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ signInClick() {
|
|
|
+ this.isSigningIn = true; // 点击"sign in"时,设置状态为登录界面
|
|
|
+ // 可以在此处添加逻辑来控制动画
|
|
|
+ },
|
|
|
+ signUpClick() {
|
|
|
+ this.isSigningIn = false; // 点击"sign up"时,设置状态为注册界面
|
|
|
+ // 同样,此处也可以添加控制动画的逻辑
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style>
|
|
|
-#app {
|
|
|
- font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
|
- -webkit-font-smoothing: antialiased;
|
|
|
- -moz-osx-font-smoothing: grayscale;
|
|
|
- text-align: center;
|
|
|
- color: #2c3e50;
|
|
|
- margin-top: 60px;
|
|
|
+
|
|
|
+* {
|
|
|
+ padding:0;
|
|
|
+ margin:0;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+body{
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ height: 100vh;
|
|
|
+ background-color: #F6F5F7;
|
|
|
+}
|
|
|
+button {
|
|
|
+ outline: none;
|
|
|
+ border: 1px solid #FF4B2B;
|
|
|
+ border-radius: 20px;
|
|
|
+ background-color: #FF4B2B;
|
|
|
+ padding: 10px 40px;
|
|
|
+ font-size: 12px;
|
|
|
+ text-transform: uppercase;
|
|
|
+ color: white;
|
|
|
+ transition: transform 85ms ease-in;
|
|
|
+}
|
|
|
+h1 {
|
|
|
+ text-transform: capitalize;
|
|
|
+ font-size: 30px;
|
|
|
+}
|
|
|
+p{
|
|
|
+ margin: 10px 0 30px;
|
|
|
+}
|
|
|
+button:active {
|
|
|
+ transform: scale(.95);
|
|
|
}
|
|
|
+.ghost {
|
|
|
+ background-color: transparent;
|
|
|
+ border-color: white;
|
|
|
+}
|
|
|
+.form-container{
|
|
|
+ position: absolute;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ background-color: white;
|
|
|
+ height: 100%;
|
|
|
+ width: 50%;
|
|
|
+ padding: 0 40px;
|
|
|
+ transition: all .65s ease-in-out;
|
|
|
+}
|
|
|
+.form-container form{
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.form-container input {
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+ margin: 8px 0;
|
|
|
+ background-color: #EEEEEE;
|
|
|
+ border: none;
|
|
|
+ font-size: 14px;
|
|
|
+ padding: 0 20px;
|
|
|
+}
|
|
|
+.sign-in-container{
|
|
|
+ z-index: 10;
|
|
|
+}
|
|
|
+.sign-up-container{
|
|
|
+ z-index: 5;
|
|
|
+}
|
|
|
+
|
|
|
+.container{
|
|
|
+ position: relative;
|
|
|
+ width: 768px;
|
|
|
+ max-width: 100%;
|
|
|
+ min-height: 480px;
|
|
|
+ background-color: white;
|
|
|
+ box-shadow: 0 14px 28px rgba(0, 0, 0, .25), 0 10px 10px rgba(0, 0, 0, .22);
|
|
|
+ border-radius: 10px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.overlay-container {
|
|
|
+ position: absolute;
|
|
|
+ right: 0;
|
|
|
+ width: 52%;
|
|
|
+ height: 100%;
|
|
|
+ background-color: tomato;
|
|
|
+ overflow: hidden;
|
|
|
+ transition: transform .65s ease-in-out;
|
|
|
+ z-index: 100;
|
|
|
+}
|
|
|
+.overlay {
|
|
|
+ position: absolute;
|
|
|
+ display: flex;
|
|
|
+ left: -100%;
|
|
|
+ width: 200%;
|
|
|
+ height: 100%;
|
|
|
+ background: linear-gradient(to right, #2d99ff, #42ffa1);
|
|
|
+}
|
|
|
+
|
|
|
+.overlay-penal {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ width: 50%;
|
|
|
+ padding: 0 40px;
|
|
|
+ text-align: center;
|
|
|
+ color: white;
|
|
|
+ font-size: 12px;
|
|
|
+}
|
|
|
+.forget {
|
|
|
+ height: 20px;
|
|
|
+ color: #9AA9B7;
|
|
|
+ text-decoration: none;
|
|
|
+ margin: 5px 0 15px;
|
|
|
+ font-size: 12px;
|
|
|
+ text-transform: capitalize;
|
|
|
+}
|
|
|
+.forget:hover {
|
|
|
+ border-bottom: 2px tomato solid;
|
|
|
+}
|
|
|
+
|
|
|
+.overlay-left-container {
|
|
|
+ transform: translateX(10%);
|
|
|
+ transition: transform .65s ease-in-out;
|
|
|
+}
|
|
|
+.overlay-right-container {
|
|
|
+ transform: translateX(0);
|
|
|
+ transition: transform .65s ease-in-out;
|
|
|
+}
|
|
|
+
|
|
|
+.container.penal-right-active .sign-in-container {
|
|
|
+ z-index: 5;
|
|
|
+ transform: translateX(100%);
|
|
|
+}
|
|
|
+
|
|
|
+.container.penal-right-active .sign-up-container {
|
|
|
+ z-index: 10;
|
|
|
+ transform: translateX(100%);
|
|
|
+}
|
|
|
+
|
|
|
+.container.penal-right-active .overlay-container {
|
|
|
+ transform: translateX(-100%);
|
|
|
+}
|
|
|
+.container.penal-right-active .overlay {
|
|
|
+ transform: translateX(50%);
|
|
|
+}
|
|
|
+.container.penal-right-active .overlay-left-container {
|
|
|
+ transform: translateX(0);
|
|
|
+}
|
|
|
+.container.penal-right-active .overlay-right-container {
|
|
|
+ transform: translateX(-10%);
|
|
|
+}
|
|
|
+
|
|
|
</style>
|