- // ==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 });
- })();
-
-