新闻详情

新闻详情

首页 / 资讯中心 / 详情

10X Visium空间转录组从芯片结构到数据分析全流程避坑指南

发布时间:2026/9/29 19:24:43来源:尧图网络
10X Visium空间转录组从芯片结构到数据分析全流程避坑指南
空间转录组这两年火得很快尤其是10X Visium平台几乎成了做组织原位表达谱研究的标配工具。但说实话我见过太多人拿到数据之后卡在第一步——不知道芯片上那些小方块到底代表什么也不清楚组织切片贴上去之后数据是怎么和位置对应起来的。更常见的情况是跑完流程拿到表达矩阵却发现组织覆盖区域和测序区域对不上或者某些基因的表达模式怎么看都不对劲。这篇内容就是想把从芯片结构到数据分析的完整链路拆开讲清楚顺便把那些我亲自踩过的坑和绕过的弯路都摊开来说。不管你是刚接触空间转录组的研究生还是想从单细胞转录组拓展到空间维度的分析人员下面这些内容应该都能帮你省下不少试错时间。1. 先搞懂Visium芯片到底长什么样1.1 芯片上的四个捕获区域不是随便画的Visium芯片的外观看起来就是一块普通的载玻片尺寸和标准病理切片用的载玻片一致大约是75mm×25mm。但它的表面并不普通——上面有四个独立的捕获区域每个区域的大小是6.5mm×6.5mm。这四个区域是物理隔离的也就是说你在一张芯片上做四个样本它们之间不会发生交叉污染。每个捕获区域内密集排列着大约5000个捕获点这些捕获点的直径是55微米中心到中心的距离是100微米。这个间距很关键因为它直接决定了你的空间分辨率。100微米大约对应多少个细胞这取决于组织类型。比如在肝脏或者脾脏这类细胞比较大的组织里一个捕获点可能覆盖一到两个细胞但在淋巴结或者脑组织里一个点下面可能压着五到十个细胞。所以Visium严格来说不是单细胞分辨率的技术它是“spot-level”的分辨率。每个捕获点上其实连着两类探针一类是带有poly-T序列的捕获探针用来抓取mRNA的poly-A尾巴另一类是空间条形码spatial barcode每个捕获点的空间条形码序列都是唯一的。这个条形码的长度是16个碱基四种碱基的组合足够给每个点分配一个独一无二的标识。除了空间条形码还有一套分子标识符UMI用来区分同一个基因的不同mRNA分子避免PCR扩增带来的偏差。注意芯片四个捕获区域虽然独立但你在做组织切片的时候如果切片位置偏了组织可能只覆盖了部分捕获区域甚至跨到了区域之间的空白地带。这种情况在数据分析时会导致空间坐标和表达矩阵的对应关系出现混乱。1.2 组织切片和芯片的贴合为什么这么讲究组织切片贴到芯片上之后需要经过固定、染色、成像这几个步骤。成像这一步非常关键——你需要一张高分辨率的组织切片图像这张图像后续要用来做组织覆盖区域的识别和空间坐标的映射。通常用的是HE染色或者荧光染色具体选哪种取决于你的组织类型和下游分析需求。成像完成之后组织切片会被透化permeabilization也就是用酶把细胞膜和核膜打开让mRNA释放出来。释放出来的mRNA会扩散到芯片表面被捕获点上的poly-T探针抓住。这里有一个时间控制的问题透化时间太短mRNA释放不充分捕获效率低透化时间太长mRNA扩散范围过大空间分辨率会下降。10X官方针对不同组织类型给出了推荐的透化时间但实际操作中还是需要做预实验来优化。我自己的经验是对于大多数常见组织比如小鼠脑、人乳腺、人前列腺按照官方推荐的透化时间走基本没问题。但如果是纤维化程度高的组织比如某些肿瘤样本透化时间可能需要延长到官方推荐值的1.5倍左右。这个调整没有绝对标准最好是用预实验切片先试一下看看组织形态是否完整、mRNA释放是否充分。1.3 空间条形码测序读段的结构决定了分析流程Visium的测序读段结构比较特殊理解这个结构对后续数据分析非常重要。读段分为几个部分首先是空间条形码16bp然后是UMI12bp接着是poly-T序列最后才是实际的mRNA序列。在测序的时候通常用的是双端测序Read1用来读取空间条形码和UMIRead2用来读取mRNA序列。这个结构意味着在数据分析的第一步你需要从Read1中提取空间条形码和UMI然后把Read2比对到参考基因组上。空间条形码要和芯片上的已知条形码序列进行比对允许一定的错配通常是1个碱基的错配因为测序过程中可能会有碱基错误。UMI则用来去重同一个UMI对应的多条读段被认为是同一个mRNA分子的扩增产物只计数一次。这里有一个容易忽略的细节空间条形码的比对允许错配但错配率不能太高。如果允许2个以上的错配可能会出现条形码之间的“串扰”也就是一个读段被错误地分配到了相邻的捕获点。10X官方推荐的最大错配数是1这个设置在实际分析中是比较稳妥的。2. 从原始数据到表达矩阵的关键步骤2.1 Space Ranger到底帮你做了哪些事10X官方提供的Space Ranger软件是处理Visium数据的标准工具它把很多繁琐的步骤打包成了一个命令行流程。你输入的是原始测序数据FASTQ文件和一张组织切片图像输出的是包含空间坐标的表达矩阵、组织覆盖区域的图像、以及一系列质控指标。Space Ranger的核心步骤包括条形码提取和校正、读段比对、UMI计数、组织区域识别、空间坐标分配。其中组织区域识别这一步比较有意思——它会根据组织切片的图像自动判断哪些捕获点被组织覆盖了哪些没有。这个判断是基于图像中组织的轮廓和捕获点的位置关系来做的。被组织覆盖的捕获点会被标记为“in tissue”没有覆盖的标记为“out of tissue”。后续分析通常只保留in tissue的捕获点。但自动识别并不总是准确的。我遇到过好几次组织边缘的区域被错误地排除了或者背景噪声被误判成了组织。这种情况下你可以在Space Ranger的输出中手动调整组织区域的掩膜mask或者用Loupe Browser这个可视化工具来手动圈选组织区域。Loupe Browser是10X官方提供的免费桌面工具可以直接打开Space Ranger的输出结果查看组织图像和捕获点的叠加效果手动修改组织区域。2.2 质控指标里哪些数值需要特别关注Space Ranger输出的质控报告里有几个关键指标我每次都会重点看指标名称含义参考范围异常时的可能原因Estimated Number of Cells估计的细胞数因组织类型而异透化不足或过度Median UMI per Spot每个捕获点的中位UMI数500-5000测序深度不足或mRNA降解Median Genes per Spot每个捕获点的中位基因数200-2000RNA质量差或透化不当Fraction of Reads in Spots落在捕获点上的读段比例70%组织覆盖不佳或背景高Sequencing Saturation测序饱和度50%测序深度不够这些指标不是孤立的需要结合起来看。比如Median UMI per Spot偏低同时Fraction of Reads in Spots也偏低那很可能是组织覆盖不好或者透化出了问题。如果Median UMI per Spot正常但Median Genes per Spot偏低可能是RNA降解比较严重短片段居多。还有一个指标叫“Fraction of Reads in Tissue”这个和“Fraction of Reads in Spots”不一样。前者是落在组织覆盖区域内的读段比例后者是落在所有捕获点上的读段比例。如果组织覆盖区域很小但捕获点上的读段比例很高说明背景噪声可能比较大。2.3 表达矩阵的稀疏性怎么理解Visium的表达矩阵非常稀疏也就是说大部分捕获点在大部分基因上的计数是零。这个稀疏性来自两个层面一是每个捕获点上的mRNA分子数量有限二是测序深度有限。一个典型的Visium数据集每个捕获点可能检测到1000到3000个基因但整个转录组有20000多个基因所以大部分基因的计数是零。这种稀疏性对下游分析有直接影响。比如你做聚类分析的时候如果直接用原始计数矩阵稀疏性会导致聚类结果不稳定。常见的做法是先做归一化比如用SCTransform或者LogNormalize然后做降维PCA或者UMAP再进行聚类。归一化的目的是消除测序深度和捕获效率带来的偏差让不同捕获点之间的表达量可比。还有一个问题是“零膨胀”——有些基因在某些捕获点上计数为零可能是因为这个基因真的不表达也可能是因为技术原因没检测到。这个问题在空间转录组里比单细胞转录组更严重因为每个捕获点上的mRNA分子数更少。处理零膨胀的方法有很多比如用插补imputation算法来填补缺失值但插补本身也有风险可能会引入假阳性。我的建议是如果下游分析对零值敏感可以先试试用低表达基因过滤的方式把那些在大多数捕获点上都为零的基因去掉而不是急着做插补。3. 空间数据分析的几种典型思路3.1 空间可变基因的鉴定不是简单的差异表达空间可变基因Spatially Variable Genes, SVGs是空间转录组分析的核心内容之一。这类基因的表达模式在空间上有明显的梯度或者聚集不是随机分布的。鉴定SVGs的方法有很多比如SPARK、SpatialDE、trendsceek等它们背后的统计模型不太一样但基本思路都是检验基因表达是否和空间坐标有显著关联。SPARK用的是广义线性空间模型它把空间坐标作为协变量检验基因表达是否在空间上有显著变异。SpatialDE用的是高斯过程回归它假设基因表达是空间坐标的平滑函数然后检验这个函数的方差是否显著大于零。trendsceek用的是标记点过程它把高表达捕获点看作空间中的“标记点”检验这些点是否在空间上聚集。这几种方法各有优劣。SPARK的统计效力比较高但计算量大尤其是基因数量多的时候。SpatialDE的速度快一些但对非线性空间模式的检测能力稍弱。trendsceek适合检测空间聚集模式但对梯度模式的检测不太敏感。实际分析中我通常会同时跑两到三种方法取交集作为高置信度的SVGs然后再做后续分析。提示SVGs的鉴定结果对捕获点数量很敏感。如果你的组织覆盖区域很小捕获点数量少于500个SVGs的鉴定结果可能不太可靠。这种情况下建议先扩大组织覆盖区域或者增加生物学重复。3.2 空间聚类和区域注释的实操细节空间聚类是把捕获点按照表达谱的相似性分成若干组每组代表一个空间区域或者细胞类型。常用的聚类方法包括Louvain、Leiden、K-means等。和单细胞转录组聚类不同的是空间聚类还需要考虑空间坐标的信息——相邻的捕获点更可能属于同一个区域。实现空间聚类有两种思路一种是把空间坐标作为额外的特征加入聚类另一种是先做表达谱聚类然后用空间坐标做后处理比如平滑或者区域合并。第一种思路更直接但空间坐标的权重需要调整权重太高会导致聚类结果完全由空间位置决定权重太低又起不到空间约束的作用。第二种思路更灵活可以先看表达谱聚类的结果再根据空间分布来调整。区域注释是另一个难点。聚类得到的簇需要被赋予生物学意义比如“肿瘤区域”“间质区域”“免疫细胞浸润区域”等。注释的依据通常包括标记基因的表达、组织形态学特征、以及已知的生物学知识。比如一个簇高表达EPCAM和KRT18那很可能是上皮细胞区域如果高表达PTPRC和CD3D那可能是免疫细胞区域。我自己的做法是先把每个簇的差异表达基因列出来然后和已知的细胞类型标记基因做比对。同时把聚类结果叠加到组织图像上看看空间分布是否和形态学特征一致。如果某个簇的空间分布和组织图像上的某个形态学区域高度吻合那注释的可信度就比较高。3.3 细胞类型解卷积在Visium上的特殊考量Visium的每个捕获点包含多个细胞所以直接做细胞类型注释是不准确的。常用的做法是细胞类型解卷积deconvolution也就是根据单细胞转录组的参考数据估计每个捕获点中各种细胞类型的比例。常用的工具包括SPOTlight、SpatialDWLS、RCTD等。这些工具的核心思路都是给定一个单细胞参考数据集学习每种细胞类型的表达特征然后对每个捕获点的表达谱做回归估计细胞类型比例。RCTD用的是最大似然估计SPOTlight用的是非负矩阵分解SpatialDWLS用的是加权最小二乘。解卷积的结果好坏很大程度上取决于参考数据集的质量。如果参考数据集里的细胞类型和你的组织不匹配解卷积结果就会不可靠。比如你用一个健康肝脏的单细胞数据集去解卷积肝癌组织那肿瘤细胞的比例估计可能会偏低。这种情况下最好是用匹配的组织类型的单细胞数据集或者自己构建参考数据集。还有一个问题是解卷积的稳定性。不同工具的结果可能会有差异尤其是当细胞类型之间的表达谱比较相似时。我的建议是至少用两种工具跑一下看看结果是否一致。如果差异很大那可能需要检查参考数据集或者调整参数。4. 那些年我踩过的坑和绕过的弯路4.1 组织切片贴片时的气泡问题组织切片贴到芯片上的时候如果操作不当组织下面可能会产生气泡。气泡会导致该区域的mRNA无法被捕获在数据分析时表现为一片“空白区”。更麻烦的是气泡区域的捕获点可能仍然被标记为“in tissue”因为组织图像上看起来组织是覆盖的但实际上mRNA没有释放出来。避免气泡的关键是贴片时的操作手法。我的经验是先把组织切片漂浮在水浴中然后用芯片从下方轻轻捞起让组织自然展开。捞起之后用滤纸轻轻吸去多余的水分但不要用力按压。如果看到气泡可以把芯片放回水浴中让组织重新漂浮再重新捞一次。如果气泡已经产生了在数据分析时可以通过查看每个捕获点的UMI计数来识别。气泡区域的捕获点UMI计数会显著低于周围区域。在Loupe Browser里可以手动把这些点排除掉或者用Space Ranger的掩膜功能重新定义组织区域。4.2 透化时间优化不是一次就能搞定的透化时间的优化需要做预实验这个大家都知道。但很多人做预实验的时候只试了一个时间点结果正式实验的时候发现效果不好又得重新做。我的建议是第一次做某个组织类型的时候至少试三个时间点官方推荐时间、推荐时间的0.5倍、推荐时间的1.5倍。然后看哪个时间点的组织形态最完整、mRNA释放最充分。判断mRNA释放是否充分可以看Space Ranger输出的Median UMI per Spot。如果这个值在推荐时间点上明显偏低那可能需要延长透化时间。但也不能只看这一个指标还要结合组织形态来看。如果透化时间过长组织形态会变得模糊细胞边界不清晰这时候即使UMI计数高空间分辨率也已经下降了。还有一个细节是透化酶的批次差异。不同批次的透化酶活性可能不一样所以即使你之前优化过透化时间换了新批次的酶之后最好还是重新验证一下。这个坑我踩过不止一次有一次换了新批次的酶按照原来的时间透化结果UMI计数直接掉了一半。4.3 空间坐标和表达矩阵对不上的排查思路空间坐标和表达矩阵对不上是Visium分析中比较常见的问题表现是聚类结果的空间分布和组织图像上的形态学区域不一致。这个问题可能来自几个环节第一组织图像和捕获点的对齐是否准确。Space Ranger会自动做对齐但如果组织图像的质量不好比如染色太深或者太浅对齐可能会偏。这时候可以在Loupe Browser里手动调整对齐。第二组织区域的掩膜是否准确。如果掩膜把不该包含的区域包含了进来或者把该包含的区域排除了空间坐标和表达矩阵的对应关系就会出错。这个也需要在Loupe Browser里手动检查和调整。第三空间条形码的比对是否有问题。如果条形码的错配率设置得太高可能会出现条形码串扰导致捕获点的空间坐标被错误分配。这个可以通过检查Space Ranger的日志文件来确认看看条形码比对的错配率是否在合理范围内。排查的时候我通常会先把表达矩阵中的高变基因或者标记基因的空间分布画出来看看是否和组织图像上的预期区域一致。如果不一致再逐步检查上述几个环节。4.4 低质量捕获点的过滤标准Space Ranger输出的表达矩阵包含了所有捕获点包括那些质量很差的点。这些低质量点如果不过滤掉会对下游分析产生很大干扰。但过滤标准怎么定很多人不太清楚。我通常会用以下几个标准来过滤UMI计数低于500的捕获点去掉检测到的基因数低于200的去掉线粒体基因比例高于20%的去掉。这几个阈值不是绝对的需要根据具体组织类型来调整。比如心肌组织的线粒体基因比例本来就高用20%的阈值可能会过滤掉太多点。还有一个指标是“spot area”也就是捕获点被组织覆盖的面积比例。如果这个比例低于50%说明这个点大部分区域没有被组织覆盖质量可能不好。这个指标在Space Ranger的输出里有可以用来辅助过滤。过滤完之后最好再看一下剩余捕获点的空间分布确保没有把某个区域全部过滤掉。如果某个区域被全部过滤了那可能是这个区域的组织质量本身就有问题需要回到实验阶段找原因。5. 从Visium数据中挖掘生物学故事的几个方向5.1 肿瘤微环境的空间异质性分析Visium在肿瘤研究中的应用非常广泛核心问题是肿瘤微环境的空间异质性。比如肿瘤中心和侵袭边缘的基因表达差异、免疫细胞在肿瘤组织中的空间分布、基质细胞和肿瘤细胞的相互作用等。分析的时候可以先把肿瘤区域和正常区域分开然后比较这两个区域的差异表达基因。更进一步可以把肿瘤区域细分成不同的空间亚区比如缺氧区、增殖区、侵袭前沿等然后看每个亚区的特征基因是什么。免疫细胞的空间分布可以用解卷积的结果来分析看看哪些区域的免疫细胞浸润程度高哪些区域低。我做过的一个项目中发现肿瘤侵袭前沿的免疫抑制基因表达明显高于肿瘤中心而且这种空间模式在多个样本中是一致的。这个发现后来通过免疫组化验证了说明Visium的空间分析结果是比较可靠的。5.2 发育过程中的空间基因表达动态发育生物学是Visium的另一个重要应用场景。比如小鼠胚胎发育过程中不同器官原基的空间位置和基因表达模式。这类研究通常需要多个发育时间点的样本然后比较不同时间点之间的空间表达变化。分析的时候可以先用空间聚类把不同器官原基分开然后看每个原基的特征基因是什么。接着比较不同时间点之间这些原基的空间位置是否发生了变化特征基因的表达是否发生了动态变化。还可以做空间轨迹分析看看某些基因的表达是否沿着某个空间方向呈现梯度变化。这类分析的难点在于样本之间的对齐。不同时间点的胚胎大小和形态不一样直接比较空间坐标是不行的。常见的做法是用标志基因或者形态学特征来做对齐或者用空间配准算法把不同时间点的图像对齐到同一个参考坐标系。5.3 神经科学中的空间转录组应用脑组织是Visium应用比较早的组织类型之一因为脑组织的空间结构非常精细不同脑区的基因表达差异很大。比如小鼠脑的皮层、海马、丘脑等区域都有各自的特征基因。分析脑组织Visium数据的时候空间聚类的结果通常和已知的脑区解剖结构高度吻合。这时候可以用已知的脑区标记基因来注释聚类结果比如皮层深层标记基因、海马CA1标记基因等。然后可以进一步分析不同脑区之间的基因表达差异或者同一脑区内不同细胞层的表达梯度。脑组织的一个特殊问题是细胞密度高每个捕获点下面的细胞数量多解卷积的难度比较大。这时候可能需要用更高分辨率的参考数据集或者用反卷积方法来估计细胞类型比例。5.4 空间细胞通讯分析的实操要点细胞通讯分析是空间转录组的一个热门方向核心问题是空间上相邻的细胞类型之间是否存在配体-受体的相互作用。常用的工具包括CellChat、NicheNet、SpatialCellChat等。这类分析的基本思路是先根据解卷积结果确定每个捕获点的细胞类型组成然后找出空间上相邻的捕获点对检查这些捕获点对中是否存在配体-受体的共表达。如果某个配体在一种细胞类型中高表达对应的受体在相邻的另一种细胞类型中高表达那就提示可能存在细胞通讯。实操中需要注意几点第一空间相邻的定义需要明确通常是用捕获点之间的距离阈值来定义比如距离小于200微米的捕获点算作相邻。第二配体-受体数据库的选择会影响结果不同的数据库包含的配体-受体对不一样。第三统计显著性需要做多重检验校正因为配体-受体对的数量很多。我自己的经验是细胞通讯分析的结果需要谨慎解读。共表达不等于一定有通讯还需要结合生物学知识和实验验证。但作为假设生成的工具空间细胞通讯分析还是很有价值的。6. 写在最后的一些实操建议Visium空间转录组的技术门槛不算特别高但要做出可靠的结果实验和数据分析的每个环节都需要仔细把控。从芯片结构到数据分析我上面提到的这些细节和坑大部分都是我在实际项目中遇到过的。有些坑踩过一次之后就记住了有些坑则需要反复提醒自己。如果你刚开始做Visium我的建议是先从一个小规模的项目开始比如一张芯片四个样本把整个流程跑通一遍。跑通之后再扩大规模这样即使出了问题排查起来也容易一些。另外Space Ranger和Loupe Browser的官方文档写得比较详细遇到问题可以先查文档大部分常见问题都有解答。数据分析方面不要急着上复杂的模型。先把基础的质控、归一化、聚类做好确保数据质量没问题再考虑做更高级的分析。很多看起来复杂的生物学问题其实用简单的空间聚类和差异表达分析就能得到有价值的线索。最后说一个我自己的习惯每次分析完一个Visium数据集我都会把关键步骤的参数和结果整理成一个文档包括透化时间、质控指标、过滤标准、聚类参数等。这样下次做类似组织的时候可以直接参考不用从头摸索。这个习惯帮我省了很多时间也避免了重复踩坑。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

英飞凌TC3xx SOTA升级:SWAP机制与UCB配置详解 2026/9/29 20:20:59

英飞凌TC3xx SOTA升级:SWAP机制与UCB配置详解

做汽车嵌入式开发的兄弟,几乎没有人没听过SOTA这个名字——整车OTA、固件远程升级,这几年已经是智能汽车的基本功。但真正在英飞凌TC3xx上把SOTA落地,你会发现难点根本不在网络传输、也不在文件解析,而在芯片本身的启动和存储机制…

阅读更多 →
Argent 视觉回归测试指南:OCR 截图对比如何揪出每一个意外 UI 变化 2026/9/29 20:20:53

Argent 视觉回归测试指南:OCR 截图对比如何揪出每一个意外 UI 变化

Argent 视觉回归测试指南:OCR 截图对比如何揪出每一个意外 UI 变化 【免费下载链接】argent An agentic toolkit to control, debug, and profile iOS and Android apps. Made by Software Mansion. 项目地址: https://gitcode.com/gh_mirrors/arg/argent Ar…

阅读更多 →
《微服务架构设计模式》 第八章读书笔记:外部API模式 2026/9/29 20:20:53

《微服务架构设计模式》 第八章读书笔记:外部API模式

标签:微服务 API网关 API Gateway BFF Spring Cloud Gateway GraphQL 一句话:微服务拆分后不能直接对外暴露细粒度服务接口;API Gateway/BFF 作为统一入口,解决多客户端、网络差异、协议转换、多服务数据聚合问题。前言单体应用对…

阅读更多 →
菜鸟教程:2026年OpenClaw(Clawdbot)搭建及指导——TaoToken统一Key接入与config.toml配置骨架 2026/9/29 20:20:53

菜鸟教程:2026年OpenClaw(Clawdbot)搭建及指导——TaoToken统一Key接入与config.toml配置骨架

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

阅读更多 →
ChatGPT 又降智了?这次你可能都察觉不到:用 TaoToken 统一 Key 给 GPT-4o/o3 做一次可复现的模型路由体检 2026/9/29 20:20:53

ChatGPT 又降智了?这次你可能都察觉不到:用 TaoToken 统一 Key 给 GPT-4o/o3 做一次可复现的模型路由体检

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

阅读更多 →
VSCode 里 Rust 路径显示异常?用 TaoToken 统一 Key 排查配置链路 2026/9/29 20:20:52

VSCode 里 Rust 路径显示异常?用 TaoToken 统一 Key 排查配置链路

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉