cnblogs首页美化

美化 Cnblogs 首页,包括顶部导航,左侧边栏和右侧边栏,分页选择按钮,文章列表

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

You will need to install an extension such as Tampermonkey to install this script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         cnblogs首页美化
// @namespace    http://tampermonkey.net/
// @version      0.1
// @license      MIT
// @icon         https://www.cnblogs.com/images/logo.svg?v=2SMrXdIvlZwVoB1akyXm38WIKuTHVqvGD0CweV-B6cY
// @description  美化 Cnblogs 首页,包括顶部导航,左侧边栏和右侧边栏,分页选择按钮,文章列表
// @author       xiaoye
// @match        https://www.cnblogs.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 包裹 "周边" 链接在 li 元素中
    const surroundWithLi = () => {
        const navLeft = document.getElementById('nav_left');
        if (navLeft) {
            navLeft.querySelectorAll('a').forEach(link => {
                if (link.textContent.includes('周边') && link.parentElement.tagName !== 'LI') {
                    const li = document.createElement('li');
                    navLeft.insertBefore(li, link);
                    li.appendChild(link);
                }
            });
        }
    };

    // 美化文章列表项
    const stylePostItems = () => {
        document.querySelectorAll('.post-item').forEach(article => {
            // 设置样式
            Object.assign(article.style, {
                backgroundColor: "#ffffff",
                boxShadow: "0px 0px 10px rgba(0, 0, 0, 0.1)",
                borderRadius: "8px",
                padding: "20px",
                marginBottom: "20px",
                transition: "transform 0.3s, box-shadow 0.3s, border 0.3s",
                cursor: "pointer",
                border: "1px solid #ddd"
            });

            // 鼠标移入和移出效果
            article.addEventListener('mouseenter', () => {
                article.style.boxShadow = "0px 0px 15px rgba(0, 0, 0, 0.2)";
                article.style.transform = "scale(1.02)";
                article.style.border = "1px solid #007acc";
            });

            article.addEventListener('mouseleave', () => {
                article.style.boxShadow = "0px 0px 10px rgba(0, 0, 0, 0.1)";
                article.style.transform = "scale(1)";
                article.style.border = "1px solid #ddd";
            });

            // 添加点击事件
            const titleLink = article.querySelector('a.post-item-title');
            if (titleLink) {
                const href = titleLink.getAttribute('href');
                article.addEventListener('click', (event) => {
                    if (!event.target.closest('a')) {
                        window.open(href, '_blank');
                    }
                });
            }

            // 防止其他链接的点击事件冒泡
            article.querySelectorAll('a').forEach(link => {
                link.addEventListener('click', (event) => {
                    event.stopPropagation();
                });
            });
        });
    };

    // 美化侧边栏
    const styleSidenavItems = () => {
        document.querySelectorAll('.sidenav-item a').forEach(item => {
            Object.assign(item.style, {
                borderRadius: '8px',
                padding: '10px',
                transition: 'background-color 0.3s, transform 0.3s, border 0.3s',
                border: "1px solid #ddd"
            });

            item.addEventListener('mouseenter', () => {
                item.style.backgroundColor = '#007acc';
                item.style.color = '#ffffff';
                item.style.transform = 'scale(1.05)';
                item.style.border = "1px solid #007acc";
            });

            item.addEventListener('mouseleave', () => {
                item.style.backgroundColor = '';
                item.style.color = '';
                item.style.transform = 'scale(1)';
                item.style.border = "1px solid #ddd";
            });
        });
    };


    // 美化侧边栏
    const beautifySidebar = () => {
        const sidebarItems = document.querySelectorAll('.sidebar .card, .sidebar .sidebar-bh');
        sidebarItems.forEach(function(item) {
            item.style.backgroundColor = '#ffffff';
            item.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.1)';
            item.style.borderRadius = '8px';
            item.style.padding = '15px';
            item.style.marginBottom = '20px';
            item.style.marginLeft = '15px';
            item.style.transition = 'transform 0.3s, box-shadow 0.3s';
        });

        // 侧边栏标题样式
        const cardTitles = document.querySelectorAll('.card-title a');
        cardTitles.forEach(function(title) {
            title.style.color = '#007acc';
            title.style.textDecoration = 'none';
            title.style.fontSize = '16px';
            title.style.fontWeight = 'bold';
            title.style.transition = 'color 0.3s';
        });

        cardTitles.forEach(function(title) {
            title.addEventListener('mouseenter', function() {
                title.style.color = '#005f99';
            });

            title.addEventListener('mouseleave', function() {
                title.style.color = '#007acc';
            });
        });

        // 侧边栏项目列表样式
        const itemList = document.querySelectorAll('.item-list li');
        itemList.forEach(function(item) {
            item.style.borderBottom = '1px solid #ddd';
            item.style.padding = ' 0';
        });

        // 侧边栏图片样式
        const sidebarImages = document.querySelectorAll('.sidebar-image img');
        sidebarImages.forEach(function(image) {
            image.style.borderRadius = '8px';
            image.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.1)';
            image.style.maxWidth = '100%';
            image.style.height = 'auto';
        });
    };



    // 修改下拉菜单的a标签宽度
    const styleDropdownLinks = () => {
        document.querySelectorAll('.dropdown-menu a').forEach(link => {
            Object.assign(link.style, {
                width: '80px',
                display: 'inline-block',
                textAlign: 'center'
            });
        });
    };


    // 创建样式元素并插入到页面头部
    const applyGlobalStyles = () => {
        const styleElement = document.createElement('style');
        styleElement.textContent = `
            .pager a, .pager span {
                display: inline-block;
                padding: 8px 12px;
                margin: 0 4px;
                border-radius: 5px;
                text-decoration: none;
                color: #007acc;
                border: 1px solid #ddd;
                background-color: #fff;
                transition: all 0.3s ease;
                box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
            }
            .pager a.current, .pager span.current {
                background-color: #007acc;
                color: #fff;
                border-color: #007acc;
            }
            .pager a:hover {
                background-color: #005f99;
                color: #fff;
                border-color: #005f99;
                box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2);
                transform: scale(1.05);
            }
            .headline ul {
                display: flex;
                flex-wrap: wrap;
                justify-content: space-between;
                padding: 0;
                list-style: none;
            }
            .headline li {
                width: 48%;
                margin-bottom: 15px;
                display: flex;
                justify-content: space-between;
                align-items: center;
            }
            .headline a {
                display: inline-block;
                width: calc(100% - 40px);
                padding: 10px;
                border-radius: 8px;
                text-decoration: none;
                color: #333;
                border: 1px solid #ddd;
                background-color: #f9f9f9;
                transition: all 0.3s ease;
                box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
            }
            .headline a:hover {
                background-color: #f9f9f9;
                color: #333;
                border-color: #007acc;
                box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2);
                transform: scale(1.05);
            }
            .headline .headline-label {
                font-weight: bold;
                color: #007acc;
                margin-right: 5px;
            }
            .headline .right_more {
                width: 30px;
                margin-left: 10px;
                padding: 5px 10px;
                font-size: 0.9em;
                background-color: #f9f9f9;
                color: #333;
                border: 1px solid #ddd;
                border-radius: 5px;
                text-decoration: none;
                transition: all 0.3s ease;
                box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
            }
            .headline .right_more:hover {
                border-color: #007acc;
                box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.2);
                transform: scale(1.05);
            }
            #nav_left li a {
                color: #333;
                text-decoration: none;
                padding: 10px 15px;
                display: block;
                position: relative;
                transition: color 0.3s ease;
            }
            #nav_left li a::after {
                content: '';
                position: absolute;
                left: 0;
                bottom: 0;
                width: 100%;
                height: 2px;
                background-color: #007acc;
                transform: scaleX(0);
                transform-origin: bottom right;
                transition: transform 0.3s ease;
            }
            #nav_left li a:hover {
                color: #007acc;
            }
            #nav_left li a:hover::after {
                transform: scaleX(1);
                transform-origin: bottom left;
            }
        `;
        document.head.appendChild(styleElement);
    };

    // 初始化所有样式和功能
    const init = () => {
        surroundWithLi();
        stylePostItems();
        styleSidenavItems();
        styleDropdownLinks();
        applyGlobalStyles();
        beautifySidebar();
    };

    // 页面初始加载时应用所有样式和功能
    init();

    // 监听DOM变化,确保动态内容的样式保持
    const observer = new MutationObserver(init);
    observer.observe(document.body, { childList: true, subtree: true });
})();