blogedit icon

作者:
藤原
Fork(复制)
下载
嵌入
设置
BUG反馈
index.html
现在支持上传本地图片了!
            
            <!DOCTYPE html>
<html>
<head>
    <style>
        /* ================= 全局样式 ================= */
        @import url("https://fonts.cdnfonts.com/css/satoshi");
        * {
            box-sizing: border-box;
            -webkit-font-smoothing: antialiased;
            text-rendering: optimizeLegibility;
            scroll-behavior: smooth;
        }
        html, body {
            min-height: 100%;
        }

        body {
            margin: 0;
            font-family: "Satoshi", sans-serif, monospace;
            color: #eee;
            font-size: 18px;
            line-height: 161.8%;
            background: #212431;
            interpolate-size: allow-keywords;
        }

        /* 滚动条样式 */
        ::-webkit-scrollbar {
            width: 14px;
        }
        ::-webkit-scrollbar-track {
            background: transparent;
        }
        ::-webkit-scrollbar-thumb {
            background: #ea5c1f;
            border: 4px solid #212431;
            cursor: pointer;
        }
        ::-webkit-scrollbar-thumb:hover {
            background: #ea5c1f77;
        }

        /* ================= 文章容器 ================= */
        article {
            max-width: 618px;
            padding: 8px 24px;
            margin: auto;
            margin-top: 100px;
            margin-bottom: 100px;
            font-weight: 100;
            position: relative;
            overflow: hidden;

            border-bottom: 4px solid #d6d7d711;
            border-left: 4px solid #d6d7d711;

            background: linear-gradient(90deg, #46506433 0%, #4f5d7533);
            border-top-right-radius: 64px;
        }

        /* ================= 顶部区域 ================= */
        article h1 {
            position: absolute;
            margin: 0;
            top: 0;
            padding: 16px 22px 16px 0px;
            background: #292f3e;
            border-bottom-right-radius: 24px;
            z-index: 2;
            line-height: 100%;
            color: #ea5c1f;
            font-size: 1.8em;
        }

        article .date {
            position: absolute;
            margin: 0;
            bottom: -28px;
            padding: 0px 24px 8px 0px;
            border-bottom-right-radius: 22px;
            z-index: 2;
            color: #fff;
            font-size: 16px;
            font-weight: 400;
            background: #292f3e;
        }

        /* 特色图片区域 - 修复图标部分 */
        .featured-image {
            width: 100%;
            height: 324px;
            background: url("https://picsum.photos/600/400?grayscale");
            background-size: cover;
            background-position: 50% 16.18%;
            margin-top: 16px;
            border-top-right-radius: 42px;
            border-bottom: 4px solid #ea5c1f;
            position: relative;
            z-index: 1;
        }
        .featured-image .expand {
            position: absolute;
            right: 0px;
            bottom: -4px;
            color: #fff;
            cursor: pointer;
            background: #292f3e;
            border-top-left-radius: 32px;
            width: 64px;
            height: 64px;
            border-left: 4px solid #ea5c1f;
            border-top: 4px solid #ea5c1f;
        }
        .featured-image .expand::before {
            content: "+";
            display: flex;
            position: absolute;
            width: 100%;
            height: 100%;
            align-items: center;
            justify-content: center;
            font-size: 2em;
            font-weight: bold;
            color: #ea5c1f;
            transition: all 0.4s ease-in-out;
        }
        .featured-image .expand.close::before {
            content: "-";
        }
        .featured-image .expand:hover::before {
            transform: rotate(90deg);
        }
        .featured-image .expand.close:hover::before {
            transform: rotate(0deg);
        }

        /* ================= 中部内容区域 ================= */
        article .content {
            transition: height 1s ease-out;
            visibility: visible;
            height: 0;
            overflow: clip;
        }
        article:has(.expand.close) .content {
            transition: height 1s ease-in;
            height: auto;
        }

        article aside {
            border-left: 4px solid #ea5c1f;
            padding-left: 16px;
            margin-bottom: 16px;
            line-height: 124%;
        }

        article strong {
            font-weight: 600;
        }

        article a {
            font-weight: 500;
            color: #ea5c1f;
            text-decoration: none;
            cursor: pointer;
        }
        article a:hover {
            text-decoration: underline;
        }

        .dotmap {
            width: 100%;
            height: min(30vw, 200px);
            background: linear-gradient(#fff0, #fff4, #fff0);
            mask-image: url("https://assets.codepen.io/3421562/dotmap.svg");
            position: relative;
        }
        .dotmap::before {
            scale: 0;
            opacity: 0;
            transition: all 0.2s ease-out;
            content: "";
            display: block;
            position: absolute;
            width: 100px;
            height: 100px;
            border-radius: 200px;
            background: #ea5c1f;
            filter: blur(40px);
            top: var(--y);
            left: var(--x);
            translate: -50% -50%;
        }
        .dotmap:hover::before {
            scale: 1;
            opacity: 1;
        }
        .dotmap::after {
            content: "";
            display: block;
            position: absolute;
            width: 100%;
            height: 100%;
            background: url("https://assets.codepen.io/3421562/dotmap_h.svg");
            top: 0;
            left: 0;
        }

        .planet {
            width: 100%;
            height: min(30vw, 216px);
            overflow: hidden;
            position: relative;
            background: url("https://assets.codepen.io/3421562/stars.svg");
            background-size: contain;
            background-blend-mode: color-burn;
            box-shadow: 4px 6px 0 0 #212431, 0 8px 16px 0 #0000;
        }
        .planet::after {
            display: block;
            content: "";
            width: min(60vw, 500px);
            height: min(60vw, 500px);
            box-shadow: -2px 0 12px 1px #ea5c1f44, inset 42px -142px 64px 1px #ea5c1faa,
                inset -2px 2px 6px 1px #ea5c1f22, inset -8px 22px 16px 1px #ea5c1f22,
                inset -42px 42px 42px 1px #212431, inset 0 0 100px 1px #fff3;
            border-radius: 100%;
            position: absolute;
            right: -34%;
            top: 6%;
            background: #41322c;
        }
        .planet span {
            position: absolute;
            width: min(110vw, 800px);
            height: min(110vw, 800px);
            right: -46%;
            top: -100%;
            border-radius: 100%;
            transform-style: preserve-3d;
            transform: rotateX(75deg) rotateY(16deg) rotate3d(0, 0, 1, 0deg);
            animation: pRev 20s linear infinite;
            border: 2px solid #ea5c1f44;
        }
        @keyframes pRev {
            to {
                transform: rotateX(75deg) rotateY(16deg) rotate3d(0, 0, 1, 360deg);
            }
        }

        .skyline {
            width: 100%;
            height: 200px;
            overflow: hidden;
            position: relative;
            background: url("https://assets.codepen.io/3421562/skyline.svg");
            background-size: max(100%, 500px);
            background-position: 50% 12px;
            background-repeat: no-repeat;
            background-blend-mode: color-burn;
            box-shadow: 0px 6px 0 0 #212431, 0 8px 16px 0 #0000;
        }

        /* ================= 底部区域 ================= */
        article .foot {
            display: flex;
            gap: 24px;
            align-items: center;
            flex-wrap: wrap;
            padding-bottom: 16px;
        }
        article .foot img {
            max-width: 84px;
            height: auto;
            border: 4px solid #f5f5f5;
            border-top-color: #ea5c1f;
            border-right-color: #ea5c1f;
            object-fit: contain;
        }
        article .author a {
            font-weight: 600;
        }
        article .author span {
            font-size: 1.4em;
            padding-right: 2px;
            translate: 0 2px;
            rotate: -33deg;
            display: inline-block;
            color: #eec7b7;
            transition: all 0.2s ease-in-out;
        }
        article .author a:hover,
        article .author a:hover span {
            color: #ea5c1f;
            rotate: 0deg;
        }
    </style>
</head>
<body>
    <!-- ================= 文章整体结构 ================= -->
    <article>
        <!-- 顶部区域:标题和日期 -->
        <h1>
            <span id="ai-title">文字之墙:博客随笔</span>
            <div class="date">2024年11月19日</div>
        </h1>
        
        <!-- 特色图片区域 -->
        <div class="featured-image">
            <div class="expand" onclick="this.classList.toggle('close')"></div>
        </div>
        
        <!-- 中部:主要内容区域 -->
        <div class="content">
            <p id="ai-content-1"></p>
            <p id="ai-content-2"></p>
            
            <!-- AI内容生成脚本 -->
            <script>
                function fillWithAIContent(prompt, elementId) {
                    const randomValue = Math.random().toString(36).substring(2, 8);
                    const uniquePrompt = `${prompt} unique-${randomValue}`;
                    fetch(`https://text.pollinations.ai/${encodeURIComponent(uniquePrompt)}`)
                        .then(response => response.text())
                        .then(data => {
                            const words = data.split(" ");
                            const wordCount = Math.min(words.length, 2);
                            const randomIndexes = Array.from({
                                    length: wordCount
                                }, () =>
                                Math.floor(Math.random() * words.length)
                            );
                            randomIndexes.forEach(index => {
                                words[index] = `<strong>${words[index]}</strong>`;
                            });
                            document.getElementById(elementId).innerHTML = words.join(" ");
                        })
                        .catch(error => {
                            console.error("获取AI内容时出错:", error);
                        });
                }
                // 生成AI内容
                fillWithAIContent("写一个不超过四个字的博客标题,关于日常生活中正念的好处", "ai-title");
                fillWithAIContent("写一段关于日常生活中正念好处的简短介绍段落", "ai-content-1");
                fillWithAIContent("写一段关于日常生活中正念好处的简短叙述段落", "ai-content-2");
            </script>
            
            <p>从前有个智者说,生活就像一本书,需要我们细细品读。当下即是永恒,每一个瞬间都值得珍惜。
            <aside>
                <p><strong>活在当下</strong>。正念让我们能够真正体验生活的每一个细节,不被过去困扰,不为未来焦虑。</p>
            </aside>
            当我们专注于呼吸,专注于此刻,心灵便得到了净化。正念不是逃避,而是更深地融入生活,感受每一刻的真实。</p>
            
            <!-- 点阵图效果 -->
            <div class="dotmap"></div>
            <script>
                function hoverFollow(target) {
                    target.addEventListener('mousemove', (event) => {
                        const rect = target.getBoundingClientRect();
                        const x = event.clientX - rect.left;
                        const y = event.clientY - rect.top;
                        target.style.setProperty('--x', `${x}px`);
                        target.style.setProperty('--y', `${y}px`);
                    });
                }
                hoverFollow(document.querySelector('.dotmap'));
            </script>

            <h2>文字的力量</h2>
            <p>文字是人类最伟大的发明之一,它承载着思想,传递着情感。<strong>用心书写</strong>的文字能够穿越时空,触动心灵。每一篇文章都是作者心血的结晶,每一个故事都值得被认真对待。</p>
            
            <!-- 星球动画效果 -->
            <div class="planet">
                <span></span>
                <span></span>
                <span></span>
            </div>

            <h2>如何让文字更有魅力</h2>
            <p>好的文字需要用心雕琢,就像匠人打磨艺术品一样。首先,要有清晰的思路;其次,选择恰当的词语;最重要的是,要倾注真情实感。</p>
            
            <!-- 天际线效果 -->
            <div class="skyline"></div>
            
            <p>在这个信息爆炸的时代,静下心来写作变得越来越珍贵。文字不仅是表达的工具,更是思考的载体。当我们放慢脚步,用心书写,文字自然会散发出独特的光芒。</p>
            <p>写作是一种修行,每一篇文章都是作者与世界对话的方式。无论长短,无论题材,真诚的文字总能找到它的读者。</p>
            <p>让我们珍惜文字的力量,用它记录生活,表达思想,连接心灵。在这个快速变化的世界里,文字是我们永恒的伴侣。</p>
        </div>
        
        <!-- 底部区域:作者信息 -->
        <div class="foot">
            <a href="#" target="_blank"><img src="https://assets.codepen.io/3421562/internal/avatars/users/default.png" alt="作者头像" class="profile-card"></a>
            <div class="author">作者:<br><a href="#" target="_blank"><span>@</span>TENG YUAN</a></div>
        </div>
    </article>
</body>
</html>
        
预览
控制台