Ant Design編寫登錄和注冊(cè)頁面的教程
前言
登錄頁面代碼和樣式,不多描述,直接看圖
登錄分為賬號(hào)密碼登錄和手機(jī)登錄,使用tabs切換。
一、登錄
1.index.tsx頁面
代碼如下(示例):
import { Form, Input, Button, Tabs, Row, Col } from 'antd'; import { Footer } from 'antd/lib/layout/layout'; import React from 'react'; import styles from './index.module.less'; const onFinish = (values: any) => { console.log('Received values of form: ', values); }; const { TabPane } = Tabs; function callback(key) { console.log(key); } export default function Login() { return ( <div className={styles.bg}> <div className={styles.heard}> <div className={styles.cloud}> <img src="../logo.png" alt="logo" /> </div> <h1 className={styles.title}>項(xiàng)目名稱</h1> </div> <div className={styles.login_card}> <Tabs type="card" defaultActiveKey="1" onChange={callback} centered style={{ margin: '0 auto' }}> <TabPane tab="賬戶密碼登錄" key="1"> <Form name="normal_login" className="login-form" initialValues={{ remember: true }} onFinish={onFinish} > <Form.Item name="username" rules={[{ required: true, message: '請(qǐng)輸入手機(jī)號(hào) / 用戶名!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input placeholder="請(qǐng)輸入手機(jī)號(hào) / 用戶名" bordered={false} /> </Form.Item> <Form.Item name="password" rules={[{ required: true, message: '請(qǐng)輸入密碼!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input bordered={false} type="password" placeholder="請(qǐng)輸入密碼" /> </Form.Item> <Form.Item> <a style={{ color: '#8C8D9B' }} href="">創(chuàng)建賬號(hào)</a> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit" block style={{ height: '56PX', borderRadius: '12PX' }}> 登錄 </Button> </Form.Item> </Form> </TabPane> <TabPane tab="驗(yàn)證碼登錄" key="2"> <Form name="normal_login" className="login-form" initialValues={{ remember: true }} onFinish={onFinish} > <Form.Item name="phone" rules={[{ required: true, message: '請(qǐng)輸入手機(jī)號(hào)!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input placeholder="請(qǐng)輸入手機(jī)號(hào)" bordered={false} /> </Form.Item> <Form.Item name="captcha" rules={[{ required: true, message: '請(qǐng)輸入驗(yàn)證碼!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Row> <Col span={18}> <Input bordered={false} type="password" placeholder="請(qǐng)輸入驗(yàn)證碼" /> </Col> <Col span={6} style={{ float: 'right' }}> <Button type="link" style={{ color: '#151830', fontWeight: 'bold' }}>發(fā)送驗(yàn)證碼</Button> </Col> </Row> </Form.Item> <Form.Item> <a style={{ color: '#8C8D9B' }} href="">創(chuàng)建賬號(hào)</a> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit" block style={{ height: '56PX', borderRadius: '12PX' }}> 登錄 </Button> </Form.Item> </Form> </TabPane> </Tabs> <Button size="large" shape="circle"><img src="/weixin.png" alt="微信圖片" /></Button> </div> <Footer className={styles.footer}> <text> 底部說明 </text> </Footer> </div> ) }
2.index.module.less
代碼如下(示例):
.bg { height: 900px; background: linear-gradient(180deg, #a0d7e7, #6c5dd3); margin: auto; // padding: 200px; text-align: center; justify-content: center; display: flex; align-items: center; } .login_card { width: 520px; height: 450px; background: #f2f3f7; border-radius: 20px; margin: auto; text-align: center; justify-content: center; padding: 51px 60px; } .login-button { width: 400px; height: 56px; background: #6c5dd3; border-radius: 12px; } .heard { position: absolute; display: flex; top: 264px; } .title { width: 315px; font-size: 30px; font-family: Arial; font-weight: bold; color: #151830; } .cloud { width: 100px; height: 72px; line-height: 72px; background-image: url("../../../../public/img/cloud.png"); } .cloud img { width: 40px; height: 40px; } .footer { width: 100%; height: 12px; font-size: 10px; font-family: Microsoft YaHei; font-weight: 300; color: #151830; background: none; bottom: 34px; left: 0; position: absolute; }
二,注冊(cè)
注冊(cè)頁面代碼和樣式,不多描述,直接看圖
1.index.tsx
代碼如下(示例):
import React from 'react'; import { Form, Input, Button, Checkbox, Tabs, Row, Col } from 'antd'; import styles from './index.module.less'; import { Footer } from 'antd/lib/layout/layout'; const onFinish = (values: any) => { console.log('Received values of form: ', values); }; export default function Register() { return ( <div className={styles.bg}> <div className={styles.heard}> <div className={styles.cloud}> <img src="../logo.png" alt="logo" /> </div> <h1 className={styles.title}>系統(tǒng)名稱</h1> </div> <div className={styles.login_card}> <Form name="normal_login" className="login-form" initialValues={{ remember: true }} onFinish={onFinish} > <Form.Item name="phone" rules={[{ required: true, message: '請(qǐng)輸入手機(jī)號(hào)!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input placeholder="請(qǐng)輸入手機(jī)號(hào)" bordered={false} /> </Form.Item> <Form.Item name="captcha" rules={[{ required: true, message: '請(qǐng)輸入驗(yàn)證碼!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Row> <Col span={18}> <Input bordered={false} type="password" placeholder="請(qǐng)輸入驗(yàn)證碼" /> </Col> <Col span={6} style={{ float: 'right' }}> <Button type="link" style={{ color: '#151830', fontWeight: 'bold' }}>發(fā)送驗(yàn)證碼</Button> </Col> </Row> </Form.Item> <Form.Item name="password" rules={[{ required: true, message: '請(qǐng)?jiān)O(shè)置密碼!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input bordered={false} type="password" placeholder="請(qǐng)?jiān)O(shè)置密碼" /> </Form.Item> <Form.Item name="password" rules={[{ required: true, message: '請(qǐng)重復(fù)密碼!' }]} style={{ borderBottom: '1px solid #DCDCDC' }} > <Input bordered={false} type="password" placeholder="請(qǐng)重復(fù)密碼" /> </Form.Item> <Form.Item> 已有帳號(hào),<a href="#" rel="external nofollow" >點(diǎn)擊登錄</a> </Form.Item> <Form.Item> <Button type="primary" htmlType="submit" block style={{ height: '56PX', borderRadius: '12PX' }}> 登錄 </Button> </Form.Item> <Form.Item name="" valuePropName="checked" style={{ textAlign: 'left' }}> <Checkbox style={{ color: '#CCCCCC' }}>我已閱讀并同意《<a>用戶服務(wù)協(xié)議</a>》</Checkbox> </Form.Item> <Button size="large" shape="circle"><img src="../weixin.png" alt="微信圖片" /></Button> </Form> </div> <Footer className={styles.footer}> <text> 底部說明 </text> </Footer> </div> ); }
2.index.module.less
代碼如下(示例):
.bg { height: 900px; background: linear-gradient(180deg, #a0d7e7, #6c5dd3); margin: auto; padding: 150px; text-align: center; justify-content: center; display: flex; align-items: center; } .login_card { width: 520px; height: 540px; background: #f2f3f7; border-radius: 20px; margin: auto; text-align: center; justify-content: center; padding: 51px 60px; } .login-button { width: 400px; height: 56px; background: #6c5dd3; border-radius: 12px; } .heard { position: absolute; display: flex; top: 218px; } .title { width: 315px; font-size: 30px; font-family: Arial; font-weight: bold; color: #151830; } .cloud { width: 100px; height: 72px; line-height: 72px; background-image: url("../../../../public/img/cloud.png"); } .cloud img { width: 40px; height: 40px; } .footer { width: 100%; height: 12px; font-size: 10px; font-family: Microsoft YaHei; font-weight: 300; color: #151830; background: none; bottom: 34px; left: 0; position: absolute; }
總結(jié)
好像沒啥重點(diǎn),div垂直居中算個(gè)重點(diǎn)吧。
justify-content: center; display: flex; align-items: center;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)自定義"模態(tài)彈窗"組件實(shí)例代碼
頁面中會(huì)有很多時(shí)候需要彈窗提示,我們可以寫一個(gè)彈窗組件,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)自定義"模態(tài)彈窗"組件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12Vue.js通用應(yīng)用框架-Nuxt.js的上手教程
本篇文章主要介紹了Vue.js通用應(yīng)用框架-Nuxt.js的上手教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12Vue2和Vue3的nextTick實(shí)現(xiàn)原理
Vue 中的數(shù)據(jù)綁定和模板渲染都是異步的,那么如何在更新完成后執(zhí)行回調(diào)函數(shù)呢?這就需要用到 Vue 的 nextTick 方法了,本文詳細(xì)介紹了Vue2和Vue3的nextTick實(shí)現(xiàn)原理,感興趣的同學(xué)可以參考一下2023-04-04解決vue項(xiàng)目運(yùn)行npm run serve報(bào)錯(cuò)的問題
這篇文章主要介紹了解決vue項(xiàng)目運(yùn)行npm run serve報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10完美解決element-ui的el-input設(shè)置number類型后的相關(guān)問題
這篇文章主要介紹了完美解決element-ui的el-input設(shè)置number類型后的相關(guān)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10vue-cli 項(xiàng)目打包完成后運(yùn)行文件路徑報(bào)錯(cuò)問題
這篇文章主要介紹了vue-cli 項(xiàng)目打包完成后運(yùn)行文件路徑報(bào)錯(cuò)問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07vue實(shí)現(xiàn)圖片轉(zhuǎn)pdf的示例代碼
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片轉(zhuǎn)pdf的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以跟隨小編一起了解一下2023-08-08Vue自定義過濾器格式化數(shù)字三位加一逗號(hào)實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue自定義過濾器格式化數(shù)字三位加一逗號(hào)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-03-03使用md5在vue中的axios請(qǐng)求時(shí)加密API問題
這篇文章主要介紹了使用md5在vue中的axios請(qǐng)求時(shí)加密API問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01