HTML5CSS3网页设计仿微信通讯录页

本文介绍如何使用HTML5和CSS3来设计一个仿微信通讯录的网页,主要内容涉及div布局、侧边导航栏的创建、CSS盒模型的浮动、弹性及固定定位等技巧。此外,还提供了设计效果图和核心代码供学习参考。
摘要由CSDN通过智能技术生成

上次发了首页,想了一下,还是打算把通讯录页也发一下//

仅供学习参考,大多用到div的各种设置,侧边导航栏设置,css对盒模型的浮动、弹性、固定定位等设置,还有底部小细节//

效果图如下所示

 核心代码如下

html设置:

<body>
		<!-- 顶部 -->
		<div class="a1 ee">
			<div class="a1_b1">通讯录</div>
			<div class="a1_b2">
				<div class="a1_c1"><img src="image/0001.png" width="70px"/></div>
				<div class="a1_c2"><img src="image/0002.png" width="70px"/></div>
			</div>
		</div>
		<!-- 中部 -->
		<div class="a2_b">
			<div class="a2_b1"><img src="image/01.png" width="150px"/></div>
			<div class="a2_b2">
				<div class="a2_c1">
					<div class="a2_d1">&nbsp;新的朋友</div>
				</div>
			</div>
		</div>
		
		<div class="a2_b">
			<div class="a2_b1"><img src="image/02.png" width="150px"/></div>
			<div class="a2_b2">
				<div class="a2_c1">
					<div class="a2_d1">&nbsp;群聊</div>
				</div>
			</div>
		</div>
		
		<div class="a2_b">
			<div class="a2_b1"><img src="image/03.png" width="150px"/></div>
			<div class="a2_b2">
				<div class="a2_c1">
					<div class="a2_d1">&nbsp;标签</div>
				</div>
			</div>
		</div>
		<div class="a2_b">
			<div class="a2_b1"><img src="image/公众号.png" width="150px"/></div>
			<div class="a2_b2">
				<div class="a2_c1">
					<div class="a2_d1">&nbsp;公众号</div>
				</div>
			</div>
		</div>
		<!-- 导航字母 -->
		<div class="qq" id="p1">A</div>
		
		<div class="a2_b">
			<div class="a2_b1"><img src&#
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你提供一个简单的思路来实现类似微信通讯录界面,使用 Vue 和 CSS 来实现。 首先,你需要创建一个 Vue 组件来表示通讯录界面。在这个组件中,你可以使用 Vue 的 data 属性来存储通讯录中的联系人信息,例如姓名、头像、电话号码等。 然后,你可以使用 CSS 来布局和样式化你的通讯录界面。你可以使用 flexbox 布局来创建一个列布局,每列表示一个字母,用于分组显示联系人。你可以使用 CSS 样式来设计每个联系人的卡片,包括头像、姓名和电话号码等信息。 为了实现搜索功能,你可以在组件中添加一个搜索框,使用 Vue 的 computed 属性来过滤联系人信息,只显示与搜索关键字匹配的联系人。 最后,你可以添加一些交互效果,例如当用户点击一个联系人时,该联系人的详细信息会在侧边栏中显示出来。 以下是一个简单的代码示例,用于实现类似微信通讯录界面: ``` <template> <div class="contacts"> <div class="search"> <input type="text" v-model="searchKeyword" placeholder="Search..."> </div> <div class="columns"> <div v-for="letter in letters" :key="letter" class="column"> <div class="letter">{{ letter }}</div> <div v-for="contact in filteredContacts" :key="contact.id" class="contact"> <img :src="contact.avatar" alt="Avatar"> <div class="info"> <div class="name">{{ contact.name }}</div> <div class="phone">{{ contact.phone }}</div> </div> </div> </div> </div> <div v-if="selectedContact" class="sidebar"> <img :src="selectedContact.avatar" alt="Avatar"> <div class="info"> <div class="name">{{ selectedContact.name }}</div> <div class="phone">{{ selectedContact.phone }}</div> </div> </div> </div> </template> <script> export default { data() { return { contacts: [ { id: 1, name: 'Alice', phone: '123-456-7890', avatar: 'https://randomuser.me/api/portraits/women/1.jpg' }, { id: 2, name: 'Bob', phone: '456-789-0123', avatar: 'https://randomuser.me/api/portraits/men/2.jpg' }, { id: 3, name: 'Charlie', phone: '789-012-3456', avatar: 'https://randomuser.me/api/portraits/men/3.jpg' }, // ... ], selectedContact: null, searchKeyword: '' } }, computed: { letters() { const letters = new Set() this.contacts.forEach(contact => { letters.add(contact.name.charAt(0).toUpperCase()) }) return Array.from(letters).sort() }, filteredContacts() { if (!this.searchKeyword) { return this.contacts } const keyword = this.searchKeyword.toLowerCase() return this.contacts.filter(contact => { return contact.name.toLowerCase().indexOf(keyword) !== -1 }) } }, methods: { selectContact(contact) { this.selectedContact = contact } } } </script> <style> .contacts { display: flex; flex-direction: row; justify-content: center; align-items: center; height: 100vh; font-size: 16px; } .search { margin-bottom: 16px; } .columns { display: flex; flex-direction: row; justify-content: center; align-items: flex-start; flex-wrap: wrap; width: 80%; } .column { display: flex; flex-direction: column; margin-right: 16px; } .letter { font-weight: bold; margin-bottom: 8px; } .contact { display: flex; flex-direction: row; align-items: center; margin-bottom: 8px; cursor: pointer; } .contact:hover { background-color: #eee; } .contact img { width: 48px; height: 48px; border-radius: 50%; margin-right: 16px; } .info { display: flex; flex-direction: column; } .name { font-weight: bold; } .phone { color: #888; } .sidebar { position: fixed; top: 0; right: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; width: 20%; height: 100%; background-color: #f7f7f7; box-shadow: 0 0 16px rgba(0, 0, 0, 0.1); } .sidebar img { width: 128px; height: 128px; border-radius: 50%; margin-bottom: 16px; } .sidebar .info { display: flex; flex-direction: column; align-items: center; } .sidebar .name { font-size: 24px; font-weight: bold; margin-bottom: 8px; } .sidebar .phone { color: #888; } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lamb丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值