开源 简洁清爽个人主页

if  (UID: 59093) [复制链接]
帖子链接已复制到剪贴板
帖子已经有人评论啦,不支持删除!

208 1

网址: xvxw.com


程序特色

极简 · 但不简陋

· 无卡片、无圆角、无阴影、无多余装饰
· 只有背景 + 玻璃层 + 文字 + 线
· 每个元素都有存在的理由

克制 · 但有温度

· 姓名下划线从左向右滑出
· 项目间分隔线同样滑出
· 动画只在进场时发生一次,不打扰、不疲惫

端庄 · 不追潮流

· 衬线字体(Cormorant Garamond / Georgia)
· 无 emoji、无表情、无花哨符号
· 适合严肃表达者、写作者、创作者

原生 · 零依赖

· 纯 HTML + CSS + JS
· 无框架、无 npm、无构建
· 一个文件,拷走即用

自适应 · 手机也是垂直一排

· 桌面端:链接居中,间距舒展
· 手机端:同样一行一个,不乱不挤

每次进入 · 动画都会重放

· 支持浏览器前进后退
· 支持切换标签页后回来
· 下划线永远会重新滑出

联系方式 · 不跳转只弹窗

· 邮件 / 微信 / QQ / Telegram
· 点击弹出对应内容,不打开外部应用
· 干净、直接、无干扰


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
    <title>AFTER - A QUIET OBSERVER</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Cormorant Garamond', 'Times New Roman', 'Georgia', '宋体', serif;
            font-weight: 400;
            height: 100vh;
            width: 100%;
            overflow: hidden;
            background-color: #2a2826;
        }

        .bg {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 0;
            background-image: url('http://mms0.baidu.com/it/u=4124186030,920038977&fm=253&app=138&f=JPEG?w=800&h=1141');
            background-size: cover;
            background-position: center center;
            background-repeat: no-repeat;
        }

        .overlay {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            z-index: 1;
            background-color: rgba(255, 255, 255, 0.22);
            backdrop-filter: blur(5px);
            -webkit-backdrop-filter: blur(5px);
        }

        .content {
            position: relative;
            z-index: 2;
            height: 100vh;
            width: 100%;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            text-align: center;
            padding: 2rem 1.5rem;
            box-sizing: border-box;
            overflow-y: auto;
            scrollbar-width: none;
        }

        .content::-webkit-scrollbar {
            display: none;
        }

        .name-section {
            margin-bottom: 2.2rem;
            width: 100%;
            max-width: 600px;
        }

        .name {
            font-size: clamp(2.8rem, 10vw, 5rem);
            font-weight: 500;
            letter-spacing: 2px;
            color: #1e1c1a;
            text-shadow: 0 1px 1px rgba(0,0,0,0.02);
            display: inline-block;
            position: relative;
            padding-bottom: 0.4em;
            line-height: 1.2;
            opacity: 0;
            transform: translateY(8px);
            animation: fadeUp 0.55s ease forwards;
        }

        @keyframes fadeUp {
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .name::after {
            content: '';
            position: absolute;
            bottom: 0;
            left: 0;
            width: 0%;
            height: 2px;
            background-color: #1e1c1a;
            transition: width 0.85s cubic-bezier(0.2, 0.9, 0.4, 1.1);
        }

        .name-line-animate.name::after {
            width: 100% !important;
        }

        .subtitle {
            font-size: clamp(0.9rem, 4vw, 1.2rem);
            letter-spacing: 4px;
            margin-top: 0.9rem;
            color: #2c2825;
            font-weight: 400;
            text-transform: uppercase;
            font-family: 'Cormorant Garamond', 'Segoe UI', serif;
            opacity: 0;
            animation: fadeUp 0.6s 0.12s ease forwards;
        }

        .links-container {
            width: 100%;
            max-width: 360px;
            margin: 0 auto;
            display: flex;
            flex-direction: column;
        }

        .link-item {
            display: flex;
            flex-direction: column;
            width: 100%;
        }

        .project-link {
            display: block;
            text-align: center;
            font-size: 1.4rem;
            font-weight: 440;
            font-family: 'Cormorant Garamond', 'Georgia', serif;
            letter-spacing: 2px;
            padding: 0.7rem 0.2rem;
            color: #1e1c1a;
            text-decoration: none;
            background: none;
            border-radius: 0px;
            line-height: 1.4;
            transition: all 0.28s ease;
            opacity: 0;
            transform: translateY(6px);
            animation: fadeUp 0.5s ease forwards;
        }

        .project-link:hover {
            color: #000000;
            transform: translateX(5px);
            letter-spacing: 2.5px;
        }

        .project-link:active {
            opacity: 0.7;
            transform: translateX(2px);
        }

        .divider-line {
            width: 0%;
            height: 1px;
            background-color: rgba(30, 28, 26, 0.35);
            margin: 0 auto;
            transition: width 0.7s cubic-bezier(0.2, 0.85, 0.4, 1);
        }

        .divider-line-animate {
            width: 100% !important;
        }

        .link-item:last-child .divider-line {
            display: none;
        }

        .contact-section {
            margin-top: 2.5rem;
            width: 100%;
            max-width: 360px;
            text-align: center;
            opacity: 0;
            transform: translateY(12px);
            animation: fadeUp 0.6s 0.25s ease forwards;
        }

        .contact-label {
            font-size: 0.85rem;
            letter-spacing: 3px;
            text-transform: uppercase;
            color: #4a4540;
            margin-bottom: 0.9rem;
            font-weight: 400;
            font-family: 'Cormorant Garamond', monospace;
        }

        .contact-items {
            display: flex;
            justify-content: center;
            gap: 2.2rem;
            flex-wrap: wrap;
            row-gap: 0.8rem;
        }

        .contact-link {
            font-size: 1.05rem;
            font-family: 'Cormorant Garamond', 'Georgia', serif;
            letter-spacing: 1.5px;
            color: #2c2825;
            text-decoration: none;
            border-bottom: 1px dotted rgba(44, 40, 37, 0.4);
            padding-bottom: 0.2rem;
            transition: all 0.25s ease;
            background: none;
            border-radius: 0px;
            cursor: pointer;
        }

        .contact-link:hover {
            color: #000000;
            border-bottom-color: #1e1c1a;
            letter-spacing: 2px;
            transform: translateY(-1px);
        }

        .contact-link:active {
            opacity: 0.7;
        }

        @media (max-width: 480px) {
            .content {
                padding: 1.8rem 1.2rem;
                justify-content: center;
            }
            .links-container {
                max-width: 280px;
            }
            .project-link {
                font-size: 1.2rem;
                padding: 0.55rem 0.1rem;
            }
            .name-section {
                margin-bottom: 1.8rem;
            }
            .subtitle {
                letter-spacing: 3px;
                margin-top: 0.6rem;
            }
            .contact-section {
                margin-top: 2rem;
                max-width: 280px;
            }
            .contact-items {
                gap: 1.5rem;
            }
            .contact-link {
                font-size: 0.95rem;
            }
            .contact-label {
                font-size: 0.75rem;
                margin-bottom: 0.7rem;
            }
        }

        @media (min-width: 1200px) {
            .links-container {
                max-width: 440px;
            }
            .project-link {
                font-size: 1.65rem;
                padding: 0.8rem 0.2rem;
            }
            .contact-section {
                max-width: 440px;
                margin-top: 3rem;
            }
            .contact-items {
                gap: 3rem;
            }
            .contact-link {
                font-size: 1.2rem;
            }
        }

        .project-link {
            -webkit-tap-highlight-color: transparent;
        }

        .contact-link {
            -webkit-tap-highlight-color: transparent;
        }

        .custom-alert {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.4);
            backdrop-filter: blur(3px);
            z-index: 1000;
            display: flex;
            align-items: center;
            justify-content: center;
            visibility: hidden;
            opacity: 0;
            transition: visibility 0.2s, opacity 0.2s ease;
        }

        .custom-alert.active {
            visibility: visible;
            opacity: 1;
        }

        .alert-box {
            background: rgba(30, 28, 26, 0.92);
            backdrop-filter: blur(12px);
            padding: 1.6rem 2.2rem;
            border-radius: 0px;
            text-align: center;
            box-shadow: 0 12px 28px rgba(0, 0, 0, 0.2);
            border: none;
            max-width: 280px;
            width: 80%;
            font-family: 'Cormorant Garamond', 'Georgia', serif;
        }

        .alert-message {
            font-size: 1.25rem;
            letter-spacing: 1px;
            color: #f0ede8;
            margin-bottom: 1.5rem;
            word-break: break-all;
            font-weight: 450;
        }

        .alert-button {
            background: rgba(255, 255, 255, 0.2);
            border: none;
            padding: 0.5rem 1.2rem;
            font-size: 0.9rem;
            font-family: 'Cormorant Garamond', 'Georgia', serif;
            letter-spacing: 1px;
            color: #ffffff;
            cursor: pointer;
            transition: all 0.2s ease;
            border-radius: 0px;
            backdrop-filter: blur(4px);
        }

        .alert-button:hover {
            background: rgba(255, 255, 255, 0.35);
            letter-spacing: 1.5px;
        }
    </style>
</head>
<body>
    <div class="bg"></div>
    <div class="overlay"></div>

    <div class="content">
        <div class="name-section">
            <h1 class="name">AFTER</h1>
            <div class="subtitle">NEVER GIVE UP</div>
        </div>

        <div class="links-container">
            <div class="link-item">
                <a href="#" class="project-link" id="link1">拾柒日记</a>
                <div class="divider-line"></div>
            </div>
            <div class="link-item">
                <a href="#" class="project-link" id="link2">TLD VIP</a>
                <div class="divider-line"></div>
            </div>
            <div class="link-item">
                <a href="#" class="project-link" id="link3">eTLD</a>
                <div class="divider-line"></div>
            </div>
            <div class="link-item">
                <a href="#" class="project-link" id="link4">lDNS</a>
                <div class="divider-line"></div>
            </div>
        </div>

        <div class="contact-section">
            <div class="contact-label">联络回声</div>
            <div class="contact-items">
                <a class="contact-link" id="contactEmail">邮件</a>
                <a class="contact-link" id="contactWechat">微信</a>
                <a class="contact-link" id="contactQQ">QQ</a>
                <a class="contact-link" id="contactTelegram">Telegram</a>
            </div>
        </div>
    </div>

    <div id="customAlert" class="custom-alert">
        <div class="alert-box">
            <div class="alert-message" id="alertMessage"></div>
            <button class="alert-button" id="alertCloseBtn">确 认</button>
        </div>
    </div>

    <script>
        (function() {
            function triggerAllAnimations() {
                const nameElement = document.querySelector('.name');
                const dividerLines = document.querySelectorAll('.divider-line');
                
                if (nameElement) {
                    nameElement.classList.remove('name-line-animate');
                    void nameElement.offsetWidth;
                    nameElement.classList.add('name-line-animate');
                }
                
                if (dividerLines.length) {
                    dividerLines.forEach(line => {
                        line.classList.remove('divider-line-animate');
                        void line.offsetWidth;
                        line.classList.add('divider-line-animate');
                    });
                }
            }
            
            function setupLinks() {
                const defaultLinks = [
                    'https://www.017.com.cn',
                    'https://tld.vip',
                    'https://www.etld.cn',
                    'https://www.ldns.cn'
                ];
                const linkElements = document.querySelectorAll('.project-link');
                if (linkElements.length === 4) {
                    linkElements.forEach((link, idx) => {
                        if (!link.hasAttribute('data-custom')) {
                            link.href = defaultLinks[idx];
                            link.setAttribute('target', '_blank');
                            link.setAttribute('rel', 'noopener noreferrer');
                        }
                    });
                }
            }
            
            function showAlert(message) {
                const alertOverlay = document.getElementById('customAlert');
                const alertMessageDiv = document.getElementById('alertMessage');
                if (!alertOverlay || !alertMessageDiv) return;
                alertMessageDiv.innerText = message;
                alertOverlay.classList.add('active');
            }
            
            function setupContactHandlers() {
                const emailLink = document.getElementById('contactEmail');
                const wechatLink = document.getElementById('contactWechat');
                const qqLink = document.getElementById('contactQQ');
                const telegramLink = document.getElementById('contactTelegram');
                
                if (emailLink) {
                    emailLink.addEventListener('click', function(e) {
                        e.preventDefault();
                        showAlert('[email protected]');
                    });
                }
                
                if (wechatLink) {
                    wechatLink.addEventListener('click', function(e) {
                        e.preventDefault();
                        showAlert('nnclll');
                    });
                }
                
                if (qqLink) {
                    qqLink.addEventListener('click', function(e) {
                        e.preventDefault();
                        showAlert('暂无可用账号');
                    });
                }
                
                if (telegramLink) {
                    telegramLink.addEventListener('click', function(e) {
                        e.preventDefault();
                        showAlert('@LocalDNS');
                    });
                }
            }
            
            function initAlertCloser() {
                const alertOverlay = document.getElementById('customAlert');
                const closeBtn = document.getElementById('alertCloseBtn');
                if (!alertOverlay || !closeBtn) return;
                
                function closeAlert() {
                    alertOverlay.classList.remove('active');
                }
                
                closeBtn.addEventListener('click', closeAlert);
                alertOverlay.addEventListener('click', function(e) {
                    if (e.target === alertOverlay) {
                        closeAlert();
                    }
                });
                
                document.addEventListener('keydown', function(e) {
                    if (e.key === 'Escape' && alertOverlay.classList.contains('active')) {
                        closeAlert();
                    }
                });
            }
            
            function resetAndAnimate() {
                triggerAllAnimations();
                setupLinks();
                setupContactHandlers();
            }
            
            window.addEventListener('pageshow', function(event) {
                if (event.persisted) {
                    resetAndAnimate();
                } else {
                    resetAndAnimate();
                }
            });
            
            if (document.readyState === 'loading') {
                document.addEventListener('DOMContentLoaded', function() {
                    resetAndAnimate();
                    initAlertCloser();
                });
            } else {
                resetAndAnimate();
                initAlertCloser();
            }
            
            (function handleVisibilityChange() {
                let hiddenProperty = 'hidden' in document ? 'hidden' : 'webkitHidden' in document ? 'webkitHidden' : undefined;
                let visibilityChangeEvent = hiddenProperty ? (hiddenProperty === 'hidden' ? 'visibilitychange' : 'webkitvisibilitychange') : null;
                if (visibilityChangeEvent) {
                    document.addEventListener(visibilityChangeEvent, function() {
                        if (!document[hiddenProperty]) {
                            triggerAllAnimations();
                        }
                    });
                }
            })();
        })();
    </script>
</body>
</html>
这家伙太懒了,什么也没留下。
已有评论 ( 1 )
提示:您必须 登录 才能查看此内容。
域名市场
   域名载入中...
创建新帖
自助推广 (点击空位或 这里 添加)
确认删除
确定要删除这篇帖子吗?删除后将无法恢复。
删除成功
帖子已成功删除,页面将自动刷新。
删除失败
删除帖子时发生错误,请稍后再试。