小K网牛逼 发表于 2026-1-20 00:00:12

「怀旧向」HTML像素级复刻QQ2006经典界面

这是一个使用 HTML + CSS + JavaScript 实现的 QQ2006 像素级复刻项目,重现了80/90后网友的青春记忆——那个伴随我们成长的经典QQ界面!
从登录框的珊瑚蓝渐变,到主面板的好友头像,再到聊天窗口的功能图标,所有素材全部从原版QQ2006安装包提取,力求还原最原始的体验。

演示地址:https://lab.ur1.fun/QQ2006/开源地址:https://github.com/mengkunsoft/QQ2006🎯 为什么做这个?20年前的 QQ2006,是很多80/90后的数字故乡。那时我们还说着“GG/MM”,攒钱买Q秀,为太阳等级熬夜挂机……这个项目不只是UI复刻,更是一次怀旧疗愈。本项目代码全是业余时间手搓,没有用到 AI,断断续续做了两周。🌟 未来计划
[*]增加更多交互逻辑,实现基础聊天功能模拟
[*]复刻更多子功能界面,如菜单面板、视频聊天界面等
⚠️ 注意事项
[*]仅供学习交流,请勿用于商业用途
[*]尊重版权,所有素材均来自原版 QQ2006 安装包,版权归腾讯公司所有
🤝 贡献指南如果你对这个项目感兴趣,想一起打造更完整的 QQ2006 复刻版,欢迎提交 PR 或 Issue。让我们一起为这段数字记忆添砖加瓦!📜 开源许可你可以自由地分享和修改代码,但请保留出处。让我们一同重温那段青涩时光,用代码致敬经典!<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>QQ2006</title>
<meta name="author" content="mengkun">
<link rel="shortcut icon" href="img/qq.png" type="image/x-icon">
<style>
* {
    margin: 0;
    padding: 0;
    font-family: '宋体';
    box-sizing: border-box;
}

html, body {
    width: 100%;
    height: 100%;
    overflow: hidden;
}
body {
    font-size: 12px;
    font-family: '宋体';
    background: url('img/bg.jpeg') center center / cover no-repeat fixed;
}

button {
    outline: none;
    border: none;
    background: transparent;
    background-repeat: no-repeat;
    cursor: pointer;
}

input {
    font-family: 宋体;
    font-size: 12px;
    outline: none;
}

img {
    -webkit-user-drag: none;
}

.drag-parent {
    position: fixed;
}

/*windows xp UI*/
.app__header__buttons{opacity:1;height:22px;display:flex;gap:1px;-webkit-box-align:center;align-items:center;margin-top:-1px;margin-right:1px;}
.app__header__buttons .header__button{margin-right:1px;position:relative;width:22px;height:22px;border:1px solid rgb(255, 255, 255);border-radius:3px;}
.app__header__buttons .header__button:hover{filter:brightness(120%);}
.app__header__buttons .header__button:hover:active{filter:brightness(90%);}
.app__header__buttons .header__button--minimize{box-shadow:rgb(70, 70, 255) 0px -1px 2px 1px inset;background-image:radial-gradient(circle at 90% 90%, rgb(0, 84, 233) 0%, rgb(34, 99, 213) 55%, rgb(68, 121, 228) 70%, rgb(163, 187, 236) 90%, white 100%);}
.app__header__buttons .header__button--minimize::before{content:"";position:absolute;left:4px;top:13px;height:3px;width:8px;background-color:white;}
.app__header__buttons .header__button--maximize{box-shadow:rgb(70, 70, 255) 0px -1px 2px 1px inset;background-image:radial-gradient(circle at 90% 90%, rgb(0, 84, 233) 0%, rgb(34, 99, 213) 55%, rgb(68, 121, 228) 70%, rgb(163, 187, 236) 90%, white 100%);}
.app__header__buttons .header__button--maximize::before{content:"";position:absolute;display:block;left:4px;top:4px;box-shadow:white 0px 3px inset, white 0px 0px 0px 1px inset;height:12px;width:12px;}
.app__header__buttons .header__button--close{box-shadow:rgb(218, 70, 0) 0px -1px 2px 1px inset;background-image:radial-gradient(circle at 90% 90%, rgb(204, 70, 0) 0%, rgb(220, 101, 39) 55%, rgb(205, 117, 70) 70%, rgb(255, 204, 178) 90%, white 100%);}
.app__header__buttons .header__button--close::before{content:"";position:absolute;left:9px;top:2px;transform:rotate(45deg);height:16px;width:2px;background-color:white;}
.app__header__buttons .header__button--close::after{content:"";position:absolute;left:9px;top:2px;transform:rotate(-45deg);height:16px;width:2px;background-color:white;}
.app__header__buttons .header__button--disable{outline:none;opacity:0.5;}
.app__header__buttons .header__button--disable:hover{filter:brightness(100%);}

.xp_form{display:flex;position:absolute;padding:3px;background-color:rgb(8, 49, 217);flex-direction:column;border-top-left-radius:8px;border-top-right-radius:8px;}
.xp_form .header__bg{background:linear-gradient(rgb(0, 88, 238) 0%, rgb(53, 147, 255) 4%, rgb(40, 142, 255) 6%, rgb(18, 125, 255) 8%, rgb(3, 111, 252) 10%, rgb(2, 98, 238) 14%, rgb(0, 87, 229) 20%, rgb(0, 84, 227) 24%, rgb(0, 85, 235) 56%, rgb(0, 91, 245) 66%, rgb(2, 106, 254) 76%, rgb(0, 98, 239) 86%, rgb(0, 82, 214) 92%, rgb(0, 64, 171) 94%, rgb(0, 48, 146) 100%);position:absolute;left:0px;top:0px;right:0px;height:28px;pointer-events:none;border-top-left-radius:8px;border-top-right-radius:8px;overflow:hidden;}
.xp_form .header__bg::before{content:"";display:block;position:absolute;left:0px;opacity:1;background:linear-gradient(to right, rgb(22, 56, 230) 0%, transparent 100%);top:0px;bottom:0px;width:15px;}
.xp_form .header__bg::after{content:"";opacity:1;display:block;position:absolute;right:0px;background:linear-gradient(to left, rgb(22, 56, 230) 0%, transparent 100%);top:0px;bottom:0px;width:15px;}
.xp_form .app__header{user-select:none;display:flex;height:25px;line-height:25px;font-weight:700;font-size:12px;font-family:"宋体";text-shadow:#2f2f2f 1px 1px;color:white;position:absolute;left:3px;right:3px;-webkit-box-align:center;align-items:center;}
.xp_form .app__header__icon{width:15px;height:15px;margin-left:1px;margin-right:3px;}
.xp_form .app__header__title{flex:1 1 0%;pointer-events:none;padding-right:5px;letter-spacing:0.5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.xp_form .app__content{flex:1 1 0%;position:relative;margin-top:25px;height:calc(100% - 25px);}


.qq-repeat-x {
    repeat: repeat-x;
}
.qq-no-repeat {
    repeat: no-repeat;
}
.qq-flex-bg {
    position: absolute;
    width: 100%;
    height: 100%;
    display: flex;
}
.qq-single-line {
    white-space: nowrap;
    overflow: hidden;
}

.qq-btn {
    font-size: 12px;
    background: linear-gradient(to bottom, #ffffff, #9FD4FF);
    border: 1px solid #00558E;
    border-radius: 3px;
    cursor: pointer;
}
.qq-btn:hover {
    background: linear-gradient(to bottom, #ffffff, #B9E1FF);
}

.qq-btn:active {
    background: linear-gradient(to bottom, #97C5EC, #D2F8FD);
}

.qq-panel {
    width: 160px;
    height: auto;
    font-size: 12px;
    font-family: 宋体;
    position: relative;
    border-radius: 8px;
    overflow: hidden;
    user-select: none;
   
    width: 190px;
    height: 580px;
    display: flex;
    flex-direction: column;
}

.qq-title {
    width: 100%;
    height: 24px;
    display: flex;
    position: relative;
}
.qq-title-left {
    background-image: url('img/BackgroundTitleLeft.png');
    background-repeat: no-repeat;
    width: 64px;
}
.qq-title-center {
    flex: 1;
    background-image: url('img/BackgroundTitleCenter.png');
}
.qq-title-right {
    background-image: url('img/BackgroundTitleRight.png');
    background-repeat: no-repeat;
    width: 14px;
}
.qq-title-btns {
    display: flex;
    gap: 1px;
    position: absolute;
    right: 5px;
    top: 5px;
}
.qq-title-btns > button {
    width: 16px;
    height: 16px;
}
#qq-min {
    background-image: url('img/MinButton_Normal.png');
}
#qq-min:hover {
    background-image: url('img/MinButton_Hover.png');
}
#qq-min:active {
    background-image: url('img/MinButton_Down.png');
}
#qq-color {
    background-image: url('img/ColorButton_Normal.png');
}
#qq-color:hover {
    background-image: url('img/ColorButton_Hover.png');
}
#qq-color:active {
    background-image: url('img/ColorButton_Down.png');
}
#qq-close {
    background-image: url('img/CloseButton_Normal.png');
}
#qq-close:hover {
    background-image: url('img/CloseButton_Hover.png');
}
#qq-close:active {
    background-image: url('img/CloseButton_Down.png');
}
.qq-head {
    width: 100%;
    height: 44px;
    position: relative;
    overflow: hidden;
}

.qq-head-left {
    background-image: url('img/BackgroundTitleLeft2.png');
    width: 64px;
}
.qq-head-center {
    background-image: url('img/BackgroundTitleCenter2.png');
    flex: 1;
}
.qq-head-right {
    background-image: url('img/BackgroundTitleRight2.png');
    width: 14px;
}

#qq-status-pic {
    position: absolute;
    width: 32px;
    height: 32px;
    left: 8px;
    top: 6px;
    cursor: pointer;
    background-image: url('img/avatar/50.png');
    background-size: cover;
}

#qq-status-btn {
    position: absolute;
    width: 11px;
    height: 36px;
    left: 41px;
    top: 4px;
    background-image: url('img/StatusButton_Normal.png');
}
#qq-status-btn:hover {
    background-image: url('img/StatusButton_Hover.png');
}
#qq-status-btn:active {
    background-image: url('img/StatusButton_Down.png');
}

#qq-num {
    position: absolute;
    left: 54px;
    top: 9px;
    width: 109px;
    height: 13px;
    font-family: "MS Sans Serif";
    font-size: 8pt;
    font-weight: 700;
    color: #071E81;
}
#qq-num:hover {
    color: #000000;
}

.qq-head-btns {
    position: absolute;
    left: 54px;
    top: 24px;
    display: flex;
    gap: 6px;
}
.qq-head-btns button {
    height: 16px;
}
.qq-head-btns button > img {
    vertical-align: middle;
}
.qq-head-btns button > label {
    color: #071E81;
    font-family: "MS Sans Serif";
    font-size: 8pt;
    font-weight: 400;
    cursor: pointer;
    height: 16px;
    padding-left: 2px;
}
.qq-head-btns button:hover > label {
    color: #FFFFFF;
}

.qq-body {
    flex: 1;
    position: relative;
}
.qq-body-left {
    background-image: url('img/BackgroundL.png');
    width: 11px;
}
.qq-body-center {
    background-image: url('img/BackgroundC.png');
    flex: 1;
}
.qq-body-right {
    background-image: url('img/BackgroundR.png');
    width: 8px;
}

.qq-panel-bar {
    position: absolute;
    left: 3px;
    top: 4px;
    width: 29px;
    height: 100%;
    display: flex;
    flex-direction: column;
}

.qq-panel-bar button {
    background: url('img/panel-bar/barback2_normal.png');
    height: 37px;
    width: 27px;
    margin-top: -4px;
}
.qq-panel-bar button:hover {
    background: url('img/panel-bar/barback2_over.png');
}

.qq-panel-bar button > img {
    vertical-align: super;
    width: 22px;
    height: 22px;
}

.qq-panel-bar button.active {
    background: url('img/panel-bar/barback_disabled.png');
    z-index: 1;
}

/* 好友列表 */
.qq-friend-box {
    position: absolute;
    left: 29px;
    right: 4px;
    height: 100%;
    background: #fff;
    border: 1px solid #2367c3;
    border-radius: 2px;
    overflow: hidden;
    padding: 1px;
    display: flex;
    gap: 1px;
    flex-direction: column;
}

.qq-friend-box > button {
    text-align: center;
    font-size: 12px;
    width: 100%;
    color: #183c94;
    padding: 1px 0;
}
.qq-friend-list {
    flex: 1;
    overflow-y: auto;
}

.qq-friend-group {
    background-image: url('img/group_close.png');
    background-repeat: no-repeat;
    background-position: 2px 4px;
    padding: 5px 0 5px 20px;
    color: #101c4a;
    cursor: pointer;
    overflow: hidden;
    white-space: nowrap;
}
.qq-friend-group.on {
    background-image: url('img/group_open.png');
}

.qq-friend-item {
    display: flex;
    padding: 4px 0 4px 4px;
    cursor: pointer;
}
.qq-friend-avatar {
    width: 40px;
    height: 40px;
}
.qq-friend-info {
    padding: 0 0 0 5px;
    overflow: hidden;
    white-space: nowrap;
}
.qq-friend-name {
    color: #000400;
}
.qq-friend-item.qq-vip .qq-friend-name {
    color: #f00;
}
.qq-friend-item.qq-vip .qq-friend-motto {
    color: #ff7d7b;
}
.qq-friend-item.qq-offline {
    filter: grayscale(100%);
}
.qq-friend-item.qq-offline .qq-friend-name,
.qq-friend-item.qq-offline .qq-friend-motto {
    color: #a8a8a8;
}

.qq-friend-icons {
    display: flex;
    gap: 3px;
}
.qq-friend-icons div {
    width: 15px;
    height: 15px;
    background-size: contain;
    background-repeat: no-repeat;
}
.qq-icon-music {
    background-image: url('img/mms-bar/MMSBar_MediaRing.png');
}
.qq-icon-ring {
    background-image: url('img/mms-bar/MMSBar_PhoneRing.png');
}
.qq-icon-mobile {
    background-image: url('img/mms-bar/MMSBar_MobileQQ.png');
}


/* 底部的工具栏 */
.qq-toolbar {
    height: 62px;
    position: relative;
}
.qq-toolbar-left {
    background-image: url('img/ToolBarBackgroundL.png');
    width: 15px;
}
.qq-toolbar-center {
    background-image: url('img/ToolBarBackgroundC.png');
    flex: 1;
}
.qq-toolbar-right {
    background-image: url('img/ToolBarBackgroundR.png');
    width: 15px;
}

.qq-toolbar-btns {
    position: absolute;
    display: flex;
    overflow: hidden;
    gap: 8px;
    height: auto;
    left: 10px;
    right: 10px;
    top: 12px;
}
.qq-toolbar-btns > button {
    width: 16px;
    height: 16px;
    background-size: cover;
    flex-shrink: 0;
}
#qq-MenuButton {
    position: absolute;
    left: 0px;
    top: 32px;
    width: 65px;
    height: 24px;
    display: block;
    background-image: url('img/MenuButton_Normal.png');
    background-size: cover;
    cursor: pointer;
}
#qq-MenuButton:hover {
    background-image: url('img/MenuButton_Hover.png');
}
#qq-MenuButton:active {
    background-image: url('img/MenuButton_Down.png');
}
.qq-toolbar-2 {
    top: 37px;
    left: 74px;
}
#qq-SearchButton {
    width: 47px;
    background-image: url('img/SearchButton.png');
    background-size: auto 100%;
    padding-left: 18px;
    color: #fff;
    font-family: 'MS Sans Serif';
    font-weight: 400;
    font-size: 8pt;
}
#qq-SearchButton:hover {
    color: #000;
}


/* QQ 登陆界面 */

.qq-login {
    width: 325px;
    background-color: #ECF6FF;
    user-select: none;
    padding: 0;
}
.qq-login-banner {
    text-align: center;
    height: 47px;
    background-image: url('img/login_banner.png');
    background-size: 100%;
    background-position: top;
}
.qq-login-form {
    background: linear-gradient(to bottom, #E4F3FF, #F0F8FF, #F0F8FF, #F0F8FF, #E4F3FF);
    border: 1px solid #2F74C5;
    padding: 18px;
    margin: 6px;
}
.qq-login-form-row {
    margin-bottom: 18px;
    display: flex;
    align-items: left;
    position: relative;
}
.qq-login-form-row label {
    width: 55px;
    text-align: left;
    margin-right: 7px;
}
.qq-login-form-row input {
    width: 150px;
    height: 18px;
    border: 1px solid #7F9DB9;
    padding: 0 2px;
}
.qq-login-form-row input {
    width: auto;
    height: auto;
    margin-right: 5px;
}
#qq-login-method {
    position: absolute;
    left: 46px;
    top: 4px;
}
#qq-login-num {
    height: 20px;
}
#qq-login-num-select {
    position: absolute;
    width: 17px;
    height: 18px;
    left: 189px;
    top: 1px;
    background: url('img/dropdown.png');
}
#qq-login-num-select:hover {
    background-image: url('img/dropdown_hover.png');
}
#qq-login-num-select:active {
    background-image: url('img/dropdown_active.png');
}
#qq-login-reg, #qq-login-forget {
    width: 60px;
    margin: 0 0 0 10px;
}
#qq-login-forget {
    text-decoration: none;
    white-space: nowrap;
    overflow: hidden;
}

.qq-login-check {
    margin-bottom: 0;
}
.qq-login-check label {
    width: auto;
    text-align: left;
}
.qq-login-buttons {
    display: flex;
    padding: 8px 8px 10px;
}
.qq-login-buttons button {
    height: 20px;
    width: 75px;
    margin: 0 5px;
}
.qq-login-buttons span {
    flex: 1;
}

/* 登陆中 */
.qq-logging {
    width: 190px;
    height: 580px;
    display: flex;
    flex-direction: column;
    border-radius: 8px;
    overflow: hidden;
    user-select: none;
}
.qq-logging .qq-title {
    height: 190px;
}
.qq-logging .qq-title-left {
    background-image: url('img/logging/BITMAP1741_1.png');
    width: 64px;
}
.qq-logging .qq-title-center {
    background-image: url('img/logging/BITMAP1734_1.png');
}
.qq-logging .qq-title-right {
    background-image: url('img/logging/BITMAP1735_1.png');
    width: 12px;
}
.qq-logging .qq-title-btns {
    gap: 0;
}
.qq-logging .qq-flex-bg {
    position: relative;
}
.qq-logging-body {
    flex: 1;
}
.qq-logging .qq-body-left {
    background-image: url('img/logging/BITMAP1736_1.png');
    width: 15px;
}
.qq-logging .qq-body-center {
    background-image: url('img/logging/BITMAP1737_1.png');
    width: 15px;
}
.qq-logging .qq-body-right {
    background-image: url('img/logging/BITMAP1738_1.png');
    width: 15px;
}
.qq-logging .qq-bottom-left {
    background-image: url('img/logging/BITMAP1739_1.png');
    width: 15px;
}
.qq-logging .qq-bottom-center {
    background-image: url('img/logging/BITMAP1740_1.png');
    flex: 1;
}
.qq-logging .qq-bottom-right {
    background-image: url('img/logging/BITMAP1733_1.png');
    width: 15px;
}
.qq-logging-bottom {
    height: 184px;
    overflow: hidden;
}
#qq-logging-main {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: absolute;
    left: 0;
    right: 0;
    top: 24px;
    bottom: 24px;
}
#qq-logging-main p {
    margin: 2px 0 12px;
}
#qq-logging-cancel {
    width: 90px;
    height: 26px;
    border: none;
    outline: none;
    background-image: url('img/logging/BITMAP1742_1.png');
}
#qq-logging-cancel:hover {
    background-image: url('img/logging/BITMAP1744_1.png');
}
#qq-logging-cancel:active {
    background-image: url('img/logging/BITMAP1743_1.png');
}

.qq-im {
    background: #5db7ff;
    width: 500px;
    height: 460px;
    border-radius: 8px;
    overflow: hidden;
}



.qq-im .qq-title-btns {
    gap: 0;
}
.qq-im .qq-title-btns > button {
    width: 17px;
    height: 16px;
}

#qq-im-min {
    background-image: url('img/im/IMMinButton_Normal.png');
}
#qq-im-min:hover {
    background-image: url('img/im/IMMinButton_Hover.png');
}
#qq-im-min:active {
    background-image: url('img/im/IMMinButton_Down.png');
}

#qq-im-max {
    background-image: url('img/im/IMMaxButton_Normal.png');
}
#qq-im-max:hover {
    background-image: url('img/im/IMMaxButton_Hover.png');
}
#qq-im-max:active {
    background-image: url('img/im/IMMaxButton_Down.png');
}

#qq-im-close {
    background-image: url('img/im/IMCloseButton_Normal.png');
}
#qq-im-close:hover {
    background-image: url('img/im/IMCloseButton_Hover.png');
}
#qq-im-close:active {
    background-image: url('img/im/IMCloseButton_Down.png');
}

.qq-title-icon, .qq-title-text {
    position: absolute;
    color: #fff;
    font-weight: bold;
    cursor: default;
}
.qq-title-icon {
    background-image: url('img/im/icon.png');
    width: 16px;
    height: 16px;
    left: 5px;
    top: 5px;
}
.qq-title-text {
    left: 22px;
    top: 6px;
}

.qq-skin,
.qq-contant {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
}

.qq-skin > div {
    display: flex;
}
.qq-skin .qq-title-bg {
    height: 26px;
}
.qq-skin .qq-body-bg {
    flex: 1;
}

.qq-im .qq-title-left {
    background-image: url('img/im/IMBorderTop.png');
    width: 25px;
}
.qq-im .qq-title-center {
    background-image: url('img/im/IMBorderTop.png');
    background-size: 10000px 26px;
    background-position: top;
}

.qq-im .qq-bottom-left,
.qq-im .qq-bottom-center,
.qq-im .qq-bottom-right {
    background-image: url('img/im/IMBorderBottom.png');
    height: 8px;
}
.qq-im .qq-bottom-left {
    width: 10px;
}
.qq-im .qq-bottom-center {
    background-size: 10000px 8px;
    background-position: top;
    flex: 1;
}
.qq-im .qq-bottom-right {
    width: 10px;
    background-position: right;
}

.qq-im-big-toolbar {
    margin: 0 4px;
    padding-left: 6px;
    height: 36px;
    background-image: url('img/im/IMBigToolBarBackground.png');
    display: flex;
}
.qq-im-big-toolbar button {
    color: rgb(7,30,129);
    font-weight: bold;
    background-repeat: no-repeat;
    background-position: center left;
    background-position-x: 2px;
    padding: 0 8px 0 28px;
    border: 1px solid transparent;
}
.qq-im-big-toolbar button:hover {
    border-color: rgb(70,136,201);
    background-color: rgb(130,199,255);
}
.qq-im-big-toolbar button:active {
    border-color: rgb(40,99,157);
    background-color: rgb(83,168,245);
}
#qq-im-msg {
    background-image: url('img/im/IMBigToolbarMQQ.png');
}
#qq-im-video {
    background-image: url('img/im/IMBigToolbarVideo.png');
}
#qq-im-audio {
    background-image: url('img/im/IMBigToolbarQQSQQ.png');
}
#qq-im-file {
    background-image: url('img/im/IMBigToolbarSendFile.png');
}
#qq-im-3d {
    background-image: url('img/im/IMBigToolbar3DShow.png');
}
#qq-im-invite {
    background-image: url('img/im/IMBigToolbarInvite.png');
}

.qq-im-contant {
    display: flex;
    flex: 1;
    gap: 4px;
    padding: 0 8px 8px;
    overflow: hidden;
    min-height: 0;
}

.qq-im-main {
    display: flex;
    flex-direction: column;
    flex: 1;
    gap: 6px;
    min-height: 0;
}
.qq-im-side, .qq-im-chat {
    display: flex;
    flex-direction: column;
    border: 1px solid rgb(53,111,175);
    width: 140px;
    height: 100%;
    overflow: hidden;
}

/* 聊天框聊天区域 */
.qq-im-chat {
    width: 100%;
    border-radius: 4px;
    background-color: #fff;
    overflow: hidden;
    min-height: 0;
}

.qq-im-chat-msg {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-height: 0;
}

.qq-im-friend-info {
    background: linear-gradient(to bottom, #ffffff, #b6d5f5);
    border-bottom: 1px solid #84a6c6;
    padding: 1px 2px;
    color: rgb(7,30,129);
    cursor: pointer;
}
.qq-im-friend-info:hover {
    color: rgb(99,119,190);
}
.qq-im-friend-info img {
    width: 20px;
    height: 20px;
    margin-right: 5px;
    vertical-align: sub;
    float: left;
}

.qq-im-chat-msg-list {
    flex: 1;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 5px;
    min-height: 0;
    max-height: 100%;
}
.qq-im-chat-msg-list li p {
    color: #000;
    padding-left: 15px;
    line-height: 1.4;
}
.qq-im-chat-msg-list li p:first-of-type {
    color: #210f95;
    padding-left: 0;
}
.qq-im-chat-msg-list li.my p:first-of-type {
    color: #2d794b;
}
.qq-im-chat-msg-list li p:first-of-type span {
    font-size: 12px;
    padding-left: 8px;
}

.qq-im-chat-toolbar {
    display: flex;
    align-items: center;
    gap: 4px;
    height: 20px;
    padding-left: 4px;
    background: url('img/im/IMSmallToolbarBackground.png');
    background-size: 10000px 100%;
    background-position: center;
}

.qq-im-chat-toolbar button {
    width: 18px;
    height: 18px;
    border: 1px solid transparent;
    background-image: url('img/im/IMSmallToolbarFace.png');
}

.qq-im-chat-toolbar button:hover {
    border-color: rgb(135,164,197);
    background-color: rgb(183,214,245);
}
.qq-im-chat-toolbar button:active {
    border-color: rgb(109,146,186);
    background-color: rgb(170,200,230);
}
.qq-im-chat-toolbar .im-toolbar-font {
    background-image: url('img/im/IMSmallToolbarFont.png');
}
.qq-im-chat-toolbar .im-toolbar-face {
    background-image: url('img/im/IMSmallToolbarFace.png');
}
.qq-im-chat-toolbar .im-toolbar-other {
    background-image: url('img/im/IMSmallToolbarOtherContent.png');
}
.qq-im-chat-toolbar .im-toolbar-picture {
    background-image: url('img/im/IMSmallToolbarPicture.png');
}
.qq-im-chat-toolbar .im-toolbar-catch {
    background-image: url('img/im/IMSmallToolbarCatch.png');
}
.qq-im-chat-toolbar .im-toolbar-scene {
    background-image: url('img/im/IMSmallToolbarScene.png');
}
.qq-im-chat-toolbar .im-toolbar-bag {
    background-image: url('img/im/IMSmallToolbarSuperbag.png');
}
.qq-im-chat-toolbar .im-toolbar-ptt {
    background-image: url('img/im/IMSmallToolbarPtt.png');
}
.qq-im-chat-toolbar span {
    background: rgb(114,149,188);
    width: 1px;
    height: 80%;
}

.qq-im-chat-send {
    height: 70px;
    padding: 4px;
    border: none;
    outline: none;
    resize: none;
}

.qq-im-btns {
    display: flex;
    height: 20px;
    gap: 5px;
}
.qq-im-btns span {
    flex: 1;
}
.qq-im-btns .qq-btn {
    padding: 0 2px;
}

/* 聊天框右侧栏 */
.qq-im-side-btn {
    position: relative;
    height: 20px;
    width: 100%;
    z-index: 2;
    text-align: left;
    padding-left: 20px;
    background-image: url('img/im/IMSidebarButtonExpand_Normal.png');
    background-size: 1000px 100%;
}
.qq-im-side-btn::before,
.qq-im-side-btn::after {
    position: absolute;
    content: '';
    height: 100%;
    top: 0;
    z-index: -1;
}
.qq-im-side-btn::before {
    background-image: url('img/im/IMSidebarButton_Normal.png');
    width: 50px;
    left: 0;
}
.qq-im-side-btn::after {
    background-image: url('img/im/IMSidebarMenu_Normal.png');
    width: 33px;
    right: 0;
}
.qq-im-side-btn:hover::before {
    background-image: url('img/im/IMSidebarButton_Hover.png');
}
.qq-im-side-btn:hover::after {
    background-image: url('img/im/IMSidebarMenu_Hover.png');
}
.qq-im-show {
    height: 100%;
    background-size: cover;
    background-position: 50%;
}
.qq-im-zone {
    background: #f6f6f6;
    color: #0f0657;
}
.qq-im-zone div {
    line-height: 1.4;
    padding: 0 2px;
}
.qq-im-zone span {
    color: red;
}
</style>
</head>

<body>

<div class="qq-im drag-parent" style="left: 40%; top: 20%; z-index: 9999">
    <div class="qq-skin">
      <div class="qq-title-bg">
            <div class="qq-title-left"></div>
            <div class="qq-title-center"></div>
            <div class="qq-title-right"></div>
      </div>
      <div class="qq-body-bg">
            <div class="qq-body-left"></div>
            <div class="qq-body-center"></div>
            <div class="qq-body-right"></div>
      </div>
      <div class="qq-bottom-bg">
            <div class="qq-bottom-left"></div>
            <div class="qq-bottom-center"></div>
            <div class="qq-bottom-right"></div>
      </div>
    </div>
    <div class="qq-contant">
      <div class="qq-title drag-handle">
            <div class="qq-title-icon"></div>
            <div class="qq-title-text">与 メ乖乖女ソ 聊天中</div>
            <div class="qq-title-btns">
                <button id="qq-im-min" title="隐藏"></button>
                <button id="qq-im-max" title="最大化"></button>
                <button id="qq-im-close" title="关闭"></button>
            </div>
      </div>
      <div class="qq-im-big-toolbar">
            <button id="qq-im-msg">短信</button>
            <button id="qq-im-video">视频</button>
            <button id="qq-im-audio">语音</button>
            <button id="qq-im-file">传文件</button>
            <button id="qq-im-3d">3D秀</button>
            <button id="qq-im-invite">邀请</button>
      </div>
         
      <div class="qq-im-contant">
            <div class="qq-im-main">
                <div class="qq-im-chat">
                  <!-- 聊天内容 -->
                  <div class="qq-im-chat-msg">
                        <div class="qq-im-friend-info">
                            <img src="img/avatar/97.png">
                            <p>メ乖乖女ソ(3453674):为了躲开所有结局的可能,你连开始都直接按了暂停键</p>
                        </div>
                        <ul class="qq-im-chat-msg-list">
                            <li class="my">
                              <p>痴情梦丶<span>20:37:01</span></p>
                              <p>在吗?</p>
                            </li>
                            <li>
                              <p>メ乖乖女ソ<span>20:37:08</span></p>
                              <p>原来你也在网上冲浪啊~</p>
                            </li>
                        </ul>
                  </div>

                  <!-- 聊天工具栏 -->
                  <div class="qq-im-chat-toolbar">
                        <button class="im-toolbar-font"></button>
                        <button class="im-toolbar-face"></button>
                        <button class="im-toolbar-other"></button>
                        <span></span>
                        <button class="im-toolbar-picture"></button>
                        <button class="im-toolbar-catch"></button>
                        <button class="im-toolbar-scene"></button>
                        <button class="im-toolbar-bag"></button>
                        <button class="im-toolbar-ptt"></button>
                  </div>

                  <!-- 聊天发送框 -->
                  <textarea class="qq-im-chat-send"></textarea>
                </div>
                <div class="qq-im-btns">
                  <button class="qq-btn">聊天记录(H)</button>
                  <button class="qq-btn">消息模式(T)</button>
                  <span></span>
                  <button class="qq-btn">关闭(C)</button>
                  <div style="display: flex; gap: 2px;">
                        <button class="qq-btn" id="btn-send-msg">发送(S)</button>
                        <button class="qq-btn" style="padding: 0;">↓</button>
                  </div>
                </div>
            </div>
            <div class="qq-im-side">
                <div style="flex: 1">
                  <button class="qq-im-side-btn">对方形象</button>
                  <div class="qq-im-show" style="background-image: url('img/im/show1.gif')"></div>
                </div>
                <div class="qq-im-zone qq-single-line">
                  <button class="qq-im-side-btn">个人空间</button>
                  <div>摘要:若无法为你撑起晴空,那我便陪你共沐风雨</div>
                  <div>日记:<span>48</span>条/<span>169</span>评论</div>
                  <div>相册:<span>12</span>张/<span>23</span>评论</div>
                  <div>收藏:<span>62</span>个</div>
                </div>
                <div style="flex: 1">
                  <button class="qq-im-side-btn">我的形象</button>
                  <div class="qq-im-show" style="background-image: url('img/im/show3.gif')"></div>
                </div>
            </div>
      </div>
    </div>
</div>

<!-- QQ 主面板 -->
<div class="qq-panel drag-parent" style="left: 70%; top: 10%;">
    <!-- 标题栏 -->
    <div class="qq-title drag-handle">
      <div class="qq-title-left"></div>
      <div class="qq-title-center"></div>
      <div class="qq-title-right"></div>
      <div class="qq-title-btns">
            <button id="qq-min" title="隐藏"></button>
            <button id="qq-color" title="颜色改变"></button>
            <button id="qq-close" title="关闭"></button>
      </div>
    </div>
    <!-- 用户信息头部 -->
    <div class="qq-head">
      <div class="qq-flex-bg">
            <div class="qq-head-left"></div>
            <div class="qq-head-center"></div>
            <div class="qq-head-right"></div>
      </div>
      <div id="qq-status-pic" title="修改个人资料"></div>
      <button id="qq-status-btn" title="更改状态"></button>
      <label id="qq-num">痴情梦丶(在线)</label>
      <div class="qq-head-btns">
            <button id="qq-mail" title="收发邮件">
                <img src="img/MailButton.png" /><label>(0)</label>
            </button>
            <button id="qq-security" title="安全中心">
                <img src="img/security_normal.png" />
            </button>
            <button id="qq-payment" title="我的钱包">
                <img src="img/payment.png" />
            </button>
      </div>
    </div>
    <!--主面板区域-->
    <div class="qq-body">
      <div class="qq-flex-bg">
            <div class="qq-body-left"></div>
            <div class="qq-body-center"></div>
            <div class="qq-body-right"></div>
      </div>
      <div class="qq-panel-bar">
            <button id="qq-FriendButton" title="QQ好友面板" class="active"><img src="img/panel-bar/FriendButton.png"/></button>
            <button id="qq-SBuddyButton" title="互动空间"><img src="img/panel-bar/SBuddyButton.png"/></button>
            <button id="qq-MobileButton" title="我的无线乐园"><img src="img/panel-bar/MobileButton.png"/></button>
            <button id="qq-RtxButton" title="企业好友面板"><img src="img/panel-bar/RtxButton.png"/></button>
            <button id="qq-ContentsButton" title="网络杂志面板"><img src="img/panel-bar/ContentsButton.png"/></button>
            <button id="qq-CustomButton" title="用户自定义面板"><img src="img/panel-bar/CustomButton.png"/></button>
            <button id="qq-EaseButton" title="音乐中心"><img src="img/panel-bar/EaseButton.png"/></button>
            <button id="qq-NetDiskButton" title="网络硬盘"><img src="img/panel-bar/NetDiskButton.png"/></button>
            <button id="qq-AllButton" title="综合业务面板"><img src="img/panel-bar/IntegratePanel.png"/></button>
            <button id="qq-PanelMngButton" title="面板管理器"><img src="img/panel-bar/BlankPanel.png"/></button>
      </div>
         
      <div class="qq-friend-box">
            <button class="qq-btn">QQ好友</button>
            <div class="qq-friend-list">
                <div class="qq-friend-group">
                  我的好友(19/26)
                </div>
                <div class="qq-friend-group on">
                  家人(5/13)
                </div>
                <div class="qq-friend-item">
                  <img class="qq-friend-avatar" src="img/avatar/16.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">阿辉</p>
                        <p class="qq-friend-motto">人生沟坎多因能力不足,门槛高低全凭实力</p>
                        <div class="qq-friend-icons"></div>
                  </div>
                </div>
                <div class="qq-friend-item qq-vip">
                  <img class="qq-friend-avatar" src="img/avatar/22.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">哎哟喂</p>
                        <p class="qq-friend-motto">我爱吃红烧肉</p>
                        <div class="qq-friend-icons">
                            <div class="qq-icon-music"></div>
                            <div class="qq-icon-mobile"></div>
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item">
                  <img class="qq-friend-avatar" src="img/avatar/5.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">小王子</p>
                        <p class="qq-friend-motto">我珍忄昔、祢鳪忄董,我放掱、你却拉住我。。</p>
                        <div class="qq-friend-icons">
                            <div class="qq-icon-music"></div>
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item">
                  <img class="qq-friend-avatar" src="img/avatar/7.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">happy</p>
                        <p class="qq-friend-motto"> </p>
                        <div class="qq-friend-icons">
                            <div class="qq-icon-mobile"></div>
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item">
                  <img class="qq-friend-avatar" src="img/avatar/9.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">木子</p>
                        <p class="qq-friend-motto">你也在网上冲浪啊</p>
                        <div class="qq-friend-icons">
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item">
                  <img class="qq-friend-avatar" src="img/avatar/11.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">灰</p>
                        <p class="qq-friend-motto">有事请留言</p>
                        <div class="qq-friend-icons">
                            <div class="qq-icon-music"></div>
                            <div class="qq-icon-mobile"></div>
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item qq-offline">
                  <img class="qq-friend-avatar" src="img/avatar/18.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">爱拼才会赢</p>
                        <p class="qq-friend-motto">我还年轻,所以我可以</p>
                        <div class="qq-friend-icons">
                        </div>
                  </div>
                </div>
                <div class="qq-friend-item qq-offline">
                  <img class="qq-friend-avatar" src="img/avatar/100.png"/>
                  <div class="qq-friend-info">
                        <p class="qq-friend-name">最深的记忆</p>
                        <p class="qq-friend-motto">把你留在心中</p>
                        <div class="qq-friend-icons">
                            <div class="qq-icon-mobile"></div>
                        </div>
                  </div>
                </div>
                <div class="qq-friend-group">
                  同学(28/37)
                </div>
                <div class="qq-friend-group">
                  陌生人
                </div>
                <div class="qq-friend-group">
                  黑名单
                </div>
            </div>
            
            <button class="qq-btn">手机好友</button>
            <button class="qq-btn">群/校友录</button>
            <button class="qq-btn">最近联系人</button>
      </div>
    </div>
   
    <!--底部工具栏区域-->
    <div class="qq-toolbar">
      <div class="qq-flex-bg">
            <div class="qq-toolbar-left"></div>
            <div class="qq-toolbar-center"></div>
            <div class="qq-toolbar-right"></div>
      </div>
      <div class="qq-toolbar-btns">
            <button id="qq-MobileMsgButton" title="发送手机消息" style="background-image: url('img/MobileMsgButton.png')"></button>
            <button id="qq-GameButton" title="QQ游戏" style="background-image: url('img/GameButton.png')"></button>
            <button id="qq-TTButton" title="腾讯TT浏览器" style="background-image: url('img/TTButton.png')"></button>
            <button id="qq-ChatRoomButton" title="进入聊天室" style="background-image: url('img/ChatRoomButton.png')"></button>
            <button id="qq-QQHome" title="QQ空间" style="background-image: url('img/QQHome.png')"></button>
            <button id="qq-QQMusicButton" title="QQ音乐" style="background-image: url('img/QQMusicButton.png')"></button>
            <button id="qq-QQTVButton" title="网络电视(QQLive)" style="background-image: url('img/QQTVButton.png')"></button>
            <button id="qq-Pet" title="QQ宠物" style="background-image: url('img/OpenPet.png')"></button>
      </div>
      <div id="qq-MenuButton"></div>
      <div class="qq-toolbar-btns qq-toolbar-2">
            <button id="qq-MsgManagerButton" title="信息管理器" style="background-image: url('img/MsgManagerButton.png');background-size: auto;width: 19px"></button>
            <button id="qq-SearchButton" title="查找用户">查找</button>
      </div>
    </div>
</div>

<!-- QQ 登录窗口 -->
<div class="xp_form drag-parent" style="z-index: 10; left: 10%; top: 36%;">
    <div class="header__bg"></div>
    <header class="app__header drag-handle">
      <img src="img/qq.png" alt="QQ用户登录" class="app__header__icon" draggable="false">
      <div class="app__header__title">QQ用户登录</div>
      <div class="app__header__buttons">
            <button class="header__button header__button--minimize"></button>
            <button class="header__button header__button--maximize header__button--disable"></button>
            <button class="header__button header__button--close"></button>
      </div>
    </header>
    <div class="app__content">
      <div class="qq-login">
            <div class="qq-login-banner"></div>
            <div class="qq-login-form">
                <div class="qq-login-form-row">
                  <label for="qq-login-num">
                        QQ号码
                        <img id="qq-login-method" src="img/select.png">
                  </label>
                  <input type="text" id="qq-login-num" placeholder="<请在这儿输入QQ号码>">
                  <button class="qq-btn" id="qq-login-reg">申请号码</button>
                  <button id="qq-login-num-select"></button>
                </div>
                <div class="qq-login-form-row" style="align-items: flex-end">
                  <label for="qq-login-password">QQ密码</label>
                  <input type="password" id="qq-login-password" placeholder="">
                  <a href="https://accounts.qq.com/find/password" target="_blank" id="qq-login-forget">忘了密码?</a>
                </div>
                <div class="qq-login-form-row qq-login-check">
                  <label style="width: 55px"></label>
                  <input type="checkbox" id="qq-login-auto" checked>
                  <label for="qq-login-auto">自动登录</label>
                  <input type="checkbox" id="qq-login-hide">
                  <label for="qq-login-hide">隐身登录</label>
                </div>
            </div>
            <div class="qq-login-buttons">
                <button class="qq-btn" style="width: 78px">高级设置 ↓</button>
                <span></span>
                <button class="qq-btn" id="loginBtn">登录</button>
                <button class="qq-btn" id="registerBtn">取消</button>
            </div>
      </div>
    </div>
</div>

<!-- 登录中窗口 -->
<div class="qq-logging drag-parent" style="left: 28%; top: 10%;z-index:999">
    <!-- 标题栏 -->
    <div class="qq-title drag-handle">
      <div class="qq-title-left"></div>
      <div class="qq-title-center"></div>
      <div class="qq-title-right"></div>
      <div class="qq-title-btns">
            <button id="qq-min"></button>
            <button id="qq-close"></button>
      </div>
    </div>
   
    <div class="qq-logging-body qq-flex-bg">
      <div class="qq-body-left"></div>
      <div class="qq-body-center"></div>
      <div class="qq-body-right"></div>
    </div>
    <div class="qq-logging-bottom qq-flex-bg">
      <div class="qq-bottom-left"></div>
      <div class="qq-bottom-center"></div>
      <div class="qq-bottom-right"></div>
    </div>
    <div id="qq-logging-main">
      <img src="img/logging/BITMAP1710_1.png">
      <img src="img/logging/START_GIF1704_1.gif">
      <p>正在登录</p>
      <button id="qq-logging-cancel"></button>
    </div>
</div>


<script>
const playAudio = url => new Audio(url).play().catch(e => console.error('播放失败:', e));

document.addEventListener('DOMContentLoaded',() => {

    document.getElementById('btn-send-msg').onclick = () => {
      playAudio('sound/msg.mp3');
    };

    document.getElementById('qq-MsgManagerButton').onclick = () => {
      playAudio('sound/system.mp3');
    };

    document.getElementById('qq-im-msg').onclick = () => {
      playAudio('sound/msg.mp3');
    };

    document.getElementById('qq-im-video').onclick = () => {
      playAudio('sound/call.mp3');
    };

    document.getElementById('qq-im-audio').onclick = () => {
      playAudio('sound/call.mp3');
    };

    playAudio('sound/msg.mp3');

    /* 拖拽移动窗口 */
    document.querySelectorAll('.drag-parent').forEach(parent=> {
      const handle = parent.querySelector('.drag-handle');
      if (!handle) return;

      let isDragging = false;
      let startX, startY, startLeft, startTop;

      const getPosition = (el) => {
            const style = window.getComputedStyle(el);
            return {
                left: parseInt(style.left,10) || 0,
                top: parseInt(style.top,10) || 0
            };
      };

      handle.addEventListener('mousedown',(e) => {
            e.preventDefault();
            isDragging = true;
            const pos = getPosition(parent);
            startLeft = pos.left;
            startTop = pos.top;
            startX = e.clientX;
            startY = e.clientY;
      });

      handle.addEventListener('touchstart',(e) => {
            e.preventDefault();
            isDragging = true;
            const pos = getPosition(parent);
            startLeft = pos.left;
            startTop = pos.top;
            startX = e.touches.clientX;
            startY = e.touches.clientY;
      }, { passive: false });

      const moveHandler = (e) => {
            if (!isDragging) return;
            const clientX = e.clientX?? e.touches?.?.clientX;
            const clientY = e.clientY?? e.touches?.?.clientY;
            
            parent.style.left= `${startLeft + (clientX - startX)}px`;
            parent.style.top= `${startTop + (clientY - startY)}px`;
      };

      document.addEventListener('mousemove',moveHandler);
      document.addEventListener('touchmove',moveHandler, { passive: false });

      const endHandler = () => isDragging = false;
      document.addEventListener('mouseup',endHandler);
      document.addEventListener('touchend',endHandler);
    });
});
</script>

</body>
</html>

yhwlkj 发表于 2026-1-20 11:31:42

👍啥也不说,楼主就是给力!

源开 发表于 2026-1-21 06:23:48

这个牛      
页: [1]
查看完整版本: 「怀旧向」HTML像素级复刻QQ2006经典界面