WordPress如何实现仅在移动端关闭展开的details标签的最简方案
details 标签跨端默认状态适配方案(WordPress场景)
核心目标
- 桌面端完全保留原有
<details open>的默认展开效果 - 移动端仅将原本默认展开的details改为默认关闭,不改动桌面端体验
最简实现(零改原有HTML结构)
直接在WordPress后台的自定义HTML小工具/主题自定义代码注入页脚位置,加入以下原生JS代码即可:
// 以768px为移动端判定阈值,可根据站点实际断点调整 if (window.innerWidth < 768) { // 页面加载完成后,移除所有默认展开的details的open属性 window.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('details[open]').forEach(detailEl => { detailEl.removeAttribute('open'); }); }) }
进阶适配(处理视口尺寸动态变化场景)
如果需要支持用户拖动窗口跨端、手机旋转屏幕时同步调整details状态,可使用以下脚本,需给原有的默认展开的details标签加上default-open类标记:
调整后的原标签结构:
<details open class="default-open"> <summary>Details</summary> Something small enough to escape casual notice. </details>
对应适配脚本:
function syncDetailsStatus() { const allDefaultOpenDetails = document.querySelectorAll('details.default-open'); allDefaultOpenDetails.forEach(detailEl => { if (window.innerWidth < 768) { detailEl.removeAttribute('open'); } else { detailEl.setAttribute('open', ''); } }) } // 页面加载完成执行 window.addEventListener('DOMContentLoaded', syncDetailsStatus); // 视口尺寸变化时实时同步 window.addEventListener('resize', syncDetailsStatus);
注意事项
- 断点阈值768px为行业通用移动端分界值,可根据站点的实际响应式布局调整为对应数值
- 纯原生实现无第三方依赖,代码体积极小,不会影响站点加载性能
- 不需要修改主题核心文件,所有自定义代码都可以通过WordPress自带的自定义代码功能实现,升级主题不会丢失配置
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

