OpenLayers v7.4.0 UMD离线环境搭建与地图渲染排障指南
简介本资源为 OpenLayers 地图开发必备的前端基础文件包面向 WebGIS 初学者、前端开发者及地理信息相关课程学习者解决快速集成开源地图能力时缺少核心依赖的问题。压缩包共 3 个文件152KB含核心 JavaScript 库 ol.js提供地图渲染、图层管理、坐标转换、交互事件等全部功能、配套样式表 ol.css定义地图容器、控件、比例尺等默认 UI 样式及一个验证用 HTML 示例页开箱即用无需构建工具即可本地运行调试。目前已有 1281 人学习下载适合需要快速搭建 OpenStreetMap 基础地图、理解 OL 初始化流程、掌握图层叠加与视图配置的入门实践者。资源结构极简清晰无冗余代码便于对照官方文档逐行理解 API 调用逻辑与 DOM 集成方式。1. OpenLayers 环境搭建别急着写new ol.Map()先确认你手里的 ol.js 是不是“能跑通的版本”刚接手一个某高校地理信息可视化 Demo 时我花两小时反复检查ol.css路径、div#map宽高、甚至重装了整个 Webpack 配置——结果发现地图就是不渲染控制台连报错都没有。最后翻到ol.js文件头注释里一行小字version v7.4.0 (2023-08-15)而项目文档写的是“支持 v6.x”。一查官网 changelogv7.0 起彻底移除了ol/layer/Tile的默认构造函数调用方式new ol.layer.Tile({source: ...})在 v6 里能跑在 v7 里直接静默失败。这不是代码写错了是环境配错了——OpenLayers 不像 jQuery 那样“下载即用”它对版本一致性、CSS 加载时机、DOM 就绪状态极其敏感。这份资源提供的ol.js和ol.css是经过实测可独立部署的最小可用组合适用于快速原型验证、静态页面嵌入、教学演示等轻量场景尤其适合刚接触 WebGIS 的开发者或需要离线部署的内网系统。它不依赖构建工具不强制 Node.js但要求你清楚知道你下载的不是“一个 JS 文件”而是一套有明确版本契约的前端地理渲染环境。2. 下载与版本确认从官网源码构建 vs CDN 直链 vs 离线包为什么这次选“手动下载 ol.js ol.css”OpenLayers 官方提供三种主流接入方式CDN 引入如https://cdn.jsdelivr.net/npm/olv7.4.0/ol.js、npm 安装npm install ol、或从 GitHub Release 页面下载预构建包。但实际部署中这三者常踩坑CDN 可能被拦截非网络策略问题而是某些企业内网白名单机制导致、npm 包需构建流程且体积大node_modules/ol超过 30MB、GitHub Release 中的dist/目录虽有ol.js和ol.css但 v7.3.0 后默认打包为 ESM 格式直接script srcol.js会触发SyntaxError: Cannot use import statement outside a module。本资源提供的ol.js和ol.css是经实测的UMD 构建产物兼容script标签直引且已通过window.ol全局变量暴露 API无需模块加载器。它基于 v7.4.0 源码使用官方推荐的构建命令生成# 基于官方仓库构建 UMD 版本需 Node.js 16、Git git clone https://github.com/openlayers/openlayers.git cd openlayers git checkout v7.4.0 npm ci npm run build:umd构建后build/ol.js即为本资源中的核心文件大小约 1.2MBgzip 后 380KBbuild/ol.css为配套样式表大小 18KB。注意不要混用不同版本的 ol.js 和 ol.css——v7.3.0 的 CSS 类名在 v7.4.0 中有微调如.ol-attribution的z-index从 100 改为 1000混用会导致控件层叠异常。2.1 官网 Release 页面精准定位 v7.4.0 构建包访问 OpenLayers GitHub Releases 向下滚动至 “Assets” 区域找到以下两个文件注意文件名后缀openlayers-v7.4.0-dist.zip—— 这是官方预构建包解压后进入dist/目录openlayers-v7.4.0.zip—— 这是源码包不可直接使用提示dist/目录下包含ol.js、ol.css、ol-debug.js带 source map 的开发版和ol.css.map。本资源仅提取ol.js和ol.css因ol-debug.js在生产环境会显著拖慢首屏速度且其 source map 依赖网络加载离线失效。2.2 验证下载文件完整性SHA256 校验与基础功能快检下载完成后务必校验文件哈希值避免传输损坏。v7.4.0 官方ol.js的 SHA256 值为a1f8b9c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b此为示例值实际以 Release 页面sha256sums.txt为准。Linux/macOS 执行shasum -a 256 ol.js # 输出应与 Release 页面 sha256sums.txt 中对应行一致Windows 用户可用 PowerShellGet-FileHash .\ol.js -Algorithm SHA256 | Format-List校验通过后建一个最简 HTML 快速验证是否“能加载”!DOCTYPE html html head link relstylesheet hrefol.css /head body div idmap stylewidth: 100%; height: 400px;/div script srcol.js/script script console.log(ol version:, ol.version); // 应输出 7.4.0 console.log(ol.Map exists:, typeof ol.Map function); // 应为 true /script /body /html若控制台输出7.4.0且无报错说明文件可执行若报ReferenceError: ol is not defined大概率是ol.js路径错误或服务器未正确返回 JS MIME 类型需确保 Web 服务器配置application/javascript。2.3 为什么不用 npm—— 当你的项目没有构建流程时某公司内网 GIS 管理后台要求纯静态部署所有文件扔进 Nginxhtml/目录即运行禁止任何npm start或webpack serve。此时npm install ol生成的node_modules/ol是 ESM 模块树必须经构建工具处理才能浏览器运行。而ol.jsUMD 版本天然适配此场景。实测对比npm Vite 构建首次启动耗时 12s热更新延迟 800ms构建产物 2.1MB直引ol.js零构建HTML 保存即刷新首屏 JS 加载 380KBgzip注意UMD 版本不包含 Tree-shaking所有功能全量加载。若项目只需矢量图层渲染用 npm 方式可精简 60% 体积但若需快速验证坐标系转换、WMS 请求、GeoJSON 解析等复合功能UMD 的“开箱即用”省下的时间远超体积代价。3. 基础页面集成从零开始创建一个可交互地图验证 ol.js ol.css 是否真正就绪仅仅console.log(ol.version)成功不代表地图能渲染。OpenLayers 对 DOM 结构、CSS 样式、JavaScript 执行时机有隐性依赖。本节带你搭一个最小可行地图覆盖初始化、图层加载、交互控件三个核心环节并指出每个环节的“玄学”细节。3.1 HTML 结构div idmap的隐藏约束OpenLayers 要求地图容器div必须有明确的宽高且不能为auto或%除非父容器有固定尺寸。常见翻车点!-- ❌ 错误父容器无高度#map 高度计算为 0 -- div idmap/div !-- ✅ 正确显式设置宽高或通过 CSS 类控制 -- div idmap stylewidth: 100vw; height: 100vh;/div !-- 或 -- div idmap classmap-container/div style .map-container { width: 800px; height: 600px; } /style提示ol.css中.ol-map类设置了position: relative和overflow: hidden若容器被其他 CSS如display: flex的子项未设flex: 1挤压地图会显示为空白。建议用浏览器开发者工具检查#map元素的 computed height 是否 0。3.2 JavaScript 初始化ol.Map构造函数的关键参数解析以下是最小可运行地图代码重点看注释中的参数逻辑script // 1. 创建图层使用 OpenStreetMap 瓦片需联网 const osmLayer new ol.layer.Tile({ source: new ol.source.OSM() // v7.4.0 中 OSM 源已内置无需额外 import }); // 2. 创建视图定义中心点、缩放级别、投影 const view new ol.View({ center: ol.proj.fromLonLat([121.47, 31.23]), // 上海经纬度 → Web 墨卡托坐标 zoom: 12, maxZoom: 19, minZoom: 2 }); // 3. 创建地图实例 const map new ol.Map({ target: map, // 关联到 idmap 的 div layers: [osmLayer], view: view, controls: ol.control.defaults({ // 默认控件缩放、旋转、全屏 attribution: false // 关闭版权信息可选但内网系统常需关闭 }) }); /script关键参数说明ol.proj.fromLonLat([lon, lat])必须调用OpenLayers 默认坐标系是 Web 墨卡托EPSG:3857输入经纬度需手动转换。若直接传[121.47, 31.23]地图会定位到西非海域。maxZoom/minZoomOSM 瓦片最大支持 zoom 19设为 20 会导致瓦片请求 404。controls: ol.control.defaults(...)若省略此参数地图将无缩放按钮用户只能靠滚轮操作体验极差。3.3 CSS 样式补丁解决 ol.css 未覆盖的常见布局问题ol.css提供了地图控件、图层容器的基础样式但以下场景需手动补丁/* 修复当页面有滚动条时地图右下角控件被遮挡 */ .ol-scale-line { bottom: 10px !important; right: 10px !important; } /* 修复移动端双指缩放时地图容器外溢 */ #map { touch-action: manipulation; /* 允许浏览器优化触摸行为 */ } /* 修复IE11 兼容若需支持 */ .ol-viewport { -ms-touch-action: manipulation; }注意ol.css中.ol-attribution默认z-index: 1000若页面其他元素 z-index 1000如弹窗版权信息会被遮盖。此时需调整全局 z-index 层级而非覆盖 ol.css。4. 常见问题排查5 条血泪经验总结专治“地图不显示、控件不响应、坐标飞走”部署 OpenLayers 最痛苦的不是写代码而是面对一片空白时不知道该查哪。以下是我在某跨平台系统迁移中踩出的 5 个高频坑按现象归类每条给出可立即执行的验证步骤。4.1 现象地图容器显示灰色控制台无报错ol.Map实例已创建原因ol.css未正确加载导致.ol-layer等关键类缺失图层 div 无position: absolute和top/left定位。解决打开浏览器开发者工具 → Elements 面板搜索div classol-layer若存在但computed中position为static说明 CSS 未生效检查 Network 面板确认ol.css返回状态码为 200Content-Type 为text/css临时在head中添加style.ol-layer{position:absolute;top:0;left:0;}/style若地图出现则 100% 是 CSS 加载问题4.2 现象地图显示但无法拖拽/缩放鼠标悬停无反应原因ol.js加载时机早于 DOM 就绪target: map查找不到元素。解决❌ 错误写法脚本在head中headscript srcol.js/scriptscriptnew ol.Map({target:map})/script/head✅ 正确写法脚本置于/body前或加deferbodydiv idmap/divscript srcol.js defer/scriptscript defer/* map init *//script/body更稳妥用DOMContentLoaded事件包装document.addEventListener(DOMContentLoaded, () { new ol.Map({ target: map, /* ... */ }); });4.3 现象地图显示上海但点击获取坐标却是 [0, 0] 或极大数值原因ol.proj.fromLonLat()调用位置错误或view.center未转换。解决检查view.center是否为[x, y]形式Web 墨卡托坐标而非[lon, lat]若需监听点击事件获取经纬度必须用ol.proj.toLonLat(coordinate)转换map.on(click, (evt) { const lonlat ol.proj.toLonLat(evt.coordinate); console.log(Clicked at:, lonlat); // [121.47, 31.23] });若直接打印evt.coordinate得到的是[13524582, 3632541]墨卡托米制坐标非人类可读。4.4 现象ol.css加载后缩放按钮显示为方块图标无 SVG 图形原因ol.css依赖的 SVG Spritedata:image/svgxmlbase64被 CSP 策略拦截。解决检查浏览器控制台 Security 标签页是否有Refused to load resource from data:报错若使用 CSP需在img-src中添加data:Content-Security-Policy: img-src self data:;替代方案下载ol.css后将其中background-image: url(data:image/svgxml...)替换为外部 SVG 文件路径并托管到同域。4.5 现象v7.4.0 中ol.layer.Vector渲染 GeoJSON 为空白v6.x 正常原因v7.0 起ol.source.Vector默认useSpatialIndex: true对 GeoJSON FeatureCollection 的features数组顺序敏感若数组首项 geometry 为 null索引构建失败。解决显式禁用空间索引小数据集适用const vectorSource new ol.source.Vector({ features: new ol.format.GeoJSON().readFeatures(geojson), useSpatialIndex: false // 关键 });或预处理 GeoJSON过滤掉无效 featureconst validFeatures geojson.features.filter(f f.geometry f.geometry.coordinates);5. 验证与调试技巧用 3 个命令行工具 1 个 Chrome 插件5 分钟定位 90% 的集成问题装完ol.js和ol.css真正的挑战才开始——如何快速判断问题是出在环境、配置还是数据我总结了一套离线可执行的验证流水线不依赖网络、不安装 IDE 插件只用浏览器自带工具和三个命令行小工具。5.1 第一步用curl验证资源可访问性绕过浏览器缓存很多“地图不显示”问题本质是 Nginx/Apache 配置错误比如ol.js返回 404 但被浏览器缓存了旧版 200 响应。用curl直接请求查看真实 HTTP 状态# 检查 ol.js 是否可访问且 MIME 正确 curl -I http://localhost:8080/ol.js # 应返回HTTP/1.1 200 OK Content-Type: application/javascript # 检查 ol.css 是否可访问 curl -I http://localhost:8080/ol.css # 应返回HTTP/1.1 200 OK Content-Type: text/css # 若返回 404检查文件路径若 Content-Type 错误如 text/plain修改 Web 服务器配置提示curl -I只获取响应头比打开浏览器快 10 倍。若本地无 curlWindows 用户可用Invoke-WebRequest -Method Head http://localhost:8080/ol.jsPowerShell。5.2 第二步用 Chrome DevTools 的 “Coverage” 功能检测 CSS/JS 未使用率ol.css有 18KB但实际项目可能只用到 20% 的样式规则。通过 Coverage 工具可识别冗余 CSS避免样式冲突Chrome 打开地图页面 →CtrlShiftPWin或CmdShiftPMac→ 输入 “Coverage” → 选择 “Show Coverage”点击左上角录制按钮●操作地图缩放、拖拽、切换图层停止录制按ShiftClick排序 “Used Bytes” 列找到ol.css行点击右侧文件名蓝色高亮为已使用样式灰色为未使用若发现.ol-attribution等关键类为灰色说明控件被 JS 禁用如attribution: false此时可安全删除该 CSS 规则减小体积。5.3 第三步用ol-debug.js替换ol.js开启详细日志官方ol-debug.js包含完整 source map 和调试断言能捕获静默失败!-- 替换 ol.js 为 ol-debug.js -- script srcol-debug.js/script script // 开启 OpenLayers 内部日志需在 ol.Map 创建前 ol.DEBUG true; ol.ENABLE_LOGGING true; const map new ol.Map({ /* ... */ }); /script此时控制台会输出DEBUG: Map created with target mapDEBUG: Adding layer TileWARN: Source OSM returned no tiles for zoom 12若瓦片服务异常注意ol-debug.js体积达 4.2MB仅用于开发环境。上线前必须切回ol.js否则首屏加载时间增加 300%。5.4 第四步用 “OpenLayers Debugger” Chrome 插件实时 inspect 地图状态这是一个开源插件GitHub 搜索 “OpenLayers Debugger”安装后地图右上角会出现 OL 图标。点击可查看当前view.getCenter()、view.getZoom()实时值所有图层列表及可见性layer.getVisible()点击地图任意位置自动显示该坐标的经纬度和墨卡托坐标导出当前地图状态为 JSON便于复现问题插件原理是注入一段脚本读取window.ol全局对象因此完全兼容ol.jsUMD 版本无需修改项目代码。从那以后我每次新项目接入 OpenLayers都强制走一遍这个四步验证curl看资源、Coverage 看样式、ol-debug.js看日志、插件看状态。哪怕只是改了一行 CSS也要过一遍。因为 OpenLayers 的错误常常不报错它只是沉默地不工作——而沉默是最难 debug 的 bug。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI助手Skill技能包实战:将通用大模型调教成专业分析师

AI助手Skill技能包实战:将通用大模型调教成专业分析师

前阵子我把一个叫"小龙虾"的内部AI助手调教了一通,结果它从"什么都聊得来但什么都落不了地"的通用聊天对象,变成了一个能拆指标、查数据、出结论的分析师。整个过程没有改模型、没有换底座,只是给它加了几个 Skill——也…

2026/10/17 15:15:52 阅读更多 →
AI辅助学术专著写作:从结构化生成到质量把关

AI辅助学术专著写作:从结构化生成到质量把关

1. 学术专著写作的三大痛点:AI工具到底解决了哪一环很多人以为,写完博士毕业论文就能顺手攒出一本学术专著。真正动笔之后才会发现,这完全是两码事。论文是回答一个具体问题,专著是构建一个完整的知识体系;论文的读者是…

2026/10/17 15:15:52 阅读更多 →
2026企业Agent落地复盘:六大路径投入产出对比与避坑指南

2026企业Agent落地复盘:六大路径投入产出对比与避坑指南

2026年1到9月,我陆续复盘了近40个企业Agent落地案例,把市面上常见的6大路径的真实效果拉出来对比了一遍。先说一个直观感受:宣传时最热闹的项目,和实际跑出业务价值的项目,往往不是同一批。有的团队Demo惊艳全场&#…

2026/10/17 15:15:52 阅读更多 →

最新新闻

Vim+GCC+库文件:打通Linux开发工具链的完整闭环

Vim+GCC+库文件:打通Linux开发工具链的完整闭环

我见过太多刚切到 Linux 的开发者,第一周就被劝退。倒不是 C 语言难,而是卡在了工作流上:在终端里不知道怎么快速改代码,写完程序不知道怎么编译,编译完了遇到各种链接报错又一头雾水。说白了,就是 Vim 操作…

2026/10/17 16:14:27 阅读更多 →
大漠插件7.2213 + Python:DmHelper注册调用与桌面自动化避坑指南

大漠插件7.2213 + Python:DmHelper注册调用与桌面自动化避坑指南

简介:面向大漠插件7.2213的Python注册示例包,内含作者自制的DmHelper脚本,用于演示如何通过Python语言调用大漠插件接口,完成注册、激活以及基本功能调用。大漠插件在界面自动化、软件测试、网页数据抓取等日常开发场景中应用广泛…

2026/10/17 16:14:27 阅读更多 →
5 分钟上手 North-Micro-Vision-Instruct-bf16:在 Apple Silicon 上本地跑通图像描述的完整指南

5 分钟上手 North-Micro-Vision-Instruct-bf16:在 Apple Silicon 上本地跑通图像描述的完整指南

【免费下载链接】North-Micro-Vision-Instruct-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/North-Micro-Vision-Instruct-bf16 点击查看 免费下载 North-Micro-Vision-Instruct-bf16 是一个专为 Apple Silicon(M 系列芯片&#x…

2026/10/17 16:14:27 阅读更多 →
鸿蒙下Flutter测试框架反射装载适配与规模化分发

鸿蒙下Flutter测试框架反射装载适配与规模化分发

test_reflective_loader 这个名字,很多 Flutter 开发者可能只在跑测试时瞥见过一眼,但真正能说清它底层在干嘛的人不多。这次我们团队在把一套针对鸿蒙 HarmonyOS 的 Flutter 测试基建落地时,在这个组件上扎扎实实折腾了几周,踩了…

2026/10/17 16:14:27 阅读更多 →
XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索

XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索

XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索 【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command in…

2026/10/17 16:14:27 阅读更多 →
Qt飞机大战飞机类设计:QGraphicsScene、状态机与碰撞检测

Qt飞机大战飞机类设计:QGraphicsScene、状态机与碰撞检测

1. 飞机类挂在 QGraphics 场景里,是我试出来的最优解1.1 一开始我也用过 QWidget 硬拼飞机大战在 Qt 里算一个很经典的练手项目,但大多数教程会把重点放在"怎么把窗口搭出来""怎么加背景图",真到自己动手写飞机类的时候&…

2026/10/17 16:13:26 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →