顶部公告条需用position:fixed悬浮,body加padding-top避免遮挡,移动端适配box-sizing和内边距,localStorage持久化关闭状态,支持随机/轮播文案,兼容IE11与无障碍访问。
直接在 index.html 的 <body> 开头插入一个带样式的 <div>,配合 position: fixed 即可稳定悬浮在视口顶部。关键不是“加个 div”,而是避免遮挡后续内容、适配移动端、不干扰页面滚动流。
<body> 加上 padding-top(值等于公告条高度),否则正文会从公告条底下开始渲染,被盖住top: 0、left: 0、width: 100% 和 z-index: 1000(确保压在其他元素上)box-sizing: border-box 和 padding 内边距,防止文字贴边或溢出fixed-top 或 sticky-top),但注意它们默认不占文档流,仍需手动处理 body 间距用户点一次 × 就别再显示,得靠前端存状态。用 localStorage 最轻量,不用后端也能记下是否已关闭。
onclick="closeNotice(); return false;",函数里调用 localStorage.setItem('noticeClosed', 'true')
localStorage.getItem('noticeClosed') === 'true',为真则直接 display: none 整个公告条cookie:没必要,增加请求头负担;也不要用 sessionStorage:关掉标签页就重来,体验断层localStorage,需包裹 try/catch 防止报错中断脚本如果运营需要频繁换文案,硬编码在 HTML 里维护成本高。最小改动方案是把内容抽成 JS 对象,按需渲染。
const notices = ["? 新功能上线:支持导出 PDF", "⚠️ 系统维护:今晚 23:00–23:30"]
Math.floor(Math.random() * notices.length) 随机选一条,或用 localStorage 记录上次展示索引,实现顺序轮播setInterval 自动切换:干扰用户阅读,且焦点在公告上时可能误操作;只在页面加载时取一次即可IE11 还有不少内网系统在用,而屏幕阅读器用户依赖语义化结构。这两点常被忽略,一加就报错或读不出来。
立即学习“前端免费学习笔记(深入)”;
flex 某些写法(如 flex: 1),公告条内的文字容器改用 display: table-cell 或固定宽度 + text-align
role="alert",让屏幕阅读器自动朗读变化;关闭按钮加 aria-label="关闭公告"
marquee 标签:已被废弃,iOS 完全不支持,动画卡顿还伤性能实际最难的不是写出来,是每次改完都得手动清 localStorage 测试关闭逻辑,以及确认移动端横竖屏切换时公告条高度没崩。