JavaScript通过操作CSS的box-shadow/text-shadow属性或CSS变量来动态控制阴影效果,支持内联样式、类名切换、交互响应及主题适配,CSS变量可读写并自动重绘。
JavaScript 本身不直接“实现”阴影效果,而是通过操作元素的 CSS 样式(比如 box-shadow 或 text-shadow)来动态控制阴影;CSS 变量(Custom Properties)则由 CSS 定义,JavaScript 可读写其值,从而实现样式与逻辑的灵活联动。
阴影本质是 CSS 属性,JS 通过修改 style 或 classList 来触发变化:
element.style.boxShadow = "2px 2px 8px rgba(0,0,0,0.2)";
element.classList.add("has-shadow");.has-shadow { box-shadow: 0 4px 12px rgba(0,0,0,0.15); }
button.addEventListener("mouseenter", () => { btn.style.boxShadow = "0 6px 16px rgba(0,82,204,0.3)"; });
先在 CSS 中声明变量(通常放在 :root 或组件选择器内),再在阴影属性中引用:
:root {
--shadow-sm: 0 1px 3px rgba(0,0,0,0.1);
--shadow-md: 0 4px 6px rgba(0,0,0,0.1);
--shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1);
}.card { box-shadow: var(--shadow-md); }
借助 getComputedStyle 读取,用 style.setProperty 修改:
const root = document.documentElement;
const currentShadow = getComputedStyle(root).getPropertyValue("--shadow-md").trim();
root.style.setProperty("--shadow-md", "0 6px 12px rgba(100,100,255,0.2)");
document.body.setAttribute("data-theme", "dark");[data-theme="dark"] :root { --shadow-md: 0 4px 8px rgba(0,0,0,0.3); }
--shadow-x、--shadow-blur),组合使用更灵活box-shadow 会自动重绘,无需手动刷新setProperty,可批量
更新或使用 CSS 动画替代逐帧 JS 控制