width属性仅支持像素值或百分比,不支持em、rem、vw等单位;必须与height成对使用以定义滚动区域,且须作为html原生属性存在,不可用css覆盖。

WIDTH属性只接受像素值或百分比,不支持em、rem、vw等相对单位
WIDTH 是 <marquee></marquee> 标签的原生属性,但它对单位极其挑剔。浏览器会直接忽略 width="2rem"、width="50vw" 或 width="fit-content" 这类写法,表现为回退到默认宽度(通常为父容器 100%),且无任何控制台警告。
可用值只有两类:
-
width="300"或width="300px"(等效,推荐带px显式声明) -
width="80%"(相对于其**最近的块级祖先容器**计算,不是视口)
注意:% 值在嵌套 <div> 中容易因祖先未设宽而失效——比如父 <code><div> 没有 <code>width 或是 display: inline,那 width="100%" 就可能塌缩成内容宽度。
WIDTH和HEIGHT必须成对出现才能稳定约束滚动内容可视区域
单独设 width 不足以让滚动“框住”内容。如果只写 <marquee width="400px">长文本长文本</marquee>,垂直方向仍会撑开,导致上下留白不可控、鼠标悬停事件区域错位。
真正起作用的是 width + height 共同定义的矩形裁剪区:
- 超出该矩形的内容会被隐藏(类似
overflow: hidden) -
scrollamount和scrolldelay的运动逻辑都基于这个矩形边界计算 - 若只设
width,height由内部内容撑开,滚动就失去“区域感”,变成整行浮动
正确写法示例:<marquee width="400px" height="60px" direction="left">这是一段超出400px的滚动公告文本</marquee>
用CSS覆盖WIDTH时,marquee元素会失效或行为异常
有人试图用 style="width: 400px;" 替代 width="400px",这是危险操作。部分浏览器(如旧版 Edge、某些 Android WebView)会完全忽略内联样式中的 width,或导致 onmouseover="this.stop()" 失效。
更隐蔽的问题是:当 width 属性缺失,仅靠 CSS 设置时,scrollWidth 和 scrollHeight DOM 属性返回值可能为 0 或 undefined,使依赖它们的 JS 控制逻辑崩溃。
所以坚持用原生属性:width 和 height 必须作为 HTML 属性存在,不要删、不要替、不要用 CSS 覆盖。
实际开发中,WIDTH设太小会导致文字截断且无法滚动
常见误判是以为“越小越紧凑”,结果设了 width="100px" 却发现文字卡死不动。这是因为 <marquee></marquee> 的滚动触发前提是:内容自然宽度 > 容器 width。
验证方法很简单:
- 打开开发者工具,选中
<marquee></marquee>元素,看 computed 样式里的scrollWidth是否大于clientWidth - 若
scrollWidth ≤ clientWidth,滚动不会启动(behavior 无效) - 文字含空格或换行符时,浏览器可能按“可见字符宽度”而非“渲染后总宽”判断,导致意外静止
稳妥做法:先用 width="100%" + 固定 height 测试滚动是否生效,再逐步调小 width 并检查 scrollWidth 值变化。
<marquee></marquee> 已被 W3C 废弃,所有这些属性在现代标准中都不受保障。WIDTH 看似简单,但它的生效强依赖于整个标签的原始解析逻辑——一旦混入 Flex、Grid 或 transform,就大概率失灵。真要长期维护,用 CSS @keyframes + overflow: hidden 才是可控路径。











