个人信息展示界面布局完成

czq
abab2320 1 month ago
parent 561dbc633c
commit 1351060646

@ -15,176 +15,513 @@ export default defineComponent({
</script>
<template>
<div class = "box">
<el-container class = "box-container">
<el-main class = "profile">
<el-container class = "personal">
<el-header>
<h2>个人信息</h2>
</el-header>
<el-main>
<ul>
<li><label>昵称</label>
<input v-model = "username">
</li>
<li><label>昵称</label>
<input v-model = "username">
</li>
<li>
<input type = "checkbox">
</li>
</ul>
</el-main>
</el-container>
</el-main>
<el-aside class = "layout">
<el-avatar src = "../../../public/images/默认头像.jpg"
size = "large"
fit = 'fill'/>
<label class = "showemail">{{ email }}</label>
<el-input
class = "self-introduce"
maxlength = "30"
placeholder="这是一个个人简介"
size = "large"
type = "textarea"/>
</el-aside>
</el-container>
<div class = "container">
<div class="main-content">
<!-- 左侧信息设置区 -->
<div class="card profile-info-card">
<!-- 个人信息部分 -->
<div class="form-section">
<h2 class="section-title">个人信息</h2>
<div class="form-group">
<label class="form-label">昵称</label>
<input type="text" class="form-input" :placeholder="username" readonly>
</div>
<div class="form-group">
<label class="form-label">个人简介</label>
<input type="text" class="form-input" placeholder="这是一个个人简介">
</div>
<div class="form-group">
<label class="form-label">性别</label>
<div class="radio-group">
<label class="radio-label">
<input type="radio" name="gender" class="radio-input" checked>
<span></span>
</label>
<label class="radio-label">
<input type="radio" name="gender" class="radio-input">
<span></span>
</label>
</div>
</div>
<div class="form-group">
<label class="form-label">生日</label>
<input type="date" class="date-input">
</div>
</div>
<div class="divider"></div>
<!-- 账号信息部分 -->
<div class="form-section">
<h2 class="section-title">账号信息</h2>
<div class="form-group">
<label class="form-label">绑定邮箱</label>
<input type="email" class="form-input" :placeholder="email" readonly>
</div>
<div class="form-group">
<label class="form-label">修改密码</label>
<div class="password-inputs">
<input type="password" class="form-input" placeholder="xxxxxx旧密码">
<input type="password" class="form-input" placeholder="xxxxxx新密码">
</div>
<button class="btn btn-primary btn-password">确认修改</button>
</div>
<p class="form-hint">* 密码至少包含6个字符建议使用字母数字和符号的组合</p>
</div>
<div class="divider"></div>
<!-- 保存按钮 -->
<div class="btn-save-container">
<button class="btn btn-primary"> </button>
</div>
</div>
<!-- 右侧预览区 -->
<div class="card profile-preview-card">
<div class="preview-section">
<div class="preview-avatar">
<img src="../../../public/images/默认头像.jpg" alt="用户头像">
</div>
<h3>{{ username }}</h3>
<p class="preview-email">{{ email }}</p>
<div class="preview-bio">
这是一个个人简介
</div>
</div>
<!-- 可爱装饰元素 -->
<div class="cute-decoration star-1"></div>
<div class="cute-decoration star-2"></div>
<div class="cute-decoration heart">💜</div>
<div class="cute-decoration cat">🐱</div>
<div class="cute-decoration cake">🍰</div>
</div>
</div>
</div>
</template>
<style scoped>
.box
{
#app {
width: 100%;
max-width: none;
padding: 0;
margin: 0;
}
/* 主容器 */
.container {
position:absolute;
background-color:transparent;
left:0;
left:100px;
top:2%;
width:100%;
width:94%;
height: 96%;
}
.box-container
{
position:relative;
width:94%;
left:104px;
right:20px;
/* 侧边栏 */
/* 用户头像容器 */
.avatar-container {
display: flex;
justify-content: center;
margin: 20px 0 30px;
}
.avatar-circle {
width: 90px;
height: 90px;
border-radius: 50%;
background-color: #fff;
display: flex;
justify-content: center;
align-items: center;
border: 3px solid #fff;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
overflow: hidden;
transition: transform 0.3s ease;
}
.avatar-circle:hover {
transform: scale(1.05);
}
.avatar-circle img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 主内容区 */
.main-content {
flex: 1;
height:90%;
padding: 30px;
display: flex;
gap: 20px;
}
.profile,
.layout
{
text-align:center;
/* 信息卡片通用样式 */
.card {
background-color: #fff;
border-radius: 20px;
box-shadow:0px 4px 10px rgba(0,0,0,0.1);
padding: 30px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
/*密码,昵称,性别,生日修改区域 */
.profile
{
background-color: #fff;
padding-left:70px;
padding-top:50px;
display:flex;
align-items:right;
.card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.1);
}
.profile .personal h2
{
display:flex;
align-items:right;
/* 左侧内容卡片 */
.profile-info-card {
flex: 2;
}
.profile ul
{
list-style: none;
display:block;
align-items:right;
margin:0;
/* 右侧内容卡片 */
.profile-preview-card {
padding-top:70px;
flex: 1;
}
/* 分隔线 */
.divider {
height: 1px;
background-color: #e6e6fa;
margin: 25px 0;
border-radius: 1px;
}
/* 表单区 */
.form-section {
margin-bottom: 30px;
}
.section-title {
font-size: 2rem;
color: #9370DB;
margin-bottom: 20px;
font-weight: 500;
}
.profile li
{
.form-group {
height:60px;
margin-bottom: 15px;
margin-left:10px;
display: flex;
align-self:right;
font-size:22px;
padding-top:20px;
align-items: center;
}
.profile label
{
padding-right:20px;
.form-label {
width: 95px;
font-size: 1.25rem;
color: #666;
text-align:left;
}
.profile input
{
background-color: transparent;
width:200px;
/* 输入框样式 */
.form-input {
flex: 1;
height:30px;
color:black;
/* 下边框样式 */
border-bottom:1px solid black;
padding-left:10px;
text-indent:10px;
font-size:19px;
letter-spacing:2px;
padding: 10px 15px;
border: 2px solid #e6e6fa;
border-radius: 25px;
outline: none;
transition: border-color 0.3s ease;
font-size: 1.2rem;
}
.profile input::placeholder
{
font-size:20px;
.form-input:focus {
border-color: #b19cd9;
}
/* 单选按钮样式 */
.radio-group {
transform:scale(1.2);
display: flex;
gap: 30px;
}
/*头像和个人简介修改区域 */
.layout
{
background-color: #ead1fb;
width:30%;
height:100%;
padding-top:150px;
padding-left:80px;
padding-right:80px;
.radio-label {
display: flex;
align-items: center;
cursor: pointer;
}
.radio-input {
appearance: none;
-webkit-appearance: none;
width: 20px;
height: 20px;
border: 2px solid #e6e6fa;
border-radius: 50%;
margin-right: 8px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
}
.showemail
{
position:relative;
top:20px;
font-size:24px;
.radio-input:checked {
border-color: #9370DB;
}
.self-introduce:deep(.el-textarea__inner)
{
border:2px solid black;
.radio-input:checked::before {
content: "";
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #9370DB;
}
.self-introduce
{
position: relative;
top:50px;
left:10px;
width:400px;
min-height:90px;
font-size:22px;
/* 日期选择器 */
.date-input {
width: 100%;
padding: 10px 15px;
border: 2px solid #e6e6fa;
border-radius: 25px;
outline: none;
transition: border-color 0.3s ease;
background-color: #fff;
font-size:1.2rem;
}
.date-input:focus {
border-color: #b19cd9;
}
/* 按钮样式 */
.btn {
outline:none;
padding: 10px 24px;
border: none;
border-radius: 25px;
cursor: pointer;
font-size: 1rem;
font-weight: 500;
transition: all 0.3s ease;
background-color: #fff;
}
.btn-primary {
background-color: #9370DB;
color: white;
box-shadow: 0 4px 10px rgba(147, 112, 219, 0.3);
}
.btn-primary:hover {
background-color: #8a63d2;
transform: translateY(-2px);
box-shadow: 0 6px 12px rgba(147, 112, 219, 0.4);
}
.btn-save-container {
display: flex;
justify-content: center;
margin-top: 20px;
}
/* 预览区样式 */
.preview-section {
display: flex;
flex-direction: column;
align-items: center;
gap: 15px;
}
.preview-avatar {
width: 150px;
height: 150px;
border-radius: 50%;
border: 5px solid #fff;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
overflow: hidden;
margin-bottom: 10px;
}
.preview-avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.el-avatar
{
width:200px;
height:200px;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
.preview-email {
color: #666;
font-size: 1.2rem;
margin-bottom: 15px;
margin-top:0px;
}
.layout-description
{
.preview-bio {
width: 100%;
min-height: 100px;
padding: 15px;
border: 2px solid #e6e6fa;
border-radius: 15px;
background-color: #f9f7ff;
font-size: 1.2rem;
color: #666;
}
/* 密码修改区域样式 */
.password-inputs {
display: flex;
gap: 10px;
margin-right: 10px;
}
.password-inputs .form-input {
flex: 1;
}
/* 响应式设计 */
@media (max-width: 1024px) {
.main-content {
flex-direction: column;
}
}
@media (max-width: 768px) {
.container {
flex-direction: column;
}
.sidebar {
width: 100%;
padding: 10px;
}
.menu-item {
border-radius: 25px;
margin-right: 0;
padding: 10px 15px;
text-align: center;
}
.main-content {
padding: 15px;
}
.form-group {
flex-direction: column;
align-items: flex-start;
}
.form-label {
width: 100%;
margin-bottom: 5px;
}
.password-inputs {
flex-direction: column;
}
}
/* 可爱元素:气泡背景 */
.bubble {
position: absolute;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.3);
z-index: -1;
animation: float 15s ease-in-out infinite;
}
.bubble-1 {
width: 100px;
height: 100px;
bottom: 50px;
left: 20px;
animation-delay: 0s;
}
.bubble-2 {
width: 60px;
height: 60px;
top: 100px;
left: 40px;
animation-delay: 2s;
}
.bubble-3 {
width: 80px;
height: 80px;
bottom: 200px;
left: 60px;
animation-delay: 5s;
}
@keyframes float {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-20px);
}
}
/* 动画效果 */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.card {
animation: fadeIn 0.5s ease forwards;
}
.profile-preview-card {
animation-delay: 0.2s;
}
/* 提示文本样式 */
.form-hint {
font-size: 0.8rem;
color: #9370DB;
margin-top: 5px;
margin-left: 100px;
}
/* 可爱装饰元素 */
.cute-decoration {
position: absolute;
font-size: 1.5rem;
opacity: 0.3;
color: #9370DB;
pointer-events: none;
}
.star-1 {
top: 50px;
right: 20px;
}
.star-2 {
bottom: 100px;
right: 40px;
}
.heart {
bottom: 30px;
right: 30px;
}
</style>
Loading…
Cancel
Save