2023-04-27 03:55:07
在 JavaScript 中编写 CSS 可以通过多种方式实现,以下是具体方法和注意事项:
1. 内联样式直接在 HTML 元素的 style 属性中编写 CSS,适用于简单、静态的样式设置。
<p style="color: red; font-size: 20px;">Hello World</p>通过 JavaScript 操作元素的 style 属性,动态修改样式。
const p = document.querySelector('p');p.style.color = 'blue';p.style.fontSize = '24px'; // 注意:需使用驼峰命名法(如 fontSize)通过 document.styleSheets 接口操作样式表,适合批量修改或动态创建规则。
// 获取第一个样式表并修改规则const styleSheet = document.styleSheets[0];const newRule = styleSheet.cssRules[0].style;newRule.color = 'green';// 动态添加新规则styleSheet.insertRule('body { background-color: #f0f0f0; }', styleSheet.cssRules.length);通过 JavaScript 插入 <style> 标签,实现样式动态加载。
const style = document.createElement('style');style.textContent = ` .dynamic-class { color: purple; font-weight: bold; }`;document.head.appendChild(style);// 应用样式document.querySelector('p').classList.add('dynamic-class');如 styled-components、Emotion 等库,将 CSS 与组件绑定(适用于 React/Vue 等框架)。
// 示例:styled-componentsimport styled from 'styled-components';const StyledButton = styled.button` background: ${props => props.primary ? 'blue' : 'gray'}; color: white;`;优先级问题
内联样式 > style 属性 > CSSOM > 外部样式表。
使用 !important 需谨慎,可能破坏样式层级。
性能优化
避免频繁操作 DOM 或样式表(如循环中修改样式),可能引发重排/重绘。
批量操作时,使用 requestAnimationFrame 或 CSSOM 的 replace() 方法。
可维护性
大型项目建议分离 CSS 和 JavaScript,或使用 CSS-in-JS 方案。
避免在 JS 中硬编码样式值(如颜色),改用 CSS 变量:document.documentElement.style.setProperty('--main-color', 'red');
兼容性
旧版 IE 对 styleSheets 的支持有限,需测试目标环境。
根据项目需求选择合适的方法,平衡动态性与可维护性。